如何从java作为列将json作为关系数据存储在Oracle表中?

时间:2018-07-13 13:43:28

标签: java jdbc oracle12c

我试图弄清楚如何在oracle 12中有一个带有id和json数据的行。 示例中有一些方法可以将json以“ is_json”约束的形式存储在oracle 12中,但无法确定我将如何通过java发送对象;是字符串还是json对象? 我可以使用SODA jar将普通行数据(id)和JSON一起存储吗? 如何在Java中获取(查询)IS_JSON约束列?

1 个答案:

答案 0 :(得分:1)

需要了解有关完整用例的更多详细信息。

但是,通常,您有两种选择:

(1)可以使用SODA Java。这将创建一个集合。在幕后,集合由一个常规表支持,该表将具有一个ID列(用于键)和一个JSON_JSONU列(用于JSON内容)(默认情况下,如果需要,可以将自定义集合元数据传递给createCollection来更改列名)。该基础收集表也可以从SQL看到/访问。默认情况下,JSON_DOCUMENT是BLOB,但是通过自定义集合元数据,您可以请求VARCHAR2或CLOB存储。只需几行代码,这一切都非常容易。

请参阅入门示例: https://github.com/oracle/soda-for-java/blob/master/doc/Getting-started-example.md

SODA基本上为您提供了NoSQL文档集合的抽象,并且在Java中非常容易使用。它使您不必再通过JDBC编写SQL代码,而不必处理诸如绑定变量等底层内容。

(2)如果SODA不是您的用例的正确抽象,则可以在Oracle和JDBC中使用JSON支持(这也正是SODA在幕后使用的功能)。您将创建一个包含ID列和JSON列的常规表。定义此表时,您会在JSON列上添加“ is json”约束。 JSON列的类型可以为BLOB(推荐),VARCHAR2或CLOB。与VARCHAR2相比,使用BLOB时,JSON大小不限于32k,并且避免了编码转换。

然后,您将像往常一样使用JDBC绑定/获取JSON数据(就像您通常将非JSON数据绑定/获取到BLOB / VARCHAR2 / CLOB /从中获取一样,什么都没有改变)。您可以在通过JDBC发出的SQL查询中使用各种JSON运算符(json_value,json_table等),以便使用JSON数据。