java - 为什么我收到错误 'Operation not allowed after ResultSet closed' ?

标签 java sql database arraylist

我有一个 SQL 数据库,我正在尝试从中加载数据。 RstImport Student 正在从包含名字、中间名、姓氏、电话号码和出生日期的学生表中导入。然后,RstImportModule 从包含 6 个模块和等级的模块列表中导入。然后,使用每个导入的数据创建一个新的学生对象,并将模块和成绩添加到该对象的数组中。然后应将学生对象添加到 listOfStudents 数组列表中。我收到错误“结果集关闭后不允许操作”。调试 Eclipse 时告诉我在第二个 while 循环开始时发生错误。为什么我会收到此错误?

public class LoadData {

public static ArrayList<Student> loadStudentData() throws ClassNotFoundException, SQLException {

    Statement stm = null;

    System.out.println("Connecting to Database");
    System.out.println("**********************");

    Connection myConn = DriverManager.getConnection
            ("jdbc:mysql://localhost:3306/schoolstudentsystem", "root", "");

    stm = myConn.createStatement();

    String sqlImportStudent = "Select * From students";
    String sqlImportModule = "Select * From moduleslist";

    ResultSet rstImportStudent = stm.executeQuery(sqlImportStudent);
    ResultSet rstImportModule = stm.executeQuery(sqlImportModule);

    ModuleGrade[] moduleGradeArray = new ModuleGrade[6];

    while (rstImportModule.next()) {

        for(int i = 0; i < Student.modulesList.length; i++) {

            ModuleGrade mg1 = new ModuleGrade(rstImportModule.getString("m1"), rstImportModule.getInt("mg1"));
            ModuleGrade mg2 = new ModuleGrade(rstImportModule.getString("m2"), rstImportModule.getInt("mg2"));
            ModuleGrade mg3 = new ModuleGrade(rstImportModule.getString("m3"), rstImportModule.getInt("mg3"));
            ModuleGrade mg4 = new ModuleGrade(rstImportModule.getString("m4"), rstImportModule.getInt("mg4"));
            ModuleGrade mg5 = new ModuleGrade(rstImportModule.getString("m5"), rstImportModule.getInt("mg5"));
            ModuleGrade mg6 = new ModuleGrade(rstImportModule.getString("m6"), rstImportModule.getInt("mg6"));

            moduleGradeArray[0] = mg1;
            moduleGradeArray[1] = mg2;
            moduleGradeArray[2] = mg3;
            moduleGradeArray[3] = mg4;
            moduleGradeArray[4] = mg5;
            moduleGradeArray[5] = mg6;

                }
        while (rstImportStudent.next()) {

            Student student = new Student(rstImportStudent.getString("firstName"), rstImportStudent.getString("middleName"), 
                    rstImportStudent.getString("lastName"), 
                    rstImportStudent.getString("email"), rstImportStudent.getString("phoneNumber"), rstImportStudent.getInt("dob"),
                    moduleGradeArray);

                    ClassGroup.listOfStudents.add(student);     

                }
        }

    rstImportStudent.close();
    rstImportModule.close();
    myConn.close();

    return ClassGroup.listOfStudents;

}

}

最佳答案

如果您在语句上调用 close,它也会自动关闭来自它的 Con。

您在这里遇到错误了吗?

rstImportStudent.close();
rstImportModule.close();
myConn.close();

如果在关闭之前出现异常怎么办?您应该对资源使用 try 。

关于java - 为什么我收到错误 'Operation not allowed after ResultSet closed' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56064435/

相关文章:

java - 如何反转在​​不同类中创建的 ImageIcon 数组的内容?

Java无法读取文件,除非位于项目根目录中

java - 为什么 Java 八进制转义最多只能达到 255?

SQL从每个父行的子行返回最大值

java - 通过 JDBC/JPA 在 PostgreSQL 中更新插入(更新+插入)返回奇怪的行计数

php - 使用 PHP 获取数据库备份

mysql - 如果没有专有数据库引擎,将数据库转换为 mysql 的最佳方法是什么?

java - 尝试从java调用python文件

mysql - 排除工作人员

mysql - 根据另一个查询的结果获取结果