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

本文详细解析了在Java中使用数据库时常见的错误——连续执行多条查询语句导致的结果集关闭问题,并提供了两种有效的解决策略。第一种策略是在完成一次查询后立即进行所有必要的操作,然后再执行下一条查询语句。第二种策略是为每条查询语句创建独立的Statement对象和结果集,避免相互干扰。

在使用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();

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值