我正在寻找一种以不同的方言生成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 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
原因是您获得的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()
能正常工作。
添加回答
举报
0/150
提交
取消