我想弄清楚如何在類之間共享建立的連接到數據庫以執行不同的SQL語句。 我通讀了一些主題,但由於我對編程相當陌生,所以我很難將給定的信息適應於我的問題。如何在類之間共享數據庫連接? (JDBC)
問題:我有兩個班,一個打開到數據庫的連接,執行一些SQL statments並調用其他類做同樣只使用不同的表和SQL statments。 現在,只要我用他們自己的主要方法分離地運行類,並且連接一切正常。但是,當一個類調用另一個時,我得到不同的異常,這取決於我到目前爲止嘗試的解決方法(MySQLNonTransientConnectionException:數據源拒絕建立連接或StackOverflowException)。
這裏是我正在試圖建立了用於在兩個不同的類來執行某些SQL操作的連接:
public ClassA{
public static Connection dbConn;
//Set up a connection to the database
String dbURL = "jdbc:mysql://<some database>"; //put host, port and database here
Properties connectionProbs = new Properties();
connectionProbs.put("user", "root"); //insert USER here
connectionProbs.put("password", "root"); //insert PASSWORD here
dbConn = null;
try{
dbConn = DriverManager.getConnection(dbURL, connectionProbs);
PreparedStatement useStmt;
try{
useStmt = dbConn.prepareStatement("USE <some database>"); //insert DATABASE here
useStmt.executeUpdate();
}
catch(SQLException e){
e.printStackTrace();
}
//Do some SQL operations
//Call class B to do some SQL operations using the same connection
}
catch(SQLException e){
System.err.println("There was a problem connecting to the database");
e.printStackTrace();
}
finally{
if(dbConn != null)
try{dbConn.close();}catch(SQLException e){e.printStackTrace();}
}
}
爲什麼不能B類的ClassA使用的連接,例如通過做這樣的事情(這將導致出現StackOverflow):
PreparedStatement Stmt = ClassA.dbConn.prepareStatement("INSERT INTO table(ID, name) VALUES (?,?)");
在另一方面,如果我試圖建立兩個獨立的連接(使用上述同樣的代碼)到同一個數據庫(在運行同時)我得到MySQLNonTransientConnectionException:數據如此urce拒絕建立連接。
處理這個問題的最佳方法是什麼?我在論壇中偶然發現了ConnectionPooling,但是我找不到一個初學者友好的來源來詳細說明如何將其付諸實踐。是否有直接的方法來確保不同的類可以連接和操作一個數據庫?
感謝您的任何反饋
您可以發佈,編譯,並顯示你的問題的代碼?你給了我們一個沒有方法,構造函數或狀態的類,並且只是用某種方法編寫代碼。請給我們真實的代碼。 – RealSkeptic 2014-10-30 12:06:14
你是對的RealSkeptic。我沒有發佈實際的代碼,因爲它超過600行。我不想用不必要的數據向你發送垃圾郵件,但是我意識到所選擇的片段遠非完美(我對編碼沒什麼新意)。我發現stackOVerflow,這是完全不同的東西。我想你們會立即找到它 – SomewhereDave 2014-11-02 22:59:04