2010-04-08 45 views
5

一個簡單的問題:在Java/JDBC中訪問數據庫的更有效方法是什麼? 我是一個web開發人員,我想寫一些可重用和可擴展的代碼。
對我來說有趣的是使用ResultSupport這樣的工具:它在資源使用方面是否過於膨脹?
你能提出什麼建議?訪問數據庫的Java高效策略

回答

5

不僅僅是JDBC具體,只是一般的SQL東西

  1. 如果您必須重新運行一個查詢多次,利用PreparedStatement。如果可用,請使用存儲過程。 YMMV顯然不便攜。

  2. 如果您不使用它,請始終關閉您的ResultSet或Statement。關閉語句將自動關閉與該語句關聯的所有ResultSet。關閉ResultSet仍然是一個好習慣。

  3. 嘗試限制可查詢的內容,例如:從XXX和YYY之間的order_date訂單中選擇*。在MySQL中,查詢可能是全表掃描或「範圍」,具體取決於返回的數據量。因此,決定如何'靈活'你想要你的查詢

  4. 如果你正在使用MySQL,請使用解釋來優化您的查詢。如果您使用的是JPA,那麼您不會看到生成的SQL。 (這不完全是JDBC)您可能希望在ORM管理器上啓用日誌記錄以顯示使用的SQL語句。然後使用解釋來優化。如果ORM生成真正複雜的查詢,則可能需要使用@NamedNativeQuery

  5. 如果您的JDBC驅動程序支持批量更新,請使用它。 PreparedStatement和ResultSet支持批量更新。

  6. 您也可以控制提交。如果您正在執行大量更新,請將其關閉。你自己調用commit()。

-1

我認爲最簡單和最常用的方法是使用Spring及其JDBCTemplate

最好的方法可能取決於你用來創建你的網絡應用程序的堆棧。如果你重新開始,那麼Spring是一個很好的選擇。

+0

而對於可伸縮性,使用從JNDI查找的池數據源。 – gustafc 2010-04-08 17:15:21

0

使用總是連接池數據源如c3p0是非常重要的。

0

有一個將java對象映射到mysql數據庫的項目。 Azirt.

1

對這個簡單問題的最佳答案是:「它取決於」。

有許多API可用於數據庫訪問。幾乎所有人都將使用JDBC API作爲與數據庫通信的手段。所以從理論上講,沒有什麼能打敗原始的低級JDBC(就像機器代碼在理論上總是比高級編程語言一樣快)。

但是,正如你也喜歡寫可重用的代碼,我建議你看看JPA。它是關於對象持久化到關係數據庫的Java標準。它的性能非常好,而且非常便攜。

由於JPA只是一個規範,您可以選擇自己的實現:HibernateOpenJPA或任何兼容的Java EE服務器。