AnyLogic
Развернуть
Размер шрифта

API базы данных

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)

Работа с интерфейсом ResultSet

Функции базы данных, получающие наборы результатов (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 является представлением таблицы только для чтения. Однако можно создать интерфейс, принимающий новые значения и вставляющий их в таблицу. Для этого в выражении, используемом для получения объекта ResultSet, его тип должен быть указан как CONCUR_UPDATABLE.

Более подробную информацию о доступных функциях интерфейса ResultSet, способах его обновления и вставки новых записей можно найти в официальной документации Java: ResultSet interface.

Как мы можем улучшить эту статью?