我有一个 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/