我在我的Java應用程序中創建了一個getDBConnection方法。這將返回一個連接對象,因此我沒有在這個方法本身中關閉這個連接。JDBC連接問題
現在,我定期從我的應用程序中的各種方法調用此方法,並在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和Statement對象。這裏可能會丟失什麼?
出於效率和安全原因,我計劃用PreparedStatements替換所有語句。這會有幫助嗎?還有什麼可以做的?
編輯: 這只是一個核心的Java應用程序,通過MySQL-JDBC連接器反覆查詢MySQL數據庫中某些字段的更改。我沒有使用像Spring或Hibernate這樣的框架。
你可以發佈您的代碼? – Mark 2009-01-28 01:00:16
需要更多信息。你的環境是什麼,它是一個獨立的應用程序框架,一個JavaEE容器?你使用連接池嗎? – OscarRyz 2009-01-28 01:22:07