基于dbutils,在queryRunner中传递数组参数

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private List 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 parmas =  new  ArrayList();
         
         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]

原因:可变参数在传递过程中只能放在参数的最末尾,否则只当做一个对象传递。

修改后:

1
2
3
4
5
6
7
8
9
10
     
         List parmas =  new  ArrayList();
         
         addQueryCondition(parmas,sql, ce);
         
         sql.append( "  LIMIT ?,?" );
         
         parmas.add((ce.getPageNum()-1)*Constants.SHOW_PAGE_EQU_COUNT);
         parmas.add(Constants.SHOW_PAGE_EQU_COUNT);
  

你可能感兴趣的:(异常信息)