[英]How many JDBC connections in Java?
我有一個由大約15種方法組成的Java程序。 並且,在程序的執行期間非常頻繁地調用這些方法。 目前,我正在每個方法中創建一個新連接並在其上調用語句(數據庫在網絡上的另一台機器上設置)。
我想知道的是:我應該在main方法中只創建一個連接,並將其作為參數傳遞給需要連接對象的所有方法,因為它會顯着減少程序中連接對象的數量,而不是創建並且在每種方法中經常關閉連接。
我懷疑我沒有在當前設計中非常有效地使用資源,並且考慮到該程序將來可能會增長很多,因此還有很大的改進空間。
是的,您應該考慮重新使用連接,而不是每次都創建一個新連接。 通常的程序是:
一些實際考慮因素:
您可以傳遞連接,也可以更好地使用Jakarta數據庫連接池等。 http://commons.apache.org/dbcp/
您應該使用連接池。
這樣你可以要求連接並在完成后將其釋放並將其返回池中
如果另一個線程想要一個新連接並且正在使用該連接,則可以創建一個新連接。 如果沒有其他線程正在使用連接,則可以重復使用該連接。
這樣你就可以以某種方式離開你的應用程序(而不是四處傳遞連接)並仍然正確地使用資源。
不幸的是,第一類ConnectionPools在獨立應用程序中並不是很容易使用(它們是應用程序服務器中的默認設置)可能是一個微容器(如Sping)或一個好的框架(如Hibernate)可以讓你使用它。
盡管如此,從頭開始編寫代碼並不難。
:)
此谷歌搜索將幫助您找到有關如何使用它的更多信息。
快速瀏覽
許多JDBC驅動程序會為您執行連接池,因此在這種情況下執行其他池的優勢很小。 我建議你查看JDBC驅動程序的文檔。
連接池的另一種方法是
否則,我建議使用連接池。
如果您的應用程序是單線程的,或者從單個線程執行所有數據庫操作,則可以使用單個連接。 假設您出於任何其他原因不需要多個連接,這將是迄今為止最簡單的實現。
根據您的驅動程序,在線程之間共享連接也是可行的 - 如果您相信您的驅動程序不要對其線程安全性撒謊,這也可以。 有關詳細信息,請參閱驅動程序文檔
通常,“連接”下面的對象不能安全地從多個線程中使用,因此通常不建議在線程之間共享ResultSet,Statement對象等 - 到目前為止,最好的策略是在創建它們的同一線程中使用它們; 這通常很容易,因為這些物體一般不會保存太久。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.