将 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 OBJECTJSON 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 的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将json数组插入mysql数据库

如何使用 mvc spring 将 JSON 数组插入 MySQL

为啥下面两个字符串之一被视为 JSON 数组而另一个被视为字符串? Python

由于 mysql 将字符串视为列名,因此无法运行查询

JSON / PHP数组到MYSQL插入[关闭]

将json插入mysql。 json 字符串是从 json.dumps 中获取的