Я использую JOOQ с простым/необработанным SQL, так что это означает, что я не использую никакого генерации кода или жидкого DSL.Как использовать именованный параметр в plain sql с jooq
Следующий код работает:
Connection connection = ...;
DSLContext context = DSL.using(connection, ...);
String sql = "select * from mytable t where (t.id = ?)";
String id = ...; //
Result<Record> result = context.fetch(sql, id);
Теперь, скажем, у меня есть запрос с несколькими параметрами, как это:
String sql = "select * from mytable t where (t.id = ?) " +
"and (t.is_active = ?) and (t.total > ?)";
Как я использовать именованный параметр с этими типами запросов? Я думаю, что-то вроде:
String sql = "select * from mytable t where (t.id = :id) " +
"and (t.is_active = :is_active) and (t.total > :total)";
ResultQuery<Record> rq = context.resultQuery(sql);
rq.getParam("id").setValue(...);
rq.getParam("is_active").setValue(...);
rq.getParam("total").setValue(...);
Result<Record> result = rq.fetch();
Но приведенный выше код не работает (по понятным причинам). Заранее спасибо.
КИ, я принимающий ответ, но позвольте мне перефразировать вопрос немного: Если предположить, что у меня есть оператор SQL с несколькими параметрами, и jooq не поддержка названных параметров, что рекомендуемое обходное решение? Ручная замена строки - icky ... – tschan
Обходным решением было бы использовать индексированные параметры, конечно ... Я не думаю, что в настоящее время существует элегантный способ сделать это, за исключением индексирующих параметров или с помощью ручной замены строки. .. –