簡體   English   中英

有沒有永遠不關閉JDBC連接的原因嗎?

[英]Is there a reason for never closing a JDBC connection?

我正在從上一個在系統上工作的開發人員那里讀取代碼,他從未關閉與數據庫的任何連接。 他僅關閉PreparedStatementResultSet連接,但不關閉Connection。

系統不使用連接池。

有什么理由不關閉所有內容( ConnectionPreparedStatementResultSet )嗎?

沒有充分的理由,這將導致應用程序非常脆弱。 如果存在網絡問題或數據庫在短時間內沒有響應,則數據庫連接很容易過時,並且依靠單個現有連接,沒有重新啟動應用程序就無法恢復。

還有其他壞處。 例如,通常會同步連接,因此,如果以此方式構建具有多個並發用戶的Web應用程序,則會限制應用程序的並發性。 但是,您的應用程序無法從瞬態問題中恢復就足以使它值得解決。

他可能使用相同的連接來執行所有SQL處理。 這不是一個壞技術。 但是,如果他沒有編寫干凈關閉的代碼,那么可能很難知道何時關閉唯一的連接。

因此,我敢打賭,這段代碼的基本原理是讓進程終止,套接字最終終止,然后讓遠程數據庫最終清除連接。 可以嗎,是的。 是的,很討厭,很容易出現問題的地方,是的。

解決此問題的方法是找到您的主循環。 一直在運行的那個。 然后,您需要通過將關閉邏輯放在主處理循環之后來控制關閉。 最后,您需要System.exit(...)所有System.exit(...)調用的代碼。

我假設由於您提到的代碼是繼承的,因此它是Java 1.6或更低版本。 在1.7及更高版本中,您可以在try with resources語言的try with resources隱式關閉一個Closeable

Connection文檔指出它擴展了AutoCloseable. AutoCloseable文檔指出,當類是“不再需要時必須關閉的資源”時,該類將對其進行擴展 它提供了Close方法,您的朋友應該使用它。

ResultSet還擴展了AutoCloseable ,但PreparedStatement卻沒有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM