【Mysql数据库】使用java操作数据库查询语句时报错:Operation not allowed after ResultSet closed

在使用java操作数据库时通常步骤有:

  1、加载数据库驱动:Class.forName("com.mysql.jdbc.Driver");;

  2、创建数据库链接:Connection  conn = DriverManager.getConnection(URL, NAME, PASSWORD);

  3、创建Statment对象:Statement stmt=conn.createStatement();;

  4、执行查询语句:ResultSet rs=stmt.executeQuery("SELECT * FROM userdetails");

  5、处理结果集 :

  while(rs.next()) {

      System.out.println(rs.getString(“****”)+" "+rs.getString("username"));

  }

  6、关闭链接,关闭数据库。

 那出现标题错误的原因主要时,创建stmt对象后,使用同一对象连续执行了多次查询语句,但按实际情况时创建stmt对象后执行了rs查询语句后,就会关闭对应的链接,此时再执行rst则会报错。

//错误的代码如下:
 stmt=conn.createStatement();
 
 rs=stmt.executeQuery("select * from t1");
 rst=stmt.executeQuery("select * from t2");
 
 rs.last();
 /**由于执行了rs=stmt.executeQuery(sql_a);rs就会被关闭掉!
 所以程序执行到此会提示ResultSet已经关闭.
 错误信息为:java.sql.SQLException: Operation not allowed after ResultSet closed
 */
 
rst.last();

解决办法如下:

方法1:

stmt=conn.createStatement();
 
rs=stmt.executeQuery("select * from t1");
rs.last();//对rs的操作应马上操作,操作完后再从数据库得到rst,再对rst操作
 
rst=stmt.executeQuery("select * from t2");
rst.last();

方法2:

多个stmt对应各自的rs.
stmt=conn.createStatement();
stmt2=conn.createStatement();
 
rs=stmt.executeQuery("select * from t1");
rst=stmt2.executeQuery("select * from t2");
 
rs.last();
rst.last();
发布了168 篇原创文章 · 获赞 0 · 访问量 7833

猜你喜欢

转载自blog.csdn.net/weixin_42661815/article/details/100734492