Примеры чтения данных из БД AnyLogic

Мы приведем несколько примеров запросов выборки значений SELECT. Все эти примеры взяты из примера Corporate Education.

Демо модель: Corporate Education

Чтение одного значения

Пусть нам нужно считать длительность определенного курса обучения из следующей таблицы:

И использовать эту длительность в качестве таймаута перехода диаграммы состояний. Код будет таким:

(double)selectFrom( courses ).
where( courses.course.eq( courseName ) ).
uniqueResult( courses.duration_days )

Обратите внимание на использование функции uniqueResult() и явное приведение к типу (double): оно необходимо, поскольку функция возвращает значение типа Integer, и пользователю необходимо самостоятельно привести его к типу вещественного числа double.

Получение нескольких записей в виде отсортированного списка объектов Tuple

Предположим, нам нужно считать несколько записей из БД, отсортированных по записям в определенном столбце, и проанализировать их. Пусть мы работаем со следующей таблицей:

И нам нужно считать все курсы для определенного типа служащего и отсортировать их по столбцу not_earlier_than_w_day. В этом случае код будет выглядеть так:

List< Tuple > plan =
selectFrom( education_plans ).
where( education_plans.employee_type.eq( type ) ).
orderBy( education_plans.not_earlier_than_w_day.asc() ).
list();

Обратите внимание, что вызов функции orderBy() предшествует финальному вызову функции list(). Работа с результатами ведется достаточно простым образом, просто итерируйтесь в цикле, и осуществляйте доступ к определенному столбцу с помощью функции get():

for( Tuple tup : plan ) {

tup.get( education_plans.course );
tup.get( education_plans.not_earlier_than_w_day );
tup.get( education_plans.not_later_than_w_day );

}

Получение всех значений из заданного столбца в виде списка Java

Это очень легко: просто укажите имя столбца в вызове фнукции list():

List< String > courseslist = selectFrom( courses ).list( courses.course );

Таблица в данном случае следующая:

И конечно вы можете задать условие, добавив в середину фнукцию where(), как в следующем примере, где нам нужно получить все курсы обучения, которые могут быть проведены тренером данного типа:

List< String > complist = selectFrom( trainer_competences ).
where( trainer_competences.trainer_type.eq( type ) ).
list( trainer_competences.course );


Приведенный выше код работает со следующей таблицей:

Получение всех значений из заданного столбца и добавление их в коллекцию

Предположим, у вас есть коллекция employeeTypes, и вы хотите добавить в нее все значения из столбца type таблицы БД employee_types. Это выполнит следующий код:

employeeTypes.addAll(
selectFrom( employee_types ).
list( employee_types.type )
);

И опять же, вы можете добавить любые дополнительные условия с помощью функции where().

Проверка существования определенной записи в БД

Пусть вам нужно проверить, может ли тренер определенного типа провести данный курс обучения. Компетенции тренеров заданы в следующей таблице:

Запрос будет выглядеть так:

selectFrom( trainer_competences ).
where( trainer_competences.trainer_type.eq( type ),
trainer_competences.course.eq( course ) ).
exists();

Обратите внимание на два условия, заданных в функции where() как два параметра, перечисленные через запятую – они интерпретируются как два условия, объединенные оператором AND (И), и завершающий вызов функции exists() возвращает булевский результат.