2013-10-12 181 views
0

我創建了一個JDBC驅動程序的實現,它反過來管理到兩個DB(例如,postgres和mysql)的連接。對於所有的JDBC操作,這些連接都是基於特定的邏輯請求進行維護的。我的問題是處理兩個JDBC驅動程序的通用JDBC驅動程序

  1. 這是一個很好的方法嗎?如果沒有人可以給一些指針
  2. 內存管理將是這樣的實現問題?

回答

3

1)通常這種事情是由DAO(數據訪問對象,一個管理持久性的層)管理的。使它成爲一個JDBC驅動程序只是迫使你遵循一些使代碼更難編寫的限制(我理解你的驅動程序不會很可重用)。

2)取決於你編碼的程度。沒有更多的細節,很難說,但沒有理由爲什麼你必須有內存管理問題。

+0

有時,當我運行多個查詢我得到虛擬內存錯誤。我需要做一些記憶檢查嗎? –

+1

@on_the_shores_of_linux_sea - 這可能不是你的錯。 mysql jdbc驅動程序默認讀取所有行到內存中(這是荒謬的默認行爲)。 – jtahlborn

2

我不認爲這是一個好方法。

最根本的問題是,不同的數據庫後端具有難以用統一的JDBC驅動程序「翻錄」的差異。最明顯的問題是SQL的不同方言之間存在顯着差異......包括支持的數據類型的差異。隱藏這些差異是很困難的(不可能),就是您的應用程序級代碼使用的是正常使用的JDBC API。

有兩種方法可以更好地工作(IMO)。

  • 典型的對象關係映射(如hibernate)將爲多個數據庫後端提供處理差異的適配器。他們通過以更抽象的方式表達查詢並在後臺將查詢轉化爲特定於數據庫的SQL來實現這一點。

  • 特定於您的應用程序的數據庫適配器代碼中處理數據庫特定方面。這需要建立自己的框架來生成或模板化查詢以處理方言差異。然後,您使用現有的數據庫特定的JDBC驅動程序,將正確的SQL傳遞給它們。


FWIW - 我不明白爲什麼內存管理是你的建議特定的問題。

+0

謝謝。你知道任何解釋休眠jdbc例子的網站嗎?我是一個C++開發人員,在java中幾乎沒有任何exp。兩種方法哪一個容易實現? :-) –

+0

你誤會了。您使用Hibernate *而不是* JDBC。 –