1. 程式人生 > >基於dbutils,在queryRunner中傳遞陣列引數

基於dbutils,在queryRunner中傳遞陣列引數

程式碼如下:

123456789101112131415161718192021private List<Equipment> getPageList(CriteriaEqu ce, int pageSize) {StringBuilder sql = new StringBuilder("SELECT e.equ_id, e.equ_name, e.equ_type,"" e.manufacturer,e.overhaul_period, e.mark, e.equ_state, e.delete_status,s.station_name FROM t_equipment e "
"JOIN t_equ_station o ON o.equ_id = e.equ_id ""JOIN t_station s ON o.station_id = s.station_id  where e.delete_status=0 ");List<Object> parmas = new ArrayList<Object>();addQueryCondition(parmas,sql, ce);sql.append("  LIMIT ?,?");if(parmas.size()==0)return queryForList(sql.toString(),(ce.getPageNum()-1)*Constants.SHOW_PAGE_EQU_COUNT,Constants.SHOW_PAGE_EQU_COUNT);
else return queryForList(sql.toString(),parmas.toArray(),(ce.getPageNum()-1)*Constants.SHOW_PAGE_EQU_COUNT,Constants.SHOW_PAGE_EQU_COUNT);}

報錯:java.sql.SQLException: Statement parameter 4 not set. Query: SELECT e.equ_id, e.equ_name, e.equ_type, e.manufacturer,e.overhaul_period, e.mark, e.equ_state, e.delete_status,s.station_name FROM t_equipment e JOIN t_equ_station o ON o.equ_id = e.equ_id JOIN t_station s ON o.station_id = s.station_id  where e.delete_status=0  AND e.equ_name LIKE ? AND e.manufacturer LIKE ?  LIMIT ?,? Parameters: [[%af%, %df%], -10, 10]

原因:可變引數在傳遞過程中只能放在引數的最末尾,否則只當做一個物件傳遞。

修改後:

12345678910List<Object> parmas = new ArrayList<Object>();addQueryCondition(parmas,sql, ce);sql.append("  LIMIT ?,?");parmas.add((ce.getPageNum()-1)*Constants.SHOW_PAGE_EQU_COUNT);parmas.add(Constants.SHOW_PAGE_EQU_COUNT);