Используйте столбец varchar2
, если вы на 100% уверены, что длина никогда не превысит 4000 байтов.В противном случае используйте столбец CLOB или BLOB.
В любом случае вам следует «расширить» этот столбец с помощью ограничения CHECK, подтверждающего, что значение является допустимым JSON, например:
create table my_table
(
id integer primary key,
data clob,
constraint validate_json CHECK (data IS JSON)
);
Oracle рекомендует использовать BLOB
вместо столбца, чтобы избежать издержек многобайтового набора символов, используемого CLOB
.Однако это делает обработку JSON немного более сложной изнутри Java (или любого клиента SQL).
Для сохранения такого значения используйте PreparedStatement
и метод setString()
.Текущие драйверы Oracle больше не нуждаются в setClob()
для длинных строк - по крайней мере, для операторов INSERT или UPDATE.
String jsonData = "field28436": [....]";
PreparedStatement pstmt = connection.prepareStatement(
"insert into my_table (id, data) values (?, ?)");
pstmt.setInt(1, 42);
pstmt.setString(2, jsonData);
pstmt.executeUpdate();
Для чтения данных будет использоваться нечто подобное:
PreparedStatement pstmt = connection.prepareStatement("select data from my_table where id = ?");
pstmt.setInt(1, 42);
ResultSet rs = psmt.executeQuery();
if (rs.next()) {
String jsonData = rs.getString(1);
}
Для получения дополнительной информации я рекомендую прочитать Руководство разработчика JSON