В настоящее время изучая возможности JOOQ, я хочу начать внимательно и использовать JOOQ как SQL-конструктор. Я определил свою схему базы данных как классы, полученные от CustomTable
, чтобы получить безопасность типа. Это приводит к коду, какСоздание PreparedStatement из jooq Query
Param<Integer> pId = ...
Query query = context.select(sometable.somefield.max())
.from(sometable)
.where(sometable.id.eq(pId)
;
где sometable
является переменной держит один из моих экземпляров таблицы.
То, что я в настоящее время делаю с query
сродни
PreparedStatement pstmt = connection.prepareStatement(query.getSQL());
pstmt.setObject(1, pId.getValue(), pId.getDataType().getSQLType());
Но как только есть несколько параметров для утверждения, я начинаю замысловатые зависимостей от реализации JOOQ в отношении setObject
первого параметра.
Я думал использовать query.getBindValues()
, но это возвращает только простые объекты Java для привязки к оператору. Я должен предположить, что порядок соответствует порядку позиции для setObject
и, кроме того, я пропущу getSQLType()
. Так что это тоже нехорошо.
Тогда я надеялся найти что-то наподобие query.getPreparedStatement(connection)
, чтобы создать заявление из предоставленного соединения со всеми параметрами, красиво заполненными, но это, похоже, не существует.
Есть ли какой-нибудь опрятный способ получить PreparedStatement
из JOOQ Query
, которого я не хватает?
Для полноты, не могли бы вы добавить короткое объяснение, почему вы не хотите использовать jOOQ для выполнения вашего запроса? –
Я еще не готов полностью продать свою душу JOOQ :-) Кроме того, я прочитал, что JOOQ начинался как SQL-конструктор, и я думаю, что существует естественное разделение трех обязанностей: 1) получить запрос или утверждение , 2) обработка соединения с db с пулами, соединение, утверждение и т. Д., 3) чтение данных из результатов запроса. Получив PreparedStatement в обмен на соединение и JOOQ Query, можно было бы отлично отделить между (1) и (2). – Harald
Ваша душа может бежать, но она не может скрыться. jOOQ готовит заявления уже 5 лет - используется крупными корпорациями в производстве ... Не уверен, о чем вы беспокоитесь :) С самого начала jOOQ привязывал переменные к PreparedStatement. Функция извлечения SQL появилась только позже.Во всяком случае, я дам ответ –