Почему я получаю сообщение об ошибке «Операция не разрешена после закрытия ResultSet»? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть база данных sql, из которой я пытаюсь загрузить данные. RstImport Student импортирует из таблицы ученика, которая содержит firstName, middleName, lastName, phoneNumber и dob. RstImportModule затем импортирует из таблицы списка модулей, которая содержит 6 модулей и классов. Импортированные данные из каждого затем используются для создания нового объекта ученика, с модулями и оценками, добавляемыми в массив в этом объекте. Затем объект ученика должен быть добавлен в массив listOfStudents. Я получаю сообщение об ошибке «Операция не разрешена после закрытия ResultSet». Когда отладка затмения говорит мне, в начале второго цикла 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;

}

}

1 Ответ

1 голос
/ 09 мая 2019

Если вы вызываете оператор close для оператора, он автоматически закрывает Con, откуда он также поступил.

Вы получаете ошибку здесь?

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

Что если естьИсключение, прежде чем закрыть?Вы должны использовать попробовать с ресурсами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...