Sto utilizzando Java 1.7 e JDBC 4 e Postgres. Sto cercando di utilizzare un PreparedStatement con un array per riempire una clausola SQL in. Ma l'SQL generato sembra avere "{" e "}" in esso. Ecco il codice:Postgres SQL in clausola e setArray()
PreparedStatement ptmt =
connection.prepareStatement("select * from foo where id in (?)");
String[] values = new String[3];
values[0] = "a";
values[1] = "b";
values[2] = "c";
ptmt.setArray(1, connection.createArrayOf("text", values));
Lo SQL risultante è simile a questo:
select * from foo where id in ('{"a","b","c"}')
Il che, non può funzionare. Questo è come dovrebbe apparire:
select * from foo where id in ("a","b","c")
o
select * from foo where id in ('a','b','c')
Che cosa mi manca qui?
Speravo davvero di poter fare questo lavoro. Ma quando provo: selezionare * da teamdata dove teamdata.teamid in ('{"t11", "t54"}' :: testo []), ottengo "Nessun operatore corrisponde al nome e al tipo di argomento specificato. Potrebbe essere necessario aggiungere cast di tipi espliciti. " Nel mio caso, la colonna id è un varchar. Mi dispiace di aver cambiato la query, ma è la query effettiva che sto usando. –
@DooDah Assicurati di eseguirlo a mano con 'psql' prima, elabora la query ei tipi corretti. Quindi adattarsi a PgJDBC. ':: text []' è solo un cast; puoi cast in modo simile a 'varchar []'. Sebbene in pratica Pg li tratterà come lo stesso tipo di dati, quindi non sono sicuro che questo sia il problema. –
Gotcha. Ci proveremo. Sto ancora imparando alcuni dei sublimi di Postgres. Grazie per il consiglio. Cercherò anche di inviarlo come test unitario per il driver PgJDBC. –