Я создал метод getDBConnection в своем приложении Java. Это возвращает объект соединения, и, следовательно, я не закрывал это соединение в самом методе.
Теперь я вызываю этот метод из различных методов в моем приложении через регулярные промежутки времени и закрываю их внутри блока try - finally. Я думал, что это должно освободить соединение после использования. Тем не менее, я вижу большое количество открытых соединений (около 50) на вкладке Соединения сервера администратора MySQL.
//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 и Statement. Чего здесь не хватает?
Я планирую заменить все выписки на PreparedStatements по соображениям эффективности и безопасности. Это поможет значительно? Что еще можно сделать?
EDIT:
Это просто базовое Java-приложение, которое постоянно запрашивает изменения в некоторых полях базы данных MySQL через коннектор MySQL-JDBC. Я не использую какие-либо фреймворки, такие как Spring или Hibernate.