package shujukulianjie;import java.sql.*;public class ChaRu {
public static void main(String args[]) {
Connection conn;
Statement state;
ResultSet res;
ResultSet res1;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
conn = DriverManager.getConnection("jdbc:odbc:bbb", "", "");
state = conn.createStatement();
res = state.executeQuery("SELECT * FROM biao1"); while (res.next()) {
String bianma = res.getString(11);
 System.out.println("此时bianma的值是:" + bianma);
res1 = state.executeQuery("SELECT * FROM SHOUDONG_XINJIAN");
while (res1.next()) { String bianma_1 = res1.getString(2); System.out.println("此时bianma_1的值是:" + bianma_1);
if (bianma.equals(bianma_1)) {
 System.out.println("此时两个值相等");
String daima = bianma;
String leixing = res1.getString(3);
String kaishi_time = res1.getString(4);
String jieshu_time = res1.getString(5);
System.out.println(daima + "/n" + leixing + "/n"
+ kaishi_time + "/n" + jieshu_time + "/n");
//  System.exit(0);
state.executeQuery("INSERT INTO biao1(八位代码,类型,开始时间,结束时间)VALUES('"
+ daima
+ "','"
+ leixing
+ "','"
+ kaishi_time
+ "','"
+ jieshu_time
+ "')");
} else {
System.out.println("若不相等就跳出到外循环");
break;
}
}
System.out.println("继续外循环");
continue;
}
} catch (SQLException e) {
e.printStackTrace();
}
}}
为什么外层的while循环只能执行依次就出现下下面的错误。
此时bianma的值是:41600400
此时bianma_1的值是:40104450
若不相等就跳出到外循环
继续外循环
java.sql.SQLException: ResultSet is closed
at sun.jdbc.odbc.JdbcOdbcResultSet.checkOpen(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.next(Unknown Source)
at shujukulianjie.ChaRu.main(ChaRu.java:22)

解决方案 »

  1.   

       一个Statement对象仅能有一个ResultSet对象。 看看是不是这里有点问题呦。  因为要牵涉到建表,没试过。
      

  2.   

    如楼上所说的,多创建一个Statement对像吧.
      

  3.   

    应该是您的res = state.executeQuery("SELECT * FROM biao1"); 
    这条语句在while循环的外面!而state的executeQuery方法会返回一个结果集!
    当您执行res1 = state.executeQuery("SELECT * FROM SHOUDONG_XINJIAN"); 
    这条语句的时候res这个结果集应该就会被jvm认为是垃圾了!会被自动回收吧!
    呵呵我是这么认为的!
      

  4.   

    引用
    Statement 对象将由 Java 垃圾收集程序自动关闭。而作为一种好的编程风格,应在不需要 Statement 对象时显式地关闭它们。这将立即释放 DBMS 资源,有助于避免潜在的内存问题。所以你可以将它放到一个list中,然后再做自己想做的事情!
      

  5.   

    一个Statement对象仅能有一个ResultSet对象。