2011-02-23 24 views
0

我有一個類的項目,要求如果使用數據庫,則存在用於選擇要使用的數據庫的選項,該數據庫可以是不同的類型。所以雖然我可以使用例如用於開發的MySQL,在項目的最終版本中,用戶必須能夠在安裝時選擇數據庫(Oracle,MySQL,SQLite等)。如果有簡單的方法,最簡單的方法是什麼?開發可以使用多種類型數據庫的應用程序的最簡單方法?

只要部門的Linux機器支持,我使用的語言就可以使用,因此它可以是Java,PHP,Perl等。我一直在研究和發現有關ODBC,JDBC和SQLJ的信息(例如this),但我對數據庫相當陌生,所以我很難確定哪些方法最適合我的需求。也有可能沒有足夠簡單的方法來做到這一點;教授承認他不是一個數據庫傢伙,他似乎認爲如果沒有清楚的想法會很容易就會很容易。

這是一個web應用程序,但它應該是相當直接的,例如在客戶端使用HTML和Javascript,在服務器端使用帶有MySQL數據庫的Java。沒有提到框架,所以我認爲它們太多了。如有必要,我可以選擇使用Tomcat或Apache,但總體思路是保持簡單,所有使用的應用程序都應該能夠在用戶級訪問權限下進行安裝/更改/配置。因此,像我不得不重新編譯PHP來使用ODBC的東西,我想。

在這些限制內,什麼是最好的方式(如果有的話)能夠與任意數據庫進行交互?

回答

1

我認爲你在這裏會遇到的問題是SQL不是真正的標準。我的意思是說,供應商(Oracle,MySQL等)已經包含了非SQL標準的類型和功能,以便將您「綁定」到他們的數據庫,比如Oracle的VARCHAR2等等。

當我上大學時,我的最後一年的項目是創建一個應用程序,允許用戶使用帶有Java前端的JDBC創建關係數據庫。

JDBC的使用非常簡單,但問題是要找到足夠的所有供應商都有的SQL特性/類型。所以他們可以在他們之間切換而沒有任何問題一種方法是實現模塊來處理供應商特定的問題,並編寫在它們之間進行翻譯的方法。因此,例如,您可以爲MySQL開發一個數據庫,其中包含許多MySQL特定的代碼,但是您可能需要使用Oracle,然後出現需要解決的問題。

我會花一些時間看看所有供應商實現的核心SQL標準,然後編寫這些功能的代碼。但我認爲你使用的技術不是問題,而是你創建的SQL。

希望這會有所幫助,如果它沒有幫助,道歉!

+0

我一定會記住這一點。我假設用於相當基本的數據檢索/存儲,例如這個項目使用它不會是一個問題,但也許不是?你能推薦使用任意數據庫使用JDBC的任何資源嗎?我一直在尋找,但還沒有找到任何不需要重新編譯來指定任意數據庫的例子。 – Maltiriel 2011-02-23 20:13:28

+0

@Maltiriel - 自從我做這件事以來已經很長時間了,但我還記得關於數據庫的問題,這個鏈接(http://oreilly.com/catalog/javadata/chapter/ch04.html)的類型東西你在找什麼?此外,我的大部分問題都是由於我讓用戶拖放(如Access)並自行生成SQL代碼以在任何其他可選數據庫上運行而造成的。我猜你沒有從你的程序中生成任何SQL代碼? – 2011-02-23 20:18:57

+0

是的,就是這樣。非常感謝!在這一點上,我還沒有足夠的知道數據庫訪問的具體工作方式。我仍然只是計劃使用什麼技術。唯一的問題是能夠使用任意數據庫,所以這就是我想要首先解決的問題... – Maltiriel 2011-02-23 20:31:57

1

好了,你可以去兩種方法(在Java中):

  1. 您可以開發自己的班級,不同的數據庫工作,並加載JDBC他們的司機。這樣你將爲自己創建一個數據訪問層,這需要一些時間。

  2. 您可以使用Hibernate(或其他ORM)。通過這種方式,Hibernate會爲你處理事情,你只需要知道如何使用Hibernate。學習Hibernate可能需要一些時間,但是當你習慣它時,它可能對你將來的項目非常有用。

+0

你能解釋爲什麼我需要不同的類來處理不同的數據庫嗎?它是非標準的SQL問題還是別的? – Maltiriel 2011-02-23 20:34:21

+0

這是界面。每個RDBMS在JDBC中都有一個特殊的數據庫驅動程序。如果你嘗試做一些整潔的事情,那麼你需要不同的課程,例如對於Oracle,MySQL等等。否則,如果你嘗試在同一個類中選擇不同的RDBMS,那麼你最終會陷入噩夢! – 2011-02-23 22:41:22

+0

我並不完全明白你的意思......這將是一個非常簡單的應用程序,所以數據庫查詢也會非常簡單。僅在利用各種數據庫的獨特功能時才需要單獨的類? – Maltiriel 2011-02-23 23:03:54

0

有很多對象關係數據庫框架,除非你更喜歡jdbc。對於簡單/小型應用程序,這應該工作正常。

1

如果你想在Java中存在Hibernate(這不需要框架)。 Hibernate很容易使用。您編寫HQL,將其轉換爲您正在使用的數據庫所需的SQL。

1

也許使用object relational mapper(ORM)或database abstraction layer(DAL)。它們旨在爲多個數據庫後端提供標準API,使您可以在不同的後端之間進行切換,而只需對代碼進行最小限度的更改或不進行任何更改。例如,在Python中,流行的ORM是SQLAlchemy,優秀的DAL是web2py DAL(它是web2py framework的一部分,但也可用作框架外部的獨立DAL)。其他語言中還有許多其他選項。

相關問題