一个stmt多个rs进行操作.那么从stmt得到的rs1,必须马上操作此rs1后,才能去得到另外的rs2,再对rs2操作.不能互相交替使用,会引起rs已经关闭错误——Operation not allowed after ResultSet closed.
1
2
3
4
5
6
7
8
9
10
|
错误的代码如下: stmt=conn.createStatement();
rs=stmt.executeQuery( "select * from t1" );
rst=stmt.executeQuery( "select * from t2" );
rs.last();
//由于执行了rst=stmt.executeQuery(sql_a);rs就会被关闭掉!所以程序执行到此会提示ResultSet已经关闭.错误信息为:java.sql.SQLException: Operation not allowed after ResultSet closed
rst.last(); |
正确的代码:
1
2
3
4
5
6
7
|
stmt=conn.createStatement(); rs=stmt.executeQuery( "select * from t1" );
rs.last(); //对rs的操作应马上操作,操作完后再从数据库得到rst,再对rst操作
rst=stmt.executeQuery( "select * from t2" );
rst.last(); |
一个stmt最好对应一个rs,
如果用一个时间内用一个stmt打开两个rs同时操作,会出现这种情况.编写这样的代码的操作原则是:
所以解决此类问题:
1.就多创建几个stmt,一个stmt对应一个rs;
2.若用一个stmt对应多个rs的话,那只能得到一个rs后就操作,处理完第一个rs后再处理其他的,如上"正确代码".
1
2
3
4
5
6
7
8
9
|
多个stmt对应各自的rs. stmt=conn.createStatement(); stmt2=conn.createStatement(); rs=stmt.executeQuery( "select * from t1" );
rst=stmt2.executeQuery( "select * from t2" );
rs.last(); rst.last(); |
Operation not allowed after ResultSet closed--操作mysql数据库,布布扣,bubuko.com