主题:占位符设置无效,jsonb查询无法使用#>运算符

ldwnt 2020年04月13日 69

配置文件:

1.png

查询:

sqlManager.execute(new SQLReady("select * from items where auto #> '{tags,0,category}' ? 'INDUSTRY'"), Items.class);

报错:

┏━━━━━ Debug [native.select * from items where auto #> '{tags,0,...] ━━━ 

┣ SQL: select * from items where auto #> '{tags,0,category}' ? 'INDUSTRY' 

┣ 参数: [] 

┣ 位置: tech.deepq.info.cache.web.rest.TestResource.test3(TestResource.java:110) 

┗━━━━━ Debug [ ERROR:未设定参数值 1 的内容。] ━━━ 

 2020-04-13 21:42:45,309 [XNIO-1 task-1] ERROR o.z.p.spring.common.AdviceTraits - Internal Server Error org.beetl.sql.core.BeetlSQLException: org.postgresql.util.PSQLException: 未设定参数值 1 的内容。

补充下:

试了这个查询是好的:sqlManager.execute(new SQLReady("select auto #> '{tags,0,category}' from items"), String.class);

所以不是占位符的问题,是查询中这个问号?被当成了参数

ldwnt 2020年04月13日

呃,自问自答:虽然execute没带参数,但实际执行的还是prepared statement。pg jdbc在执行包含?运算符的prepared statement时,需要用两个问号??进行转义

https://github.com/pgjdbc/pgjdbc/issues/1120