问题原因:表中的字段dept类型是varchar,但是传入的数据类型是number
解决方案两种:
①把dept字段的数据转换成number类型
builder.append("\n and to_number(s.dept) in(").append(department).append(")");
②使用presql,调用工具类的querySqlConditionByMap()
方法,不过需要注意:
比如,有开始日期stdate 和 结束日期eddate还有 部门casein_department 时,得先把stdate和eddate从map取出来,然后再remove掉,只对casein_department进行单独处理。举例如下
//先把不需要处理的值取出来
String startDate = map.get("stdate")!=null?map.get("stdate").toString():"";
String endDate = map.get("eddate")!=null?map.get("eddate").toString():"";
String startDatetq = map.get("stdatetq")!=null?map.get("stdatetq").toString():"";
String endDatetq = map.get("eddatetq")!=null?map.get("eddatetq").toString():"";
//取完值之后从map中移除,方便只对casein_department进行处理
map.remove("stdate");
map.remove("eddate");
map.remove("stdatetq");
map.remove("eddatetq");
List<Object> list = sUtil.querySqlConditionByMap(map);
//返回的list里面有两组数据,第一组是一串?,?,?……,第二组是注入的值,在下面分别获取
String preSql = list.get(0).toString();//获取一串问号
List<Map<String, Object>> paraList = (List<Map<String, Object>>) list.get(1);//获取注入的值