ResultSet is closed

以下是异常代码的举例

try {

   DBConnection db = new DBConnection();//DBConnection是自定义用于实现JDBC-ODBC数据库连接的类,类
                                       //中实现了 返回Connection 和 Statement 的方法
   ResultSet rs1,rs2 ;
   Statement stmt = db.getStatement();
   rs1 = stmt.executeQuery("select * from table1;");

   while(rs1.next()){
       rs2 = stmt.executeQuery("select * from table2;");
       while(rs2.next()){
                        /* 一段代码 */
       }
    }
    rs2.close();
    rs1.close();
    stmt.close();
}catch (SQLException ex) { System.out.println(ex); }

        代码运行后, 就会抛出 java.sql.SQLException: ResultSet is closed 的异常,这是因为程序在while与while的嵌套循环中,每循环到一次rs1的时候,就会循环到一次rs2,而rs1和rs2都是通过stmt生成的结果集,所以在生成rs2的时候,stmt就自动把rs1关掉了,再循环到rs1的时候,系统自然酒会抛出ResultSet is closed 的异常了,解决的方法就是创建两个Statement,rs1和rs2分别由不同的Statement生成,就不会抛出异常了 修改如下

try {
  DBConnection db = new DBConnection();//DBConnection是自定义的用于实现JDBC-ODBC数据库连接的类,类
                                                  //中实现了 返回Connection 和 Statement 的方法
  ResultSet rs1,rs2;
  Statement stmt1,stmt2;
  Connection conn = db.getConnection();
  stmt1 = conn.createStatement();// 创建两个Statement实例
  stmt2 = conn.createStatement();


  rs1 = stmt1.executeQuery("select * from table1;");//rs1由stmt1生成结果
  while(rs1.next()){
      rs2 = stmt2.executeQuery("select * from table2;");//rs2由stmt2生成结果
      while(rs2.next()){
           /* 一段代码 */
      }
   }
   rs2.close();
   rs1.close();
   stmt1.close();
   stmt2.close();
}catch (SQLException ex) { System.out.println(ex); }

 这样运行就不会抛出异常了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值