0

我从 UI 中得到一堆数字(只有整数值)并将其传递给后端。例如,这些数字以“num1,num2,..,numN”格式的字符串出现

"145,78,934"

数据库表中对应的字段是Decimal(8),我想做的是

更新 myawesomeTable 设置 moreAwesomeField = 'YES' where criteriaField in (145,78,938)

我目前正在做的事情很蹩脚而且很慢。(如下所示)

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

通过一个 for 循环,我正在通过一个一个地获取条件字段值的子字符串并执行以下操作来更新条件字段

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

那么我现在有什么选择呢?我正在使用 Db2 9.5+(和 java 1.4-)我无法以任何其他格式获取标准字段,我尝试了“在哪里”preparedStatement,但没有任何运气。我希望这个查询一次性执行。

4

1 回答 1

1

你有两个选择。

1) 使用文字值动态组合语句字符串:

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

这很简单,但会让您接触到SQL 注入

2)使用参数标记动态组合语句:计算列表中有多少个值,例如3;用适当数量的参数标记组成语句,使其看起来像update myawesomeTable set moreAwesomeField='YES' where criteriaField in (?, ?, ?),然后将各个值绑定到参数标记。

后一种选择的变体,如果您可以保证列表长度具有上限,例如不超过 10 个值,将使用具有最大参数标记数的参数化语句字符串并将空值绑定到没有参数。

于 2013-06-13T18:30:04.660 回答