【问题标题】:Treating JSON array as a String to insert into MYSQL将 JSON 数组视为要插入 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 声称有语法问题,通过网络阅读,右括号和数组存在问题
  • 请贴出错误信息,应该有插入查询

标签: java mysql json


【解决方案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();

我希望以后有人会觉得这很有用。

【讨论】:

  • 您应该接受自己的答案,以便正确标记问题
猜你喜欢
  • 2016-06-30
  • 2021-11-29
  • 2022-07-28
  • 2017-05-14
  • 2011-07-05
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多