将 JSON 数组视为要插入 MYSQL 的字符串
Posted
技术标签:
【中文标题】将 JSON 数组视为要插入 MYSQL 的字符串【英文标题】:Treating JSON array as a String to insert into MYSQL 【发布时间】:2021-07-16 00:55:28 【问题描述】:假设我有一个这样的 JSON:
"name": "tom", "id":1, "clothes":["shirt":"yellow","shoes":black,.......]
我正在尝试使用 Java 将它按原样插入到 mysql DB 的列中。
void insertVal(JsonObject json)
Connection conn = null;
try
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Orders?user=root", "root", "1234");
Statement st = conn.createStatement();
StringBuilder values = new StringBuilder("(");
for (String key : json.keySet())
if (key.equals("clothes"))
//do something to deal with this array
break;
values.append(json.get(key)).append(",");
values.append(")");
String insert = "INSERT INTO ORDERS VALUES " + values;
st.executeUpdate(insert);
catch (SQLException e)
// TODO Auto-generated catch block
e.printStackTrace();
此代码在clothes
键之前工作正常。到目前为止,我已经尝试过使用JSON OBJECT
和JSON MERGE
,但格式不太匹配,我现在不想解析。
那么,是否可以添加 clothes
或者我必须以某种方式解析它?如果是这样,哪种格式最有效?
非常感谢
【问题讨论】:
您可能需要澄清您的问题。我不知道你在问什么。你想为布料插入什么绳子? 抱歉不清楚。老实说,我不太介意 - 我认为最简单的是两个方括号之间的所有内容。 它是一个字符串,把它放在查询中,就像你对任何字符串一样,尽管准备和绑定参数可能会对你有所帮助 这不起作用 - Mysql 声称有语法问题,通过网络阅读,右括号和数组存在问题 请贴出错误信息,应该有插入查询 【参考方案1】:致所有相关人员:问题在于"
字符串。 mysql,可能还有一般的 SQL,都不能很好地处理这些。有两种选择。第一个,不太推荐:
String parsed = json.get(key).toString().replace("\"", "");
然后,正常插入。
第二个,更推荐 - 使用PreparedStatement
。这样,您可以编写插入/更新查询而无需考虑转义字符。例如,在我为 clothes
列插入“空”值之后:
PreparedStatement ps = conn.prepareStatement("UPDATE ORDERS set CLOTHES = ? WHERE ID = ?");
ps.setString(1, clothes); // clothes - get(key).toString()
ps.setInt(2, count); // count - counts which iteration we are
ps.executeUpdate();
我希望以后有人会觉得这很有用。
【讨论】:
您应该接受自己的答案,以便正确标记问题以上是关于将 JSON 数组视为要插入 MYSQL 的字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 mvc spring 将 JSON 数组插入 MySQL