首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中为MySQL语句指定in关键字的值?

问如何在Java中为MySQL语句指定in关键字的值?
EN

Stack Overflow用户
提问于 2018-01-23 03:50:35
回答 3查看 192关注 0票数 0

传递的参数为int型,数量不确定。在参数不确定的情况下,如何同时传递所有参数?

代码语言:javascript
复制
String SQL = "select * from table where enterprise_id in (?,?,?)";
int a,b,c = 1,2,3;//uncertain quantity
this.server.findBySql(SQL,a,b,c);

是否有一种避免遍历参数和拼接查询语句的好方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-23 04:31:13

我认为最简单的方法是传递一个列表,使用org.springframework.jdbc.core.namedparam.MapSqlParameterSource.MapSqlParameterSource(),它可以为准备好的语句接受任何类型的参数。

因此,在您的示例中,您可以像这样修改您的SQL以接受list参数:

代码语言:javascript
复制
String sql = "select * from table where enterprise_id in (:listOfInt)";.

然后将列表添加为参数:

代码语言:javascript
复制
MapSqlParameterSource sqlParams = new MapSqlParameterSource();        
sqlParams.addValue("listOfInt", Arrays.asList(1,2,3));

将其传递给org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate实例以执行这样的查询,

代码语言:javascript
复制
this.namedParameterJdbcTemplate.queryForList(sql, sqlParams);

它为您提供了一个结果集,而且这假定您已经在类级别上创建了一个NamedParameterJdbcTemplate实例。

票数 2
EN

Stack Overflow用户

发布于 2018-01-23 03:55:46

我不是Java,但是您应该将一个数组参数传递给IN SQL语句:

代码语言:javascript
复制
String SQL = "select * from table where enterprise_id in (?)";
int[] array = {1, 2, 3};//uncertain quantity
this.server.findBySql(SQL, array);

请参阅How to use an arraylist as a prepared statement parameter以获得正确的方法。

注意,如果数组可能非常大(我的意思是非常大),则最好使用大容量插入将其插入到临时表中,然后使用JOIN语句(但前提是可能达到MySQL IN限制)。

票数 0
EN

Stack Overflow用户

发布于 2018-01-23 04:03:08

我们肯定可以将int类型的数组传递给存储的procs,但不能确定语句。

然而,我们可以这样解决问题。

假设int值来自int[] arrData。

代码语言:javascript
复制
StringBuffer arguments= new StringBuffer();

for(Integer value:arrData){
 if(arguments.toString().length!=0)
  arguments.append(",");
  arguments.append(""+value+"");
}

然后,最后将逗号分隔的值作为输入,如下所示。

代码语言:javascript
复制
String SQL = "select * from table where enterprise_id in (?)";
this.server.findBySql(SQL,arguments.toString());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48393912

复制
相关文章

相似问题

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