Вы вернули ResultSet
ссылку rs
после закрытия соединения.
ResultSet
использует курсор для указания строк, возвращаемых запросом базы данных.Если вы закроете соединение до фактического использования результата, ResultSet
будет бесполезным, так как соединение закрыто, он тоже убирает курсор.
Это стоит чтение этого поста
В качестве предложения по вашей проблеме, я бы порекомендовал следующий подход ..
Создайте POJO для вашей таблицы ..
class Teacher{
private String name;
private String contact;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
И, теперь в вашем методе, вы должнывернуть list
из teacher
, который может быть передан некоторым вызовам других методов, даже когда соединение с базой данных закрыто.
public List<Teacher> countTeacher() throws SQLException {
try {
con = Dbconnection.getCon();
stmt = con.prepareStatement("select COUNT(*) from teacher");
rs = stmt.executeQuery();
Teacher teacher = new Teacher();
List<Teacher> teachers = new ArrayList<Teacher>();
while(rs.next()){
String name = rs.getString("name");
String contact = rs.getString("contact");
String email = rs.getString("email");
teacher.setName(name);
teacher.setContact(contact);
teacher.setEmail(email);
teachers.add(teacher);
}
return teachers;
} catch (Exception e) {
e.getMessage();
}
finally{
con.close();
}
}