In meiner Webanwendung habe ich separate Klassen DataAccess.java und DBUtils.java.So schließen Sie die MySql-Datenbankverbindung ordnungsgemäß
Ich habe folgenden Code in DBUtils.jva
public static PreparedStatement getPreparedStatement(String sql) throws ClassNotFoundException, SQLException{
PreparedStatement ps = null;
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/company";
String user = "root";
String pass = "root";
Connection con = DriverManager.getConnection(url, user, pass);
ps = con.prepareStatement(sql);
return ps;
I in DataAccess.java Klasse folgenden Code haben
public static List<Company> getAllCompanies(){
List<Company> ls = new LinkedList<>();
try {
String sql = "select * from company";
ResultSet rs = DBUtils.getPreparedStatement(sql).executeQuery();
while (rs.next()){
Company cp = new Company (rs.getInt(1), rs.getString(2), rs.getInt(3),rs.getTimestamp(9));
ls.add(cp);
}
rs.close();
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(DataAccess.class.getName()).log(Level.SEVERE, null, ex);
}
return ls;
}
Und ich bin getAllCompanies Funktion von einem anderen Servlet-Aufruf. Ich kann die Datenbankverbindung nicht richtig schließen, da sie in einer Klasse geöffnet ist und von einer anderen Klasse aufgerufen wird. Meine Webanwendung stürzt aufgrund zu vieler offener Verbindungen zur Datenbank ab. Der Fehler lautet:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Datenquelle hat Verbindungsaufbau abgelehnt, Nachricht vom Server: "Zu viele Verbindungen"
Könnte mir bitte jemand sagen, wie man die Datenbankverbindung in diesem Fall richtig schließt.
Vielen Dank. Es macht durchaus Sinn. Was würden Sie in Methoden wie closeConnection(), closeResultSet() und closePreparedStatement() schreiben. Da es nur eine Zeile braucht, um sie zu schließen, und wenn ich diese Methoden und DBUtils erstelle, würde es eine Zeile dauern, sie trotzdem aufzurufen. Was empfehlen Sie. – Monauwar