簡體   English   中英

如何在 java 中為 mysql 的 JSON 數據類型使用准備好的語句?

[英]How to use a prepared statement for JSON data types for mysql in java?

我有一個 JSON 列,我想為其創建一個准備好的語句,但我不確定如何去做,因為該語句的參數在一個文字字符串中。

例如:

PreparedStatement stmt = myConn.prepareStatement("SELECT JSON_SET(new_friends, '$.?', '[?]') from friend_list where id = ?");

for (int i = 0; i < new_friends.size(); i++) {
        String friend = new_friends.get(i);

        // not sure what to put here
        stmt.set....
        stmt.set....
        stmt.set(3, i);
}

有人有什么建議嗎?

? 占位符不像字符串插值那樣使用。 它們替換整個參數。 當函數參數是字符串時,整個參數必須是文字字符串或使用 SQL 字符串函數構建,將參數作為進一步的參數。

假設您的語法對於您想要實現的目標是正確的,請考慮以下幾點:

JSON_SET(new_friends, '$.?', '[?]') -- not valid
JSON_SET(new_friends, ?, ?) -- valid
JSON_SET(new_friends, CONCAT('$.',?), CONCAT('[',?,']')) -- valid

對於上面第 2 行樣式的查詢,參數 1 將設置為字符串$.foo ,或第 3 行樣式的foo

您的版本無效的原因正是您不/不能使用WHERE username = '?' 而是使用WHERE username = ? (周圍沒有引號? )。

如果要將 java 列表對象添加到如下所述的 json 數組中:

{"abc":["var1":"val1","var2":"val2","var3":"val3"]}

如果列中已經有一個 json 值,那么您可以使用 JSON_SET 來更新值。

            String query;
            query = "UPADTE tbl1 SET col1 = JSON_SET(col1, '$.abc', CAST(? AS JSON) ) WHERE cdtn = ?"; 
            // if col1 is null then, JSON_SET would be: JSON_SET('{}', '$.abc', CAST(? AS JSON) )
            try (Connection conn = DBUtil.getConnection();
                 PreparedStatement ps = conn.prepareStatement(query)) {
                ps.setString(1, jsonArray.toString());
                ps.setString(2, cd);
                ps.executeUpdate();
            }
            catch (SQLException e) {
                log.error("Error : ", e);
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM