insertInto输出返回“?”而不是实际价值

时间:2018-07-15 14:38:50

标签: java jooq

我正在寻找一种以不同的方言生成SQL查询的方法。我发现最合适的方法是工具/库jOOQ。

调用此行代码后:

System.out.println(ctx.insertInto(DSL.table(DSL.name("table"))).set(DSL.field("id"), 1).getSQL());

我的输出有问题:

insert into table (id) values (?)

为什么有“?”而不是数字1?

我希望:

insert into table (id) values (1)

我还有一个问题,如何将SQL生成为字符串,我应该创建一个真实的数据库,以某种方式获取表的整个SQL?是否有可能获得我之前使用过/调用过的整个SQL查询,或者总是只使用getSQL()会更好?

1 个答案:

答案 0 :(得分:3)

原因是您获得的SQL是jOOQ在将语句传递给JDBC 1 is passed as a bound value instead时实际使用的SQL。在许多情况下,这不仅在JDBC中,而且在其他类似的API中,也更加安全高效。

但是在此用例中,the documentation says

  

有时,您可能希望避免在仍然使用SQL中的自定义值的同时呈现绑定变量。 jOOQ将其称为“内联”绑定值。内联绑定值时,它们将在SQL中而不是JDBC问号中呈现实际值。绑定值内联可以通过以下几种方式实现:

     
      
  • 全局,通过使用“设置”并将org.jooq.conf.StatementType设置为STATIC_STATEMENT。这将内联从这样的配置呈现的SQL语句的所有绑定值。

  •   
  • 使用Query.getSQL(ParamType)方法在本地进行每个查询。

  •   
  • 通过使用DSL.inline()方法在本地每个值。

  •   

对于这种特定情况,我希望仅通过查看the API即可调用getSQL(ParamType.INLINED)而不是仅getSQL()来工作。