hstoreとPostgreSQLJDBCドライバー(9.1-901.jdbc4)でPostgreSQL9.1.4を使用しています。
PreparedStatementでcontains演算子(、、)を使用しようとしていますが、文字は?
変数プレースホルダーとして解析されます。この文字をエスケープして、クエリで正しい演算子を送信できますか??&
?|
?
例:
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ドライバーでクエリパーサーを調査した後、このスニペット?
は文字をエスケープできないことを示しているようです。残っている質問は次のとおりです。
- JDBC仕様に、
?
をエスケープしてパラメータープレースホルダー以外のものにすることができるものはありますか? - クエリ文字列に変数を手動で挿入したプレーンステートメントを使用するよりも、この問題を回避するためのより良い回避策はありますか?