基於dbutils,在queryRunner中傳遞陣列引數
阿新 • • 發佈:2019-01-05
程式碼如下:
123456789101112131415161718192021 | private 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]
原因:可變引數在傳遞過程中只能放在引數的最末尾,否則只當做一個物件傳遞。
修改後:
12345678910 | List<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); |