我正在使用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