mysql JSON类型插入并使用jdbc驱动程序进行选择

时间:2019-01-14 10:23:35

标签: mysql json

我正在使用jdbc驱动程序和结果集读写mysql JSON类型。我如何从结果集中以字符串json的形式获取json类型,以便在Java程序中使用?

mysql>设置名称UTF8MB4; //,以便可以使用jdbc驱动程序插入json值,否则会抱怨二进制类型

java代码(伪代码): String myjsonString =“ {x:y}”; //假设这是正确的 conn.getPreparedStatement(“插入col_json值(myjsonString)”);

rs = conn.getStatement(“从table_json_test中选择col_json”);

String myorig_json = rs.getString(“ col_json”);

myorig_json像这样的字符串

“ base64:type15:rO0ABXNyABdqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDTATlwQbMD7AgABWgALYWNjZXNzT3JkZXJ4 cgARamF2YS51dGlsLkhhc2hNYXAFB9rBwxZg0QMAAkYACmxvYWRGYWN0b3JJAAl0aHJlc2hvbGR4 cD9AAAAAAAAMdwgAAAAQAAAAAXQABXJlZmlkdAAgZWI3ODkzZWVjMDU5NGNhMjlhYjY1OTJjMjFj MjIwNWZ4AA ==“

预期为“ {x:y}”

1 个答案:

答案 0 :(得分:0)

MySQL中的JSON数据类型是一种特殊类型,内部存储为二进制对象。这就是为什么您不能以字符串的形式从数据库中获取值的原因-JDBC驱动程序将获取二进制值的内容,并尝试将其读取为String,从而给您看到的垃圾。

JDBC驱动程序根本不支持JSON对象类型。相反,您有两个选择:

  1. 将JSON存储在TEXT字段中-然后您可以使用getString来读取它,但是您必须自己解析它。

  2. 使用MySQL的特殊JSON查询语言来构建查询,这意味着您的ResultSet包含从JSON读取并为您转换的数据。例如,查询:

SELECT col_json->>'$.x' AS x FROM <table>

会给您一个ResultSet,其中包含:

+----+
|  x |
+----+
|  y |
+----+

,您可以使用resultSet.getString(1)提取值。

关于如何在MySQL中查询JSON字段,有很多教程。这是一个不错的简单入门方法:http://www.mysqltutorial.org/mysql-json/