問題原因:表中的字段dept類型是varchar,但是傳入的數(shù)據(jù)類型是number
解決方案兩種:
①把dept字段的數(shù)據(jù)轉換成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里面有兩組數(shù)據(jù),第一組是一串?,?,?……,第二組是注入的值,在下面分別獲取
String preSql = list.get(0).toString();//獲取一串問號
List<Map<String, Object>> paraList = (List<Map<String, Object>>) list.get(1);//獲取注入的值