为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森卡 2021-05-18 17:14:38
我正在寻找一种以不同的方言生成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()能正常工作。


查看完整回答
反对 回复 2021-05-26
  • 1 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信