Sql语句关于in的预编译传值使用
- 关于in在现在版本中大部分使用是这样的
Integer[] goodsIds = new Integer[]{1,2,3}; String str = StringUtil.arrayToString(goodsIds, ",") String sql = "select * from es_order where sn in ("+str")"; daoSupport.queryForList(sql);
- 上面的使用方式是错误的, 正确使用方式是如下
Integer[] goodsIds = new Integer[]{1,2,3}; List<Object> term = new ArrayList<>(); String[] goods = new String[goodsIds.length]; for(int i = 0 ; i<goodsIds.length; i++ ){ goods[i] = "?"; term.add(goodsIds[i]); } String str = StringUtil.arrayToString(goods, ","); String sql = "select * from es_goods where goods_id in ("+str+")"; daoSupport.queryForList(sql,term.toArray());
如果sql语句的条件中还需要传递其他预编译值,也需要将其他的值放到term集合中。
如
daoSupport.queryForList("select * from es_goods where goods_id in ("+str+") and seller_id = ? ",
term.toArray(),1);
以上格式查询会报错。
应该写成
term.add(1);
daoSupport.queryForList("select * from es_goods where goods_id in ("+str+") and seller_id = ? ",
term.toArray());