我有一个表,其中有一个数据列,其结构类似于以下内容:
{"title": "some title", "objects": [{"id": "id1"}, {"id": "id2"}]}
现在我想找到在数据内的对象数组中具有特定 id 的对象的所有行。以下查询在 PSQL 控制台中完美运行:
SELECT id, data FROM table_name WHERE data->'objects' @> '[{"id": "id1"}]'
但是我无法让它作为 JDBC 驱动程序上的预准备语句工作。 id 的值应该是一个参数,所以我尝试将其作为传递给的字符串connection.prepareStatement(query);
:
"SELECT id, data FROM table_name WHERE data->'objects' @> '[{\"id\": ?}]'"
当我尝试设置参数时,我收到此异常:
org.postgresql.util.PSQLException: The column index is out of range: 1, number of columns: 0.
当我尝试以下任何操作时,参数设置正确:
"SELECT id, data FROM table_name WHERE data->'objects' @> [{\"id\": ?}]"
"SELECT id, data FROM table_name WHERE data->'objects' @> [{'id': ?}]"
但结果显然不是一个格式正确的查询:
SELECT id, data FROM table_name WHERE data->'objects' @> [{"id": 'id1'}]
SELECT id, data FROM table_name WHERE data->'objects' @> [{'id': 'id1'}]
在这两种情况下我都会得到以下异常:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "["
在 JSON 中设置参数的正确语法是什么?
我正在使用 PostgreSql 9.5