如何在带有jooq的普通sql中使用命名参数

时间:2013-05-06 07:35:09

标签: java sql jooq

我正在使用JOOQ和普通/原始SQL,这意味着我没有使用任何代码生成或流畅的DSL东西。

以下代码有效:

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();

但上述代码不起作用(原因很明显)。提前致谢。

1 个答案:

答案 0 :(得分:4)

jOOQ目前不支持使用命名参数执行SQL。如果您正在使用其他API(例如Spring JDBC)执行查询,则可以使用jOOQ呈现命名参数。有关更多信息,请参阅手册:

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