“Operationnot allowed after ResultSetclosed”是mysql的数据库操作中经常出现的问题。
百度这个问题,给出的解决方法都是:
一个stmt多个rs进行操作.那么从stmt得到的rs1,必须马上操作此rs1后,才能去得到另外的rs2,再对rs2操作.
不能互相交替使用,会引起rs已经关闭错误.错误的代码如下:stmt=conn.createStatement(); rs=stmt.executeQuery("select * fromt1");
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();
正确的代码:stmt=conn.createStatement(); rs=stmt.executeQuery("select * fromt1");
rs.last();//对rs的操作应马上操作,操作完后再从数据库得到rst,再对rst操作
rst=stmt.executeQuery("select * from t2");
rst.last();
当然这是导致这个错误的一种原因,但还有另外一个原因,请看如下代码:
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/hellosql","root", "123");
stmt=conn.createStatement();
sql= "SELECT LAST_INSERT_ID()from"+tableName;
rs =stmt.executeQuery(sql);
while(rs.next()){
}
rs.close();
rs =null;
stmt.close();
stmt =null;
con.close();
con =null;
上面这段程序只有一个stmt,一个与之对应的rs,但是也出现了上述错误。
我的理解是while中的stmt.executeUpdate(sql);导致stmt发生了变化,导致rs关闭。