如何通过 JDBC 使用包含问号 “?” 的 PostgreSQL JSON(B) 运算符
2022-09-04 19:33:48
PostgreSQL知道一些时髦的ASCII-art运算符,它们在名称中使用问号字符,例如这些JSON运算符:
-
?
该字符串是否作为 JSON 值中的顶级键存在? -
?|
这些数组字符串中是否有任何一个作为顶级键存在? -
?&
所有这些数组字符串是否都作为顶级键存在?
问题是官方的PostgreSQL JDBC驱动程序似乎没有正确解析包含此类运算符的SQL字符串。它假设问号是一个普通的 JDBC 绑定变量。下面的代码...
try (PreparedStatement s = c.prepareStatement("select '{}'::jsonb ?| array['a', 'b']");
ResultSet rs = s.executeQuery()) {
...
}
...引发异常:
org.postgresql.util.PSQLException: Für den Parameter 1 wurde kein Wert angegeben.
at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:225)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:190)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:424)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:161)
at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:114)
如何使用此运算符?