Estoy usando PostgreSQL 9.1.4 con hstore y el controlador PostgreSQL JDBC (9.1-901.jdbc4).Escapar hstore contiene operadores en una declaración JDBC preparada
Estoy tratando de utilizar la contiene operadores (?
, ?&
, ?|
) en un PreparedStatement, sin embargo el carácter ?
se analiza como un marcador de posición variable. ¿Se puede escapar de este personaje para enviar el operador correcto en la consulta?
Un ejemplo:
PreparedStatement stmt = conn.prepareStatement("SELECT a, b FROM table1 WHERE c ? 'foo' AND d = ?");
stmt.setInt(1, dValue);
stmt.executeQuery();
De esta forma el siguiente ejemplo podría provocar una excepción:
org.postgresql.util.PSQLException: No value specified for parameter 2.
Actualización:
Después de investigar el analizador de consultas en el controlador de pgjdbc this snippet parece indicar que no es posible escapar del carácter ?
. Las preguntas que siguen son:
- ¿Hay algo en la especificación JDBC que permite a un
?
que se escaparon y ser otra cosa que un marcador de posición de parámetros? - ¿Hay alguna solución mejor para este problema que el simple uso de declaraciones simples con variables insertadas manualmente en la cadena de consulta?
¿No conoce ningún JDBC pero funciona 'd = $ 1'? –
No, esa no es una sintaxis válida. Lanza un error de sintaxis en '$ 1'. –
Muchas interfaces de PostgreSQL prefieren marcadores de posición numerados (es decir '$ 1',' $ 2', ...), supongo que JDBC no es uno de ellos. –