public List<Student> queryList(String name){ List<Student> list = new ArrayList<Student>(); Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; try { con = JDBCUtils.getConnection(); List<Object> params = new ArrayList<>(); StringBuffer sb = new StringBuffer("select * from t_student where 1=1 "); if(name != null && !"".equals(name)){ sb.append("and name like ? "); params.add(name); } sb.append("order by create_time desc"); pstmt = con.prepareStatement(sb.toString()); if(params != null && params.size()>0){ for(int i=1; i<params.size(); i++){ pstmt.setObject(i, params.get(i)); } } rs = pstmt.executeQuery(); while(rs.next()){ Student student = new Student(); student.setId(rs.getInt("id")); student.setStuno(rs.getString("stuno")); student.setName(rs.getString("name")); student.setGrade(rs.getString("grade")); student.setCreatTime(rs.getDate("create_time")); student.setUpdateTime(rs.getDate("update_time")); list.add(student); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { JDBCUtils.close(con, pstmt, rs); } return list; }
时间: 2024-01-15 16:02:35 浏览: 75
QueryList采集类库
这个方法的问题在于循环遍历参数列表的时候从1开始,而不是从0开始。这个问题可能会导致第一个参数被忽略,并且在执行 SQL 语句时会出现 "Parameter index out of range (0 < 1)" 错误。你应该将循环的起始索引改为0,像这样:
```
if(params != null && params.size() > 0){
for(int i=0; i<params.size(); i++){
pstmt.setObject(i+1, params.get(i));
}
}
```
这样就可以避免这个错误了。同时,你还需要确保参数列表中的参数类型与 SQL 语句中的参数类型匹配,否则也可能会出现类似的错误。
阅读全文