我正在使用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}”
答案 0 :(得分:0)
MySQL中的JSON数据类型是一种特殊类型,内部存储为二进制对象。这就是为什么您不能以字符串的形式从数据库中获取值的原因-JDBC驱动程序将获取二进制值的内容,并尝试将其读取为String
,从而给您看到的垃圾。>
JDBC驱动程序根本不支持JSON对象类型。相反,您有两个选择:
将JSON存储在TEXT
字段中-然后您可以使用getString
来读取它,但是您必须自己解析它。
使用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/