关于查询分页的有关问题.困扰小弟我两天了.真心不知道该如何改了.

关于查询分页的问题..困扰我两天了..真心不知道该怎么改了..求助
设了断点之后发现是这个方法的问题,我自己估计是SQL的语法写错了..总是说索引1 超出范围
我把代码粘贴如下,望各位大神帮帮我...真是太感谢了
public List<Goods> queryPage(int currentPageIndex,int countPerPage)
{
List<Goods> pageGoods=new ArrayList<Goods>();
try {
Connection con=DBUtil.getCon();
String sql="select top 4 * from d_goods where id not in(select top 4*(pageCount-1) id from d_goods order by id)order by id";
PreparedStatement prep=con.prepareStatement(sql);
prep.setInt(1, (currentPageIndex-1)*countPerPage);
prep.setInt(2, currentPageIndex*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;
}
------解决方案--------------------
我想问你一下你用的是Mysql数据库还是其他的数据库呀!如果是Mysql数据库你的写的过于复杂了
你可以这样写:
select * from d_goods where id=? limit ?,?
第一个?是写你的参数,第二个?是写从哪一条开始查询,第三个问号是查询多少条

查询到的结果你自己进行一个封装就可以了

如果是SQLServer的话,那么你把这个语句拿到Sqlserver下面去运行一下就可以了

对于它包的异常,断点跟踪一下,看看死哪个报的错,这样才好针对性的解决问题呀!

------解决方案--------------------
仔细看了一下,你的sql语句乱写一通,你上面根本没有使用?,为什么下面的代码
prep.setInt(1, (currentPageIndex-1)*countPerPage);
prep.setInt(2, currentPageIndex*countPerPage);
你这样写是想要表达什么呢?
------解决方案--------------------
如果是Oracle数据库,可以这样写, 例子:
/**
 * 根据当前页码和每页显示的条数查询结果 currentPage 当前页 lineSize 每页显示的条数 return 查询 结果集
 */
public List<Stu> findPage(int lineSize, int currentPage) {

int start = 0;
if (currentPage > 1) {
start = (currentPage - 1) * lineSize;
}
List<Stu> list = new ArrayList<Stu>();
// 1
// 2
conn = DBPool.getConn();
// 3
String sql = "select id,name,age,birth from "
+ "(select id,name,age,birth,rownum rn from (select id,name,age,birth from stu order by id)) a  "
+ "where a.rn>=" + (start + 1) + "  and a.rn<=" + (currentPage*lineSize);
try {
ps = conn.prepareStatement(sql);
// 4
rs = ps.executeQuery();
// 5
while (rs.next()) {
// 1
Stu stu = new Stu();
// 2
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setAge(rs.getInt("age"));
stu.setBirth(rs.getTimestamp("birth"));
// 3
list.add(stu);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 6
DBPool.closeRs(rs);
DBPool.closePs(ps);
DBPool.closeConn(conn);
}
return list;
}