我只是把我的頭圍繞着java(和OOP),我唯一熟悉的就是MySQL。我需要在應用程序的整個持續時間保持數據庫連接的打開狀態,以及服務器套接字。Java/MySQL - 如何從另一個類訪問連接?
我甚至不知道他們是否都需要單獨的類,但這裏是我到目前爲止有:
http://pastebin.com/qzMFFTrY (它不會都去在代碼標籤)
變量i需要的是con用於第86行。
我只是把我的頭圍繞着java(和OOP),我唯一熟悉的就是MySQL。我需要在應用程序的整個持續時間保持數據庫連接的打開狀態,以及服務器套接字。Java/MySQL - 如何從另一個類訪問連接?
我甚至不知道他們是否都需要單獨的類,但這裏是我到目前爲止有:
http://pastebin.com/qzMFFTrY (它不會都去在代碼標籤)
變量i需要的是con用於第86行。
爲什麼不實例化DoComms
以前的連接?
例如第44行是:
DoComms conn_c = new DoComms(server, con);
和DoComms
將持有該連接的引用,然後用它在線路86
注意,你得到的連接,然後之前關閉它在finally
塊你實例化你的DoComms
對象(第28行)。所以,一旦你完成了一切處理,你應該關閉你的連接。簡述:
try {
// get connection
// do stuff in threads
}
catch {
// handle
}
finally {
con.close();
}
如果你的應用是長期存在的,那麼我會使用連接池的要求(例如C3P0或Apache DBCP)和打開/關閉連接。但是,您的方法可能適合您的要求,我暫時不擔心這一點。
我需要保持數據庫連接整個應用程序
你不應該這樣做的時間開放。連接的有限生命週期的長度不受應用程序的控制。當數據庫決定連接打開時間過長時,它會關閉連接,您將得到connection reset
或connection timed out
例外。這通常是30分鐘左右,但也可能更少。
正常JDBC做法是獲取和關閉Connection
,Statement
和在最短的範圍ResultSet
,即在作爲執行查詢非常相同的方法塊中。
如果保持長時間連接的原因是由於性能,那麼您應該考慮連接池,例如c3p0(usage guide here)。
使用臨時表還可能需要連接才能維持一段時間。你可以在一段時間內完成ping操作,儘管個人而言,我會去尋找替代解決方案就是這種情況。 – extraneon 2010-05-22 15:17:21