碰到一个郁闷的问题数据库是Oracle在实现翻页功能的时候使用了存储过程,返回游标。在每次调用的时候通过结果集ResultSet接受数据,但是每次都会重现数据累加的情况,比如第一次调用返回10条第二次调用返回20条第三次调用返回30条 List<KhHelpBean> dataList = new ArrayList<KhHelpBean>();
try {
cstmt = conn.prepareCall("{call iv_query.getkhbyjg(?,?,?,?,?,?,?)}");
cstmt.setString(1, jgbh);
cstmt.setString(2, khbh);
cstmt.setString(3, khmc);
cstmt.setInt(4, pageNo);
cstmt.setInt(5, pageSize);
cstmt.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
cstmt.registerOutParameter(7, oracle.jdbc.OracleTypes.CURSOR);
cstmt.execute();
rs = (ResultSet)cstmt.getObject(6);
while (rs.next()) {
pageCount = rs.getInt(1);
}
rs = (ResultSet)cstmt.getObject(7);
KhHelpBean khbean = null;
int i = 1;
while (rs.next()) {
khbean = new KhHelpBean();
khbean.setKh_bh(rs.getString(2));
khbean.setKh_mc(rs.getString(3));
System.out.println(i++ + "bh: " + rs.getString(2) + " mc: " + rs.getString(3));
dataList.add(khbean); }
System.out.println("size : " + dataList.size());
}
catch (Exception ex) {
System.out.println("HelpKhDpage.java : " + ex.getMessage());
ex.printStackTrace();
}
finally {
try {
if (rs != null) {
rs.close();
}
if (cstmt != null) {
cstmt.close();
}
if (conn != null) {
conn.close();
}
}
catch (Exception ex) {
System.out.println("close error : " + ex.getMessage());
}
}
return dataList;
存储过程测试过,没有问题,可以正常返回结果集。高手指点一下,是不是我的代码写的有问题?