Java アプリケーションで getDBConnection メソッドを作成しました。これは接続オブジェクトを返すため、このメソッド自体でこの接続を閉じていません。
現在、アプリケーションのさまざまなメソッドから定期的にこのメソッドを呼び出し、try - finally ブロック内でそれらを閉じています。これにより、使用後に接続が解放されるはずだと思いました。しかし、MySQL 管理者の [サーバー接続] タブで、多数の接続 (約 50) が開かれています。
//Defining a method to retrieve a database connection
// PropDemo is a properties class that retrieves Database related values from a file
public Connection getDBConnection() {
//Instantiating the Properties object
PropDemo prop = new PropDemo();
Connection con = null;
// Retrieving values from the parameters.properties file
String JdbcDriver = prop.getMessage("JdbcDriver");
String JdbcUrlPrefix = prop.getMessage("JdbcUrlPrefix");
String DBIP = prop.getMessage("DBIP");
String DBName = prop.getMessage("DBName");
String DBUser = prop.getMessage("DBUser");
String DBPassword = prop.getMessage("DBPassword");
try {
// Loading and instantiating the JDBC MySQL connector driver class
Class.forName(JdbcDriver).newInstance();
con = DriverManager.getConnection(JdbcUrlPrefix + DBIP + "/" + DBName, DBUser, DBPassword);
if (con.isClosed())
Logger.log("Connection cannot be established", "vm");
} catch (Exception e) {
Logger.log("Exception: " + e, "vm");
Logger.log(Logger.stack2string(e), "vm");
}
return con;
}
関連する ResultSet およびステートメント オブジェクトも閉じています。ここで何が欠けている可能性がありますか?
効率とセキュリティ上の理由から、すべてのステートメントを PreparedStatements に置き換えることを計画しています。それは大いに役立ちますか?他に何ができますか?
編集: これは、MySQL-JDBC コネクタを介して MySQL データベース内のいくつかのフィールドの変更を繰り返し照会する単なるコア Java アプリケーションです。Spring や Hibernate などのフレームワークは使用していません。