问题描述:在利用jdbcTemplate做查询处理的时候,有个参数有多个值,sql如下
String sql = "select * from MNJX_PSG_xxx_xxx a, MNJX_xxx b "
+ " where a.flt_no = ? "
+ " and a.flt_date = ? "
+ " and a.aborad_no in ?"
+ " and a.nm_id = b.nm_id";
Object[] params = { memoryData.getFltNo(), Dater.com2ymd(memoryData.getDate()),number };
List<Map<String, Object>> result = xDao.query(sql, params);
这里的aborad_no会传多个值进来,首先想到的最笨的方法是写个循环去一个个查,但是这样很浪费资源。网上查阅了下自资料,有人说直接放list进去,试了下,会报错
select * from MNJX_PSG_XXX_XXX a, MNJX_XXX b where a.flt_no = ? and a.flt_date = ? and a.aborad_no in ? and a.nm_id = b.nm_id]; SQL state [null]; error code [17004]; 无效的列类型;
解决:这里可以把aboard_no直接作为一个参数传进去,而不使用“?”占位符.。即:传参和占位符混合使用。
sql为:
String sql = "select * from MNJX_PSG_XXX_xxx a, MNJX_xxx b "
+ " where a.flt_no = ? "
+ " and a.flt_date = ? "
+ " and a.aborad_no in +("+nums+")";
+ " and a.nm_id = b.nm_id";
问题解决!
本文探讨了在使用Spring JdbcTemplate进行数据库查询时,如何有效处理具有多个值的参数问题。通过修改SQL语句和参数传递方式,避免了循环查询造成的资源浪费,实现了更高效的查询操作。

1163





