2010-07-26 81 views
2

通常的建議是在不再需要JDBC資源時關閉它。這可以在一個捕獲和最後完成。但是,如果一個DAO方法只能操縱一個域對象,並且一個操作需要一次性檢索/創建這些操作,那該怎麼辦呢?要獲得一個聲明,然後重複關閉它會成爲性能問題?如果是這樣,是否應該採取單獨的方法一次處理多個對象或者應該以某種方式延遲關閉?Dao方法,操作單個/多個對象並關閉資源

回答

1

你可以在DAO層的頂部添加額外的事務層,並在交易/會話的開始Connection打電話setAutoCommit(false),讓DAO方法使用相同的Connection實例,然後commit()Connection當交易/會話完成/關閉。但是,您需要更改DAO方法以將Connection作爲額外參數,或者將其存儲爲ThreadLocal(但由於可能會彙集線程,因此需要非常仔細地進行此操作)。

只要您始終使用通常在DB端編譯和緩存的PreparedStatement,創建語句不應該太昂貴。

1

我認爲,如果應用程序是Dao的基礎,這將是沒有區別的。這些資源應該關閉。如果你的工作沒有任何框架(彈簧,休眠等)

java.sql.Connection應該放回池中,如果有一個池。 執行查詢後應關閉ResultSet和Statement對象。

取決於您的架構,這些資源管理代碼可以放在Dao類或其他類中。例如有一些專注於構建和執行SQL查詢的類。資源管理代碼可以在這些類中。

如果您使用某些框架,框架通常會爲您執行資源管理。