Używam Java 1.7 i JDBC 4 oraz Postgres. Próbuję użyć PreparedStatement z tablicą, aby wypełnić klauzulę SQL in. Ale wygenerowany SQL wydaje się mieć w sobie "{" i "}". Oto kod:PostgreSQL w klauzuli i 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));
Powstały SQL wygląda następująco:
select * from foo where id in ('{"a","b","c"}')
Który, nie może pracować. Jest to, jak powinna wyglądać:
select * from foo where id in ("a","b","c")
lub
select * from foo where id in ('a','b','c')
Co ja tu brakuje?
Naprawdę miałem nadzieję, że będę mógł wykonać tę pracę. Ale kiedy próbuję: wybierz * z danych zespołu, gdzie teamdata.teamid w ("{" t11 "," t54 "}" :: text []), otrzymuję "Żaden operator nie odpowiada podanej nazwie i typowi argumentu. Być może będziesz musiał dodać wyraźne odlewy typów. " W moim przypadku kolumna id jest varcharem. Przepraszam, że zmieniłem zapytanie, ale to jest faktyczne zapytanie, którego używam. –
@DooDah Upewnij się, że możesz uruchomić go ręcznie za pomocą 'psql' najpierw, opracuj poprawne zapytanie i typy. Następnie dostosuj się do PgJDBC. ':: text []' jest po prostu obsadą; podobnie można rzucić na 'varchar []'. Chociaż w praktyce Pg traktuje je jako ten sam typ danych, więc nie jestem pewien, czy to jest problem. –
Gotcha. Spróbuję. Nadal uczę się niektórych podlantów z PostgreSu. Dzięki za wskazówkę. Spróbuję również przesłać to jako test jednostkowy dla sterownika PgJDBC. –