2013-05-06 2 views
3

Я использую 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(); 

Но приведенный выше код не работает (по понятным причинам). Заранее спасибо.

ответ

4

В настоящее время jOOQ не поддерживает выполнение SQL с именованными параметрами. Вы можете использовать jOOQ для отображения именованных параметров, если вы выполняете запрос с помощью другого API, например Spring JDBC. Для получения дополнительной информации, рассмотрит руководство:

http://www.jooq.org/doc/latest/manual/sql-building/bind-values/named-parameters

+0

КИ, я принимающий ответ, но позвольте мне перефразировать вопрос немного: Если предположить, что у меня есть оператор SQL с несколькими параметрами, и jooq не поддержка названных параметров, что рекомендуемое обходное решение? Ручная замена строки - icky ... – tschan

+0

Обходным решением было бы использовать индексированные параметры, конечно ... Я не думаю, что в настоящее время существует элегантный способ сделать это, за исключением индексирующих параметров или с помощью ручной замены строки. .. –

Смежные вопросы