【发布时间】:2022-03-16 00:25:19
【问题描述】:
我正在使用带有 hstore 和 PostgreSQL JDBC 驱动程序 (9.1-901.jdbc4) 的 PostgreSQL 9.1.4。
我正在尝试在 PreparedStatement 中使用包含运算符(?、?&、?|),但是 ? 字符被解析为变量占位符。能否转义此字符以在查询中发送正确的运算符?
一个例子:
PreparedStatement stmt = conn.prepareStatement("SELECT a, b FROM table1 WHERE c ? 'foo' AND d = ?");
stmt.setInt(1, dValue);
stmt.executeQuery();
在这种形式下,以下示例会引发异常:
org.postgresql.util.PSQLException: No value specified for parameter 2.
更新:
在 pgjdbc 驱动程序this snippet 中调查查询解析器后似乎表明无法转义? 字符。剩下的问题是:
- JDBC 规范中是否有任何内容允许
?被转义并成为参数占位符以外的任何内容? - 对于这个问题,除了使用简单的语句并将变量手动插入到查询字符串中之外,还有什么更好的解决方法吗?
【问题讨论】:
-
不知道任何 JDBC 但
d = $1有效吗? -
不,这不是有效的语法。在
$1处引发语法错误。 -
许多 PostgreSQL 接口更喜欢编号占位符(即
$1,$2,...),我猜 JDBC 不是其中之一。
标签: postgresql jdbc hstore