Mam tabeli, która zawiera kolumnę danych ze strukturą podobną do następujących:JDBC Przygotowany parametr oświadczenie wewnątrz json
{"title": "some title", "objects": [{"id": "id1"}, {"id": "id2"}]}
teraz chcę znaleźć wszystkie wiersze, które mają obiekt z konkretnym identyfikatorze w ich obiektów Array wewnątrz danych. Następująca kwerenda działa idealnie z konsoli psql:
SELECT id, data FROM table_name WHERE data->'objects' @> '[{"id": "id1"}]'
jednak nie mogę uzyskać to do pracy jako przygotowanym oświadczeniu nad sterownikiem JDBC. wartość id powinno być parametrem, więc próbowałem to jako ciąg znaków, który jest przekazywany do connection.prepareStatement(query);
:
"SELECT id, data FROM table_name WHERE data->'objects' @> '[{\"id\": ?}]'"
tutaj, gdy próbuję ustawić argumenty otrzymuję ten wyjątek:
org.postgresql.util.PSQLException: The column index is out of range: 1, number of columns: 0.
kiedy wypróbować jedną z poniższych argumentów jest ustawione prawidłowo:
"SELECT id, data FROM table_name WHERE data->'objects' @> [{\"id\": ?}]"
"SELECT id, data FROM table_name WHERE data->'objects' @> [{'id': ?}]"
ale wynik nie jest oczywiście prawidłowo sformatowany zapytania:
SELECT id, data FROM table_name WHERE data->'objects' @> [{"id": 'id1'}]
SELECT id, data FROM table_name WHERE data->'objects' @> [{'id': 'id1'}]
w obu przypadkach dostaję następujący wyjątek:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "["
Jaka jest poprawna składnia, aby ustawić parametr wewnątrz JSON? Używam PostgreSQL 9.5
Łańcuchy w języku SQL są rozdzielane pojedynczymi cudzysłowami, a nie podwójnymi cudzysłowami. – Leo
spróbuj WYBIERZ identyfikator, dane z tabeli nazwa WHERE dane -> "obiekty" @>? gdzie ? is [{"id": "id1"}] – Leo
nie wiesz, które masz na myśli, ale te pomijane to ciągi Javy przekazywane do 'connection.prepareStatement' – mohamnag