3.9.13. Выполнение SQL с помощью QueryRunner
QueryRunner
- класс, предназначенный для выполнения SQL. Его следует использовать вместо JDBC везде, где есть необходимость работы с SQL и нежелательно применение аналогичных средств ORM.
QueryRunner платформы является вариантом Apache DbUtils QueryRunner, усовершенствованным для использования Java Generics.
Пример использования:
QueryRunner runner = new QueryRunner(persistence.getDataSource());
try {
Set<String> scripts = runner.query("select SCRIPT_NAME from SYS_DB_CHANGELOG",
new ResultSetHandler<Set<String>>() {
public Set<String> handle(ResultSet rs) throws SQLException {
Set<String> rows = new HashSet<String>();
while (rs.next()) {
rows.add(rs.getString(1));
}
return rows;
}
});
return scripts;
} catch (SQLException e) {
throw new RuntimeException(e);
}
Есть два варианта использования QueryRunner
- либо в текущей транзакции, либо в отдельной в режиме autocommit.
-
Для выполнения запроса в текущей транзакции необходимо создать экземпляр
QueryRunner
конструктором без параметров, не передаваяDataSource
. После этого нужно вызывать методыquery()
илиupdate()
, передавая в нихConnection
, полученный вызовомEntityManager.getConnection()
. После выполнения закрыватьConnection
не нужно, он будет закрыт при коммите транзакции. -
Для выполнения запроса в отдельной транзакции необходимо создать экземпляр
QueryRunner
конструктором с параметромDataSource
, получив экземплярDataSource
вызовомPersistence.getDataSource()
. После этого нужно вызывать методыquery()
илиupdate()
без передачи какого-либоConnection
, оно будет создано из указанногоDataSource
и затем сразу закрыто.