传递的参数为int型,数量不确定。在参数不确定的情况下,如何同时传递所有参数?
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);是否有一种避免遍历参数和拼接查询语句的好方法?
发布于 2018-01-23 04:31:13
我认为最简单的方法是传递一个列表,使用org.springframework.jdbc.core.namedparam.MapSqlParameterSource.MapSqlParameterSource(),它可以为准备好的语句接受任何类型的参数。
因此,在您的示例中,您可以像这样修改您的SQL以接受list参数:
String sql = "select * from table where enterprise_id in (:listOfInt)";.然后将列表添加为参数:
MapSqlParameterSource sqlParams = new MapSqlParameterSource();
sqlParams.addValue("listOfInt", Arrays.asList(1,2,3));将其传递给org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate实例以执行这样的查询,
this.namedParameterJdbcTemplate.queryForList(sql, sqlParams);它为您提供了一个结果集,而且这假定您已经在类级别上创建了一个NamedParameterJdbcTemplate实例。
发布于 2018-01-23 03:55:46
我不是Java,但是您应该将一个数组参数传递给IN SQL语句:
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限制)。
发布于 2018-01-23 04:03:08
我们肯定可以将int类型的数组传递给存储的procs,但不能确定语句。
然而,我们可以这样解决问题。
假设int值来自int[] arrData。
StringBuffer arguments= new StringBuffer();
for(Integer value:arrData){
if(arguments.toString().length!=0)
arguments.append(",");
arguments.append(""+value+"");
}然后,最后将逗号分隔的值作为输入,如下所示。
String SQL = "select * from table where enterprise_id in (?)";
this.server.findBySql(SQL,arguments.toString());https://stackoverflow.com/questions/48393912
复制相似问题