在我的Web應用程序中,我有單獨的類DataAccess.java和DBUtils.java。如何正確關閉MySql數據庫連接
我在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;
下面的代碼我已經在DataAccess.java類
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;
}
下面的代碼,我來自一個不同的servlet調用getAllCompanies功能。我不知道如何正確關閉數據庫連接,因爲它是在一個類中打開並從另一個類中調用的。我的Web應用程序由於與數據庫的打開連接太多而不斷崩潰,錯誤提示:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:數據源拒絕建立連接,來自服務器的消息:「連接太多」
有人請告訴我如何在這種情況下正確關閉數據庫連接。
非常感謝。它非常有意義。你會用closeConnection(),closeResultSet()和closePreparedStatement()方法編寫什麼東西。因爲它只需要一行來關閉它們,並且如果我創建了這些方法和DBUtils,則無論如何都需要一行來調用它們。你有什麼建議。 – Monauwar