2008-11-17 73 views
7

我正在編寫一個應用程序,該應用程序必須可根據客戶端異想天開配置爲連接到Oracle,SQL Server和MySQL。使用JDBC連接到不同數據庫的模式

到目前爲止,我一直在計劃使用JDBC-ODBC橋接,並且只是使用不同的連接字符串連接到數據庫。

我被告知這不是非常有效。

  1. 是否有連接到多個數據庫系統的模式或最佳實踐?或者選擇使用哪個驅動程序?

  2. 我應該配置它嗎?但包括所有三個驅動程序或建立三個獨立的客戶?

我沒有做任何複雜的事情,只是從事件流中抽取(插入)數據到數據庫中。

回答

7

我建議你讓它可配置幷包含三個驅動程序。你可以使用這樣的模式:創建一個超類(讓我們稱之爲DAO),它提供了連接到數據庫的功能。這可能是抽象的。

爲每個想要連接的數據庫類型創建一個具體子類。所以你最終可能會得到MySQLDAO,MSSQLDAO和OracleDAO。每個人將加載相應的驅動程序並使用其各自的連接字符串。

用方法getDAO(DB)創建另一個類(讓它稱爲DAOFactory),該方法將根據DB的值創建DAO的實例。

因此,例如(在僞代碼):

if(DB.equals("MySQL")){ 
    DAO = new MySQLDAO(); 
} 
return DAO; 

所以需要連接到數據庫將調用DAOFactory並要求DAO實例的任何代碼。您可以將DB值存儲在外部文件(如屬性文件)中,以便您不必修改代碼即可更改數據庫類型。

這樣你的代碼就不需要知道它連接的數據庫類型,如果你以後決定支持第四種類型的數據庫,你將不得不增加一個類並修改DAOFactory,而不是其他的類型的代碼。

2

如果您需要任何複雜的東西,Hibernate是一個不錯的選擇。否則,我會做的是將你的連接細節存儲在一個屬性文件(或其他形式的配置) - 即:驅動程序類名,JDBC URL,用戶名和密碼。

然後,您只需從屬性文件中加載連接詳細信息,並在您的類路徑中包含正確的JAR文件即可。

如果您希望它更容易配置,但您可以使用像Commons-DBCP這樣的庫,但除此之外它只是您需要執行的操作(當然,前提是您的SQL語句適用於每個數據庫)。

1

看看Datasource。這是獲得數據庫連接的首選機制。

IMO爲管理員提供了選擇數據庫,連接池和交易策略的最大靈活性。

如果您使用的是tomcat,那麼請參閱​​瞭解如何使用tomcat的JNDI註冊數據源。

如果您使用Spring,那麼您可以使用jee:jndi-lookup獲取數據源。

如果您使用的是Spring,但不想使用JNDI,請參閱DriverManagerDataSource,以獲取有關如何獲取池化數據源(DBCP或C3P0)的討論。

+0

您爲數據源提供的鏈接提供了404! – 2014-07-09 12:51:04

2

如果您非常小心(並且測試過),那麼您可以直接使用JDBC來完成此操作,只需更改驅動程序類和連接信息即可。你一定想遠離JDBC-ODBC橋,因爲它通常很慢且不可靠。這個橋樑在dbs上的表現與JDBC相比更有可能不同。

我認爲如果您的要求與列出的一樣簡單,DAO路徑是過度殺傷性的。

如果您正在進行大量插入操作,則可能需要調查預準備語句和批處理更新,因爲它們效率更高。這可能會導致移植性下降 - 很難說沒有測試。

相關問題