我从UI获取了一堆数字(只有整数值),并将其传递给后端。这些数字的字符串格式为"num1,num2,..,numN“,例如
"145,78,934"数据库表中对应的字段是Decimal(8),我想做的是
update myawesomeTable set moreAwesomeField = 'YES‘,其中criteriaField in (145,78,938)
我目前正在做的事情是相当差劲和缓慢的。(如下所示)
pstm.preparedStatement("update myawesomeTable set moreAwesomeField='YES' where criteriaField = ?")通过for循环,我通过逐个获取criteriaField值的子字符串并执行以下操作来更新criteriaField
pstm.setBigDecimal(new BigDecimal(criStr[i]));那么我现在有什么选择呢?我使用的是Db2 9.5+ (和Java1.4-),我无法获得任何其他格式的criteria字段,我尝试了"where in“preparedStatement,但没有任何运气。我希望这个查询被执行一次。
发布于 2013-06-14 02:30:05
您有两个选择。
1)使用文字值动态组合语句字符串:
pstm.preparedStatement(
"update myawesomeTable set moreAwesomeField='YES' where criteriaField in ("
+ yourVariableContainingTheListOfNumbers
+ ")"
)它很简单,但会将您暴露给SQL injection
2)使用参数标记动态组合语句:计算列表中有多少值,例如3;使用适当数量的参数标记组合语句,使其看起来像update myawesomeTable set moreAwesomeField='YES' where criteriaField in (?, ?, ?),然后将单个值绑定到参数标记。
如果您可以保证列表长度有一个上限,例如不超过10个值,那么后一种选择的一个变体将是使用具有最大数量的参数标记的参数化语句字符串,并将空值绑定到没有参数的标记。
https://stackoverflow.com/questions/17093714
复制相似问题