为啥总是在return pageGoods的时候报错呢

为什么总是在return pageGoods的时候报错呢?
public List<Goods> queryPage(int currentPageIndex,int countPerPage)
{
List<Goods> pageGoods=new ArrayList<Goods>();
try {
Connection con=DBUtil.getCon();
String sql="SELECT TOP ${top}* FROM d_goods WHERE id NOT IN(SELECT TOP ${top} id FROM d_goods ORDER BY id) ORDER BY id";

PreparedStatement prep=con.prepareStatement(sql);
prep.setInt(0, countPerPage);
prep.setInt(1,(currentPageIndex-1) *countPerPage);
ResultSet rs=prep.executeQuery();
while(rs.next())
{
Goods g=new Goods();
g.setId(rs.getInt("id"));
g.setGood_name(rs.getString("good_name"));
g.setFixed_price(rs.getDouble("fixed_price"));

g.setScore(rs.getInt("score"));
g.setProduct_pic(rs.getString("product_pic"));
pageGoods.add(g);
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return pageGoods;
}
代码如上所示..设了debug断点,提示说我的索引0超出范围...该怎么解决啊..所有的途径都找遍了..实在无助了..求助~
------解决方案--------------------
debug  下,看样子好像不错
------解决方案--------------------
prep.setInt(1, countPerPage);
prep.setInt(2,(currentPageIndex-1) *countPerPage);

貌似是从1开始,不是0,所以报错说你0超出范围。
------解决方案--------------------
异常贴出来,有精确到哪一行的。
------解决方案--------------------
引用:
prep.setInt(1, countPerPage);
prep.setInt(2,(currentPageIndex-1) *countPerPage);

貌似是从1开始,不是0,所以报错说你0超出范围。


应该是这个问题,索引的问题在那儿

能不能告诉我一下,这个SQL语句中${top}这个变量的这种语法是Spring的语法吗?到了数据库可以解析吗?

------解决方案--------------------
引用:
Quote: 引用:

prep.setInt(1, countPerPage);
prep.setInt(2,(currentPageIndex-1) *countPerPage);

貌似是从1开始,不是0,所以报错说你0超出范围。


应该是这个问题,索引的问题在那儿

能不能告诉我一下,这个SQL语句中${top}这个变量的这种语法是Spring的语法吗?到了数据库可以解析吗?

应该不行吧,我记得JDBC的prparedstatement是用问号占位的,你直接写成问号就行了,然后给问号赋值。你试试。
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

prep.setInt(1, countPerPage);
prep.setInt(2,(currentPageIndex-1) *countPerPage);

貌似是从1开始,不是0,所以报错说你0超出范围。


应该是这个问题,索引的问题在那儿

能不能告诉我一下,这个SQL语句中${top}这个变量的这种语法是Spring的语法吗?到了数据库可以解析吗?

应该不行吧,我记得JDBC的prparedstatement是用问号占位的,你直接写成问号就行了,然后给问号赋值。你试试。



对呀,既然使用问号占位,为什么楼主的不写问号,诡异的是,竟然大家都没有提出来过,很奇怪
------解决方案--------------------
对于这样的问题,解决的方法一般都是debug一下,找到出错的代码行数,然后就知道如何下手了;
------解决方案--------------------
SQL应该是有问题的,prep.setInt(0, countPerPage);,这里的第一个参数是从1开始,不是0;
这个方法设置占位符的参数,占位数是?问号,我想,你这种方式应该是有问题的!