Имитационные модели основаны на данных, и при использовании данных из внешней базы данных мы рекомендуем импортировать их во внутреннюю (встроенную) БД AnyLogic. В настоящее время использование встроенной БД – наиболее удобный и эффективный способ работы с данными модели в AnyLogic.
Во-первых, многие элементы модели имеют визуальные элементы управления для извлечения данных из таблиц БД. Пример таких элементов управления приведен в статье «Создание прибытий агентов».
Во-вторых, подключение к внешнему источнику данных во время запуска модели может снизить скорость ее работы. Благодаря возможности использовать встроенную БД вы можете этого избежать.
Из этой статьи вы узнаете, как импортировать данные из внешней БД с помощью драйвера JDBC, чтобы подключить имитационную модель к PostgreSQL и создать расписание в AnyLogic.
Подключение к внешней базе данных
Вы можете импортировать данные из MS Excel, MS Access или MS SQL Server в пару кликов. Но что если они хранятся в базе данных, такой как MySQL, Oracle Database или PostgreSQL?
Прежде всего, вам необходимо установить соединение с внешней БД. Рассказываем, как это сделать, на реальном примере.

Допустим, что PostgreSQL хранит недельное расписание персонала, и на основе этих данных вам нужно определить наличие свободных ресурсов.
Для этого нужно установить соединение. Мы рекомендуем использовать инструмент соединения с базой данных. Однако он сможет подключиться к внешней базе данных только с соответствующим драйвером JDBC, созданным специально для PostgreSQL.
Вы можете скачать драйвер JDBC для PostgreSQL с их официального сайта. Затем скопируйте все файлы драйвера в папку модели и импортируйте JAR-файл драйвера (Java ARchive) во вкладку «Зависимости» в свойствах модели.

Настройка инструмента соединения с БД и использование функции
Теперь с помощью драйвера JDBC вы можете настроить соединение с базой данных PostgreSQL:
1. Придумайте и укажите понятное название, скажем, «postgreInput»
2. Введите org.postgresql.Driver в свойстве драйвера.
3. В случае с PostgreSQL свойство «URL соединения» принимает одну из следующих форм:
jdbc:postgresql://host/database
jdbc:postgresql://host:port/database
Параметры имеют следующие значения:
host — имя хоста;
port — номер порта, который слушает сервер. Обычно номер порта PostgreSQL по умолчанию — 5432;
database — название базы данных.
4. Укажите логин и пароль для базы данных, если они есть.

После настройки инструмента соединения с БД вы можете использовать его для импорта данных о расписании сотрудников из PostgreSQL во встроенную БД AnyLogic с помощью кода:
ModelDatabase modelDB = getEngine().getModelDatabase();
Connection sourceConnection = postgreInput.getConnection();
Connection targetConnection = modelDB.getConnection();
try {
modelDB.importFromExternalDB(sourceConnection, “schedule_data”,
“db_schedule”, true, false);
targetConnection.commit();
} catch (Exception e) {
targetConnection.rollback();
} finally {
targetConnection.setAutoCommit(true);
}
В этом случае нужно использовать функцию importFromExternalDB() из ModelDatabase API:
public void importFromExternalDB(java.sql.Connection sourceConnection,
java.lang.String sourceTableName,
java.lang.String targetTableName,
boolean clearTargetTable,
boolean autoCommit)
Функция импортирует одну таблицу из внешней БД. Типы столбцов должны совпадать или быть конвертируемыми
Параметры:
- sourceConnection — объект подключения к внешней БД;
- sourceTableName — таблица во внешней БД, из которой копируются данные (schedule_data в этом случае);
- targetTableName — таблица во встроенной БД, куда следует скопировать данные (db_schedule в этом случае);
- clearTargetTable — если true, целевая таблица будет очищена перед копированием данных;
- autoCommit — если false, это действие не будет открывать или фиксировать какую-либо транзакцию (что в некоторых случаях может снизить скорость).
Как создать недельное расписание?
При выполнении кода выше таблица во встроенной БД (db_schedule) будет заполнена значениями из таблицы schedule_data в PostgreSQL. Теперь все готово для извлечения данных из встроенной БД и составления недельного расписания в имитационной модели. Для этого в AnyLogic есть элемент Расписание.


Подробнее о создании расписания на неделю — в Справке AnyLogic.
В этом посте мы рассмотрели три вопроса, которые часто получаем от пользователей: как импортировать данные из внешней БД, отличной от MS Excel, MS Access или MS SQL Server? как использовать JDBC-драйвер для подключения AnyLogic к таким БД, как MySQL или PostgreSQL? как составить недельное расписание с помощью внутренней БД?
Не забудьте подписаться на нашу ежемесячную рассылку, чтобы получать на электронную почту свежие материалы блога.