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

我正在寻找一种以不同的方言生成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()会更好?


慕森卡
浏览 141回答 1
1回答

胡说叔叔

原因是您获得的SQL是jOOQ在将语句传递给JDBC时实际使用的,而是1作为绑定值传递的。在许多情况下,这不仅在JDBC中,而且在其他类似的API中,也更加安全高效。但是对于这种用例,文档说有时,您可能希望避免在仍然使用SQL中的自定义值的同时呈现绑定变量。jOOQ将其称为“内联”绑定值。内联绑定值时,它们将在SQL中而不是JDBC问号中呈现实际值。绑定值内联可以通过以下几种方式实现:在全球范围内,通过使用“设置”并将org.jooq.conf.StatementType设置为STATIC_STATEMENT。这将内联从此类Configuration呈现的SQL语句的所有绑定值。使用Query.getSQL(ParamType)方法在本地进行每个查询。通过使用DSL.inline()方法在本地按值。对于这种特定情况,我希望仅通过查看API即可调用getSQL(ParamType.INLINED)而不是也getSQL()能正常工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java