我正在嘗試解決正在使用JDBC連接到MySQL數據庫的Java應用程序的問題。表面問題是,當連接到有效的數據庫時,DriverManager.getConnection有時會返回NULL,而僅僅幾分鐘後,它將返回一個有效的連接到完全相同的數據庫。Java/JDBC/MySQL:如何解決DriverManager.getConnection()返回NULL的原因?
我在試圖解決這一問題上的立場,但我在哪裏的Java,JDBC和MySQL相遇是相當有限的理解。我一直在做這方面的大量研究,但已經碰壁,不知道該從哪裏出發。
這是我到目前爲止已經完成:
- 在Java結束,我已經查明代碼一路的DriverManager.getConnection()。我確定NULL連接來自那裏,但我不知道getConnection背後發生了什麼。我一直在努力尋找這個在線的詳細解釋。
- 在MySQL的結束,我已經驗證,有很多提供給我的連接(大約在1000個無連接),所以我知道我不超過最大連接那裏。查看日誌時,我能夠確定在我遇到的問題最多的時間段內,中斷的連接數稍高一些,但我不知道如何確定爲什麼這些連接會中止(MySQL放棄,JDBC,Java應用程序?)我不確定是否還有其他需要在MySQL端尋找的東西。
- 在中間,用JDBC,我很迷茫。我一直在閱讀http://dev.mysql.com/doc/refman/5.1/en/connector-j.html上的MySQL Connector/J,但不確定這些信息是否與Java使用的JDBC驅動程序有關。
任何方向的地方,我可以從這裏去,將不勝感激。
謝謝!
編輯 - 2/15,上午10:35 CST 我很抱歉沒有更具體。這個應用程序是一個通常工作得很好的生產應用程序。它每天成功處理數萬個連接,沒有任何問題,只是這個問題會在白天的隨機時間出現,並且在發生時會持續30秒到5分鐘。
下面是我一路追蹤到的DriverManager.getConnection代碼:
var dbConn = DatabaseConnectionFactory.createDatabaseConnection('com.mysql.jdbc.Driver','jdbc:mysql://'+ serverName +':' + port + '/' + database, userName, password);
public static DatabaseConnection createDatabaseConnection(String driver, String address, String username, String password) throws SQLException {
try {
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
}
Properties info = new Properties();
info.setProperty("user", username);
info.setProperty("password", password);
// this property should only be set if it's for embedded database
info.setProperty("shutdown", "true");
return new DatabaseConnection(address, info);
}
public DatabaseConnection(String address, Properties info) throws SQLException {
logger.debug("creating new database connection: address=" + address + ", " + info);
this.address = address;
connection = DriverManager.getConnection(address, info);
}
我不相信居然還有與代碼的任何問題,而是一個問題在某處之間的getConnection ()和MySQL。
發佈一些代碼,它會更容易地幫助你。 – duffymo 2013-02-15 16:10:47
聽起來好像連接(網絡)不可靠,並且您的機器並不總是連接到數據庫所在的機器,所以有時連接不能建立 – 2013-02-15 16:32:05
傑夫 - 這是我的懷疑,但很難說這可能會發生。如果有一些方法可以幫助我確定DriverManager.getConnection返回NULL的不同原因,那將有助於我顯着地追蹤這個問題。 – TACHEON 2013-02-15 16:37:50