以下是异常代码的举例
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); }
这样运行就不会抛出异常了