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
и затем сразу закрыто.