我正在尝试构建这样的查询:
List<Integer> ids = ...
String query = DSL.select(TABLE.SOMETHING).from(TABLE).where(TABLE.ID.in(ids)).
getSQL();
但是我无法使用值获取生成的查询,只有占位符。 我试过DSL.inline(ids),但它没有&#39;工作
我该怎么做?
我正在使用jOOQ 3.4.2。
感谢您的帮助。
更新:
似乎我可以这样做:
Configuration configuration = new DefaultConfiguration();
configuration.set(SQLDialect.DERBY);
Settings settings = new Settings()
.withStatementType(StatementType.STATIC_STATEMENT);
configuration.set(settings);
DSLContext create = DSL.using(configuration);
String query = create.select(TABLE.SOMETHING).from(TABLE).where(TABLE.ID.in(ids)).getSQL();
如果有人能够确认这是正确的方式,谢谢。
答案 0 :(得分:2)
你不能用jOOQ&#39; DSL.inline()
内联列表,因为如果可以的话,这样一个值的语义将是数据库中列表/数组文字的语义,而不是单个值列表的语义
DSL.inline()
的正确方法:以下是将内联值列表传递给Field.in(Field<?>...)
的正确方法:
List<Integer> ids = ...
String query = DSL.using(configuration) // Use a Configuration or at least a SQLDialect!
.select(TABLE.SOMETHING)
.from(TABLE)
.where(TABLE.ID.in(ids.stream().map(DSL::inline).collect(toList())))
.getSQL();
getSQL()
为基础内联所有绑定值:List<Integer> ids = ...
String query = DSL.using(configuration)
.select(TABLE.SOMETHING)
.from(TABLE)
.where(TABLE.ID.in(ids))
.getSQL(ParamType.INLINED);
Configuration
为基础内联所有绑定值:您在问题编辑中提到的解决方案当然也有效:
List<Integer> ids = ...
Configuration configuration = new DefaultConfiguration();
configuration.set(new Settings().withStatementType(StatementType.STATIC_STATEMENT));
String query = DSL.using(configuration)
.select(TABLE.SOMETHING)
.from(TABLE)
.where(TABLE.ID.in(ids))
.getSQL();