私のWebアプリケーションでは、DataAccess.javaとDBUtils.javaというクラスが別々に用意されています。MySqlデータベース接続を正しく閉じるには
私は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;
}
内のコードを以下の持っていると私は別のサーブレットからgetAllCompanies関数を呼び出しています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;
のコードを次のようしています。あるクラスで開かれ、別のクラスから呼び出されるため、データベース接続を適切に閉じる方法がわかりません。私のWebアプリケーションは、データベースへの接続が多すぎるためクラッシュし続けます。エラーは次のように表示されます。
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:データソースがサーバーからの接続の確立を拒否しました:
このケースでは、データベース接続を正しく閉じる方法を教えてください。
ありがとうございました。それは完璧な意味合いがあります。 closeConnection()、closeResultSet()、closePreparedStatement()などのメソッドで何を記述しますか。それらを閉じるには1行しかかからず、これらのメソッドとDBUtilsを作成すると、とにかく1行で呼び出すことになります。何がお勧めですか。 – Monauwar