AnyLogic Professional предоставляет пользователю набор инструментов (Вставка (Insert), Обновление (Update), Запрос (Query), Ключ-Значение), облегчающих работу с базами данных. Используя их, вам больше не нужно будет пытаться самостоятельно формировать SQL запросы и выражения — теперь вы можете легко конструировать их с помощью графических средств вышеперечисленных инструментов.
Если же вы пользователь AnyLogic University Researcher или AnyLogic PLE, то вся эта функциональность также будет доступна, но в этом случае в вашем распоряжении будет только лишь объект База данных. Вам нужно будет добавить в модель элемент База данных, связать его с внешней базой данных и затем уже работать с ее содержимым посредством перечисленных ниже функций.
Демо-модель: Loading Data from a Database and Using ResultSet Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.- Функции
-
Функция Описание boolean connect() Устанавливает соединение с базой данных, указанной в параметрах конструктора. Процесс соединения выполняется, только если объект еще не соединен. Возвращает true, если соединение было успешно установлено или уже существовало, и false в противном случае. void disconnect() Разрывает соединение с базой данных. Мы рекомендуем явно завершать или производить откат активной транзакции (если какая-либо была явно открыта с помощью функции Connection.setAutoCommit(boolean)) перед вызовом этой функции. Если эта функция вызывается в момент существования активной транзакции, то результаты будут непредсказуемы. Если произойдет ошибка, возникнет ошибка RuntimeException.Connection getConnection() Возвращает существующее соединение с базой данных или устанавливает с ней соединение, если оно не было установлено. ResultSet getResultSet(String sqlQuery) Выполняет заданный SQL-запрос (sqlQuery) и возвращает полученный набор значений (или null, если возникла ошибка). Вызовите функцию ResultSet.close() после выполнения всех необходимых операций.boolean modify(String sqlQuery) Выполняет заданный SQL-запрос (sqlQuery). Создан для SQL-запросов, изменяющих данные, хранящиеся в базе данных. Возвращает булево значение, показывающее, была ли операция проведена успешно или нет. Integer getFieldType(String sTableName, String sFieldName) Возвращает SQL-тип указанного поля или null, если произошла ошибка.
sTableName — имя таблицы
sFieldName — имя поляString getValue(String sqlQuery) Выполняет заданный SQL-запрос (sqlQuery) и возвращает полученное значение (или null, если возникла ошибка, или если запрос не выдал никаких значений). Предназначен для SQL-запросов, которые возвращают только одно значение (например, функции агрегирования SQL — MAX, MIN и т.д.). java.util.Map<java.lang.string,java.lang.string> getRow(String sqlQuery) Выполняет заданный SQL-запрос (sqlQuery) и возвращает полученные значения или null, если возникла ошибка, или если запрос не выдал никаких значений. Предназначен для SQL-запросов, которые возвращают только одну строку значений. Результаты возвращаются в виде объекта типа Map и содержат пары {"имя поля"; "значение поля"} типа String. Object getMatrix(String sqlQuery, String type) Выполняет заданный SQL запрос и возвращает полученные значения в виде двумерного массива заданного типа или null, если возникла ошибка, или если запрос не выдал никаких значений, или если заданный тип недопустим. Функция поддерживает все допустимые примитивные типы Java, а также класс String. ResultSet getTableResultSet(String tableName, String listOfFields, String keyField, String keyFieldValue) Возвращает набор значений, полученный путем выполнения запроса по заданным полям и строкам указанной таблицы. Вызовите функцию ResultSet.close() после выполнения всех необходимых операций.tableName — имя таблицы
listOfFields — список полей (игнорируется, если null)
keyField — имя ключевого поля (игнорируется, если null или если sListOfFields — null)
keyFieldValue — значение ключевого поля (игнорируется, если null или если sListOfFields — null)ResultSet getQueryResultSet(String queryText, String listOfFields, String keyField, String keyFieldValue) Возвращает набор значений, полученный путем выполнения запроса по заданным полям и строкам указанного запроса. Вызовите функцию ResultSet.close() после выполнения всех необходимых операций.queryText — текст запроса
listOfFields — список полей (игнорируется, если null)
keyField — имя ключевого поля (игнорируется, если null или если sListOfFields — null)
keyFieldValue — значение ключевого поля (игнорируется, если null или если sListOfFields — null)
Функции базы данных, получающие наборы результатов (getResultSet(), getTableResultSet(), getQueryResultSet()), представляют их в виде интерфейса ResultSet.
Это встроенный интерфейс Java, предоставляющий набор функций, позволяющих взаимодействовать с хранимыми в нем данными.
Допустим, у нас есть объект Database, который представляет базу данных, содержащую таблицу PEOPLE, в которой хранятся записи, скажем, о сотрудниках компании.
Простейший способ получения интерфейса ResultSet из этой таблицы выглядит так:
ResultSet peopleTable = Database.getTableResultSet("PEOPLE");
Полученный объект peopleTable будет содержать всю таблицу. По умолчанию она не может обновляться и имеет «курсор», указывающий на первую строку таблицы. Для итерирования по строкам используйте функцию next():
peopleTable.next();
Когда «курсор» находится на строке, можно вернуть значения из этой строки, используя доступные функции get…():
String name = peopleTable.getString("NAME"); // Возвращает имя человека в строковой форме из столбца «NAME»
int age = peopleTable.getInt(3); // Возвращает возраст человека в виде целого числа из третьего столбца
int serialNumber = peopleTable.getRow(); // Возвращает номер строки
Как мы уже говорили, по умолчанию интерфейс ResultSet является представлением таблицы только для чтения. Однако можно создать интерфейс, принимающий новые значения и вставляющий их в таблицу. Для этого в выражении, используемом для получения объекта ResultSet, его тип должен быть указан как CONCUR_UPDATABLE.
Более подробную информацию о доступных функциях интерфейса ResultSet, способах его обновления и вставки новых записей можно найти в официальной документации Java: ResultSet interface.
-
Как мы можем улучшить эту статью?
-