簡體   English   中英

利用jdbc中的where in子句

[英]making use of where in clause in jdbc

我從UI中獲得了一堆數字(僅是整數值),並將其傳遞給后端。 例如,這些數字以“ num1,num2,..,numN”格式的字符串出現

"145,78,934"

數據庫表中的對應字段是Decimal(8),我想做的是

更新myawesomeTable設置moreAwesomeField ='YES'其中(145,78,938)中的criteriaField

我目前正在做的事情非常la腳且緩慢。(如下所示)

pstm.preparedStatement("update myawesomeTable set moreAwesomeField='YES' where criteriaField = ?")

經歷一個for循環,我要通過按criteriaField值的一個子字符串一一來更新criteriaField,並執行

pstm.setBigDecimal(new BigDecimal(criStr[i]));

那我現在有什么選擇呢? 我正在使用Db2 9.5+(和Java 1.4-),無法以任何其他格式獲取標准字段,因此我嘗試了“ where in” prepareStatement,但沒有任何運氣。 我希望此查詢可以一次執行。

您有兩個選擇。

1)用文字值動態組成語句字符串:

pstm.preparedStatement(
 "update myawesomeTable set moreAwesomeField='YES' where criteriaField in ("
 + yourVariableContainingTheListOfNumbers 
 + ")"
)

很簡單,但您可以進行SQL注入

2)用參數標記動態地編寫語句:計算列表中有多少個值,例如3; 用適當數量的參數標記組成該語句,以便看起來像update myawesomeTable set moreAwesomeField='YES' where criteriaField in (?, ?, ?) ,然后將各個值綁定到參數標記。

如果您可以保證列表長度有上限(例如,不超過10個值),則可以使用后一種選擇的變體,那就是使用帶有最大數量的參數標記的參數化語句字符串,並將空值綁定到要標記的標記上沒有參數。

暫無
暫無

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

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