我有一個列表對象和IM發送到SQL查詢作爲數字常量無效在SQL
UPDATE <table name> SET status= 'CLOSED' WHERE dlno IN ("+StringUtils.join(deals, ',')+") ";
我的交易對象如下
1549886508071HELMPFN
我怎麼能在這裏傳遞一個字符串
[SQL0103] Numeric constant 1549886508071HELMPFN not valid.
我有一個列表對象和IM發送到SQL查詢作爲數字常量無效在SQL
UPDATE <table name> SET status= 'CLOSED' WHERE dlno IN ("+StringUtils.join(deals, ',')+") ";
我的交易對象如下
1549886508071HELMPFN
我怎麼能在這裏傳遞一個字符串
[SQL0103] Numeric constant 1549886508071HELMPFN not valid.
字符串常量需要用單引號引起來。在你的情況下,這看起來像:
UPDATE <table name>
SET status = 'CLOSED'
WHERE dlno IN ('"+StringUtils.join(deals, "', '") +"') ";
使用綁定變量將解決您的報價問題,使你的代碼針對SQL注入安全:
List<String> deals = ImmutableList.of("abc", "123", "def");
StringBuilder questionMarks = new StringBuilder("?");
for (int i=1;i<deals.size();i++) {
questionMarks.append(",?");
}
Connection conn = ...; // presumably, you already have this
PreparedStatement stmt = conn.prepareStatement(
"UPDATE my_table SET status= 'CLOSED' WHERE dlno IN (" + questionMarks + ")");
for (int i=1;i<=deals.size();i++) { // note these are 1-indexed, not 0-indexed
stmt.setString(i, deals.get(i-1));
}
stmt.executeUpdate();
基本上,你會生成一個查詢,說UPDATE my_table SET status = 'CLOSED' WHERE dlno IN (?,?)
(問號的數量對應於參數的數量),然後您將用stmt.setString
更新它們。然後你可以執行你的更新。
另請注意,您需要處理SQLException
s並關閉聲明。爲清晰起見,此處刪除。
你必須用'''' – lad2025
'StringUtils.join()'使我想到「java」,所以我添加了它作爲標籤。問題實際上是關於應用程序語言而不是SQL。 –