sql语句中索引越界的问题??
查询是没有问题的,我在查询中加了分页的代码后就出现了如下的错误,
我估计是如下的原因照成的,如果不给ps.setInt(2, pageIndex);ps.setInt(3, pageSize); 也会 报错,给 了也报错,不知道要怎么改,求各位高手帮帮忙。。。
ps.setInt(1, bid);
ps.setInt(2, pageIndex);
ps.setInt(3, pageSize);
报错如下:
java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
//dao 类
public Map selectArticle(int pageIndex,int pageSize,int bid) throws Exception{
//String sql="select * from article where bid=? ";
Map map = new HashMap();
ArticleInfo artInfo = null;
List<ArticleInfo> artList = new ArrayList<ArticleInfo>();
String sql="select * from article where bid=? ";
sql+=" order by bid limit "+((pageIndex-1)*pageSize)+","+pageSize+"";
System.out.println(sql + "<<<<<<<<<<<<<<<<<");
Connection con = this.getCon();
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, bid);
ps.setInt(2, pageIndex);
ps.setInt(3, pageSize);
ResultSet rs = ps.executeQuery();
while(rs.next()){
artInfo = new ArticleInfo();
artInfo.setAid(rs.getInt("aid"));
artInfo.setTitle(rs.getString("title"));
artInfo.setBid(rs.getInt("bid"));
artList.add(artInfo);
}
map.put("artList", artList);
map.put("totalSize", this.getTotalCnt(sql));
this.Close(con, ps, rs);
return map;
}
//action 类
//文章查询 根据版块 bid查询
public String execute(){
try{
ArticleDao dao = new ArticleDao();
//List<ArticleInfo> artList = dao.selectArticle(this.getBid());
//分页
String pageIndex = this.getRequest().getParameter("pageIndex");
String pageSize = this.getRequest().getParameter("pageSize");
pageIndex = pageIndex == null ? "1" : pageIndex;
pageSize = pageSize == null ? "10" : pageSize;
this.getRequest().setAttribute("pageIndex", pageIndex);
this.getRequest().setAttribute("pageSize", pageSize);
Map map=dao.selectArticle(Integer.parseInt(pageIndex), Integer.parseInt(pageSize), this.getBid());
this.getSession().setAttribute("bid", bid);
this.getSession().setAttribute("totalSize", map.get("totalSize"));
this.getSession().setAttribute("artList", map.get("artList"));
}
catch(Exception ex){
ex.printStackTrace();
}
return this.SUCCESS;
}
// basedao 类
//分页
public int getTotalCnt(String sql) throws Exception{
StringBuffer cntSql = new StringBuffer("select count(*) ");
String sqlold = sql.substring(sql.indexOf(" from"),sql.indexOf("limit"));
cntSql.append(sqlold);
int count = 0;
Connection con = this.getCon();
PreparedStatement ps = con.prepareStatement(cntSql.toString());
ResultSet rs = ps.executeQuery();
if(rs.next())
count = rs.getInt(1);
else
count = 0;
this.Close(con, ps, rs);
return count;
}
------解决方案--------------------String sql="select * from article where bid=? ";
sql+=" order by bid limit "+((pageIndex-1)*pageSize)+","+pageSize+"";
Syst