Я пытаюсь вставить объект JSON в свою базу данных postgres v9.4. Я определил столбец "evtjson" как тип json
(не jsonb
).
Я пытаюсь использовать подготовленный оператор в Java (jdk1.8) для вставки объекта Json (построенного с использованием JEE javax.json) в столбец, но я продолжаю работать с ошибками SQLException.
Я создаю объект JSON, используя:
JsonObject mbrLogRec = Json.createObjectBuilder().build();
…
mbrLogRec = Json.createObjectBuilder()
.add("New MbrID", newId)
.build();
Затем я передаю этот объект в качестве параметра другому методу, чтобы записать его в БД, используя подготовленный оператор. (вместе с несколькими другими полями) As:
pStmt.setObject(11, dtlRec);
Используя этот метод, я получаю следующую ошибку:
org.postgresql.util.PSQLException: не установлено расширение hstore. на org.postgresql.jdbc.PgPreparedStatement.setMap(PgPreparedStatement.java:553) на org.postgresql.jdbc.PgPreparedStatement.setObject(PgPreparedStatement.java:1036)
Я также пробовал:
pStmt.setString(11, dtlRec.toString());
pStmt.setObject(11, dtlRec.toString());
Из-за чего возникает другая ошибка:
Событие JSON: { "New MbrID": 29}
SQLException: ОШИБКА: столбец "evtjson" имеет тип json, но выражение имеет характерный символ, изменяющийся
Подсказка: вам нужно будет переписать или применить выражение.
Но, по крайней мере, это говорит мне, что БД распознает столбец как тип JSON. Я попытался установить расширение hstore, но потом сказал мне, что это не объект hstore.
OracleDocs показывает ряд различных методов для установки значения параметра в подготовленном состоянии, но я бы не попробовал их, если кто-то знает ответ. (http://docs.oracle.com/javase/8/docs/api/java/sql/PreparedStatement.html) Они также ссылаются на дополнительный параметр SQLType, но я не могу найти ссылки на них.
Должен ли я попробовать setAsciiStream
? CharacterStream
? CLOB?