[英]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.