首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用jdbc中的where in子句

利用jdbc中的where in子句
EN

Stack Overflow用户
提问于 2013-06-14 01:47:13
回答 1查看 957关注 0票数 0

我从UI获取了一堆数字(只有整数值),并将其传递给后端。这些数字的字符串格式为"num1,num2,..,numN“,例如

代码语言:javascript
复制
"145,78,934"

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

update myawesomeTable set moreAwesomeField = 'YES‘,其中criteriaField in (145,78,938)

我目前正在做的事情是相当差劲和缓慢的。(如下所示)

代码语言:javascript
复制
pstm.preparedStatement("update myawesomeTable set moreAwesomeField='YES' where criteriaField = ?")

通过for循环,我通过逐个获取criteriaField值的子字符串并执行以下操作来更新criteriaField

代码语言:javascript
复制
pstm.setBigDecimal(new BigDecimal(criStr[i]));

那么我现在有什么选择呢?我使用的是Db2 9.5+ (和Java1.4-),我无法获得任何其他格式的criteria字段,我尝试了"where in“preparedStatement,但没有任何运气。我希望这个查询被执行一次。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-14 02:30:05

您有两个选择。

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

代码语言:javascript
复制
pstm.preparedStatement(
 "update myawesomeTable set moreAwesomeField='YES' where criteriaField in ("
 + yourVariableContainingTheListOfNumbers 
 + ")"
)

它很简单,但会将您暴露给SQL injection

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17093714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档