我正在使用PostgreSQL 9.1.4与hstore和PostgreSQL JDBC驱动程序(9.1-901.jdbc4)。转义hstore在JDBC准备语句中包含运算符
我试图使用包含在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'工作? – 2012-08-13 19:28:47
不,这不是有效的语法。在$ 1处引发语法错误。 – 2012-08-13 22:23:44
许多PostgreSQL接口喜欢编号占位符(即'$ 1','$ 2',...),我猜JDBC不是其中之一。 – 2012-08-14 07:31:54