在线高分等待帮组 1.getRow()2.absolute( int row ) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ResultSet.getRow() 得到全部纪录的数量 rs.last();int rowCount = rs.getRow()+1;//获得全部记录数量/***************************rs.absolute( int row );//定位 开始我也是这么做的但是我在用rs.last()和rs.first()的时候,编译的时候没有问题,但是运行的时候就抛出异常:对只转发结果集的无效操作!这是为什么呀? 仔细想想,其实不停的用next也不见得就比直接指定到一行慢,resultSet内部要指定到某一行也需要一行一行的next,只不过是在内部进行,你看不见而已, To: whyxx(我也是新手) 实际上我以前就是用next()循环来定位第n页面的记录,不过后来用absolute()确实快了很多,用next()的时间长短取决于循环次数,但absolute()和记录的位置无关,任何位置只须同样的很短的时间 resultSet内部要指定到某一行也需要一行一行的next???不是吧,这怎么可能呢。开始我也是这么做的但是我在用rs.last()和rs.first()的时候,编译的时候没有问题,但是运行的时候就抛出异常:对只转发结果集的无效操作!这是为什么呀?你的程序,异常信息,异常时的数据库状况 我用的数据库是oracle,上面我已经我错误告诉大家了,捕获的异常SQLException就是“对只转发结果集的无效操作”,但用rs.next就没有问题。 ... Connection conn = null; Statement stmt = null; ResultSet rset = null; try{ int count = 0; int loopCount=0; conn = DbConnect.getInstance().getConnection(); stmt = conn.createStatement(); rset = stmt.executeQuery(sql); if(rset.next()){ boolean isLast=rset.last(); count=rset.getRow()+1; } else{ count=0; } rset.first(); rset.absolute(index); ...... } catch(Exception e){ System.out.println("the Exception is : "+e.getMessage()); } finally{ try { if(conn != null) conn.close(); if(rset != null) rset.close(); if(stmt != null) stmt.close(); } catch (SQLException ex) {} } 执行rset.last()和rset.first()就会出错 你是在进行分页操作吧.stmt = conn.createStatement();这句话有问题,需要加2个参数,使你可以last()操作后可以first(),就是指针可以回头的意思,具体你看看网上有例子还有就是不推荐使用查询所有记录然后用last(),然后用getrow(),因为last()所用时间完全和rs.next()循环到最后一条记录所用时间一样推荐: 1.先建立一个查询所有记录的sql ,比如select count(*) ... 然后取出记录数.这样当你记录数大(5000条记录以上就可以明显看出差别了)的时候就可以节省很多时间了. 2.再建立你需要的查询,然后用absolute(int n)(其实它所用的时间完全和你用循环结合next()一样)跳到你需要的记录. stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY ) 连接对象的参数如下设置DBConnect dbc=new DBConnect(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); super_zzw(之支吾) 你确定absolute(int n)(其实它所用的时间完全和你用循环结合next()一样)跳到你需要的记录.???能不能告诉我什么资料上有介绍?我认为应该不会的才对。rs内部应该完全可以直接跳到某一条记录才对。 再用next之前,先将纪录移到第一条之前ds.beforeFirst(); 乱码的话编码转化一下比如new String( 取得结果.getBytes(现在的编码), 你需要的编码 ) to bluesmile979(笑着) 我作过对100000条记录的测试用absolute()和next()+循环时间完全一样!!!! 数据库是oracle817,你不信可以自己做测试! JAVA内存溢出 最简单的java打印 java游戏的背景平移 新手问一个new treeset的问题 application文件打成JAR包后连数据库没反应,请高手指点 那位能帮我看看JSP连接MYSQL的问题(菜鸟提问) 近来帮帮忙吧! 一个简单的方法问题.. 怎么我在程序里把数据写入到dbf文件里后,再用excel打开时看到每个字段的数据后面都会有小方格??好奇怪,怎么样能去掉啊? 大家怎么编译JAVA呢? jar的问题?最简单app.jar 关于JRE的问题
int rowCount = rs.getRow()+1;//获得全部记录数量
/***************************
rs.absolute( int row );//定位
但是我在用rs.last()和rs.first()的时候,编译的时候没有问题,但是运行的时候就抛出异常:对只转发结果集的无效操作!这是为什么呀?
实际上我以前就是用next()循环来定位第n页面的记录,不过后来用absolute()确实快了很多,用
next()的时间长短取决于循环次数,但absolute()和记录的位置无关,任何位置只须同样的很短的时间
但是我在用rs.last()和rs.first()的时候,编译的时候没有问题,但是运行的时候就抛出异常:对只转发结果集的无效操作!这是为什么呀?
你的程序,异常信息,异常时的数据库状况
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
try{
int count = 0;
int loopCount=0;
conn = DbConnect.getInstance().getConnection();
stmt = conn.createStatement();
rset = stmt.executeQuery(sql); if(rset.next()){
boolean isLast=rset.last();
count=rset.getRow()+1;
}
else{
count=0;
}
rset.first();
rset.absolute(index);
......
}
catch(Exception e){
System.out.println("the Exception is : "+e.getMessage());
}
finally{
try {
if(conn != null) conn.close();
if(rset != null) rset.close();
if(stmt != null) stmt.close();
} catch (SQLException ex) {}
}
还有就是不推荐使用查询所有记录然后用last(),然后用getrow(),因为last()所用时间完全和rs.next()循环到最后一条记录所用时间一样推荐:
1.先建立一个查询所有记录的sql ,比如select count(*) ...
然后取出记录数.这样当你记录数大(5000条记录以上就可以明显看出差别了)的时候就可以节省很多时间了.
2.再建立你需要的查询,然后用absolute(int n)(其实它所用的时间完全和你用循环结合next()一样)跳到你需要的记录.
DBConnect dbc=new DBConnect(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
用absolute()和next()+循环时间完全一样!!!! 数据库是oracle817,你不信可以自己做测试!