2011-03-31 96 views
1

我正在用ruby 1.8.7和WATiR測試Web應用程序,我想盡可能輕鬆地連接到H2數據庫,我只能找到有關JDBC訪問的信息。如果有一種方法可以使用JRuby來從Ruby執行此操作,但是我需要使用Ruby,主要是因爲我的WATiR代碼已寫入其中,並且希望仍然如此。有沒有辦法從沒有JRuby的Ruby連接到H2數據庫?

所有可能的解決方案將被考慮,但我正在尋找一些簡單的,因爲我的數據庫知識是有限的,我需要從Ruby/WATiR訪問數據庫(讀取和寫入)以測試網絡上顯示的內容前端。

編輯:我刪除了一些無知,現在我知道JDBC是一個用於數據庫訪問的Java API,所以我現在正在尋找任何方式連接到H2數據庫,以便我的Ruby/WATiR腳本可以訪問它。

背景: 我有DBI和Sequel寶石一些經驗,我有安裝了Rails(這樣我就可以開始與ActiveRecord的發揮,主要是),但願意學習新的東西來解決這個問題。

讓我們假設我不是一個好的Java編碼器。我以前從未考慮過使用JRuby,所以我不完全熟悉它的工作原理。

解決方案 我最終得到了兩人互相交談,主要是由於托馬斯穆勒的回答如下。我安裝了PostgreSQL ODBC驅動程序,得到Sequel的工作並使用ODBC連接。使用Sequel的PG適配器連接到H2 PG服務器會導致一些我仍在處理的語法錯誤。我還沒有試過DBI連接,但是我會這樣做,因爲它可能會讓我更好地控制語法,如果我需要它。非常感謝Jeremy Evans的幫助解決了activerecord-jdbc-adapter和Sequel之間的衝突(在我的ruby路徑中討厭的pg.rb文件)以及管理Sequel。這並未列爲答案,所以我可以給那些回答同時給與我情況相同的人提供反饋的人。

我已經安裝了pg(不是ruby-pg),續集,dbi,dbd-odbc(加上手動修復文件,你可以問我一些細節),鋤頭,以及UN安裝的activerecord-jdbc-adapter。

+0

感謝您的解決方案的後續和結束。這應該對您和您處於相同情況的其他用戶有很大的好處。 – 2011-04-06 15:21:41

回答

2

有沒有這樣的事情叫做jdbc數據庫,只要數據庫提供了ruby連接器,就可以使用ruby訪問任何數據庫。

+0

啊哈,所以我應該問的問題是如何從Ruby連接到H2數據庫。我的大腦感謝你。 – kinofrost 2011-03-31 12:06:14

+0

我不熟悉H2,但看看這個鏈接:http://www.ruby-forum.com/topic/107819 – 2011-03-31 12:20:28

2

恕我直言,你的兩個最好的選擇是DBI或續集寶石。

DBI gem可用於通過ODBC連接到數據庫。如果H2具有托馬斯指出的支持ODBC的能力,那麼你應該能夠使用DBI連接並查詢數據庫(當然包括'更新'查詢來設置給定的測試數據等)。

查看rubyforge DBI Page瞭解更多信息。 DBI已經有一段時間了,所以很容易找到關於如何使用它的在線教程等。它的水平相當低,並且您需要了解SQL或DB的語言,才能與其良好交互。

另一種選擇是SEQUEL gem,它有一個通過ODBC或JDBC連接的選項(JDBC有一個H2子適配器)。這款Gem比較新,與DBI相比具有一些特殊的優勢。請參閱此鏈接,瞭解Sequel的rdoc文件的Opening_Databases部分,其中介紹了使用JDBC連接數據庫的一些細節。我猜想哪個更容易取決於ODBC設置H2的難度以及爲了讓JDBC爲您工作需要學習多少Java。 (如果是我的話,我會首先去找ODBC,因爲我知道Java很少)

我自己,我一直在使用DBI(通過ODBC連接到MS SQL),但是我不得不承認想知道如果使用Sequel寶石代替可能會更好。續集可以幫助您避免編寫大量實際的SQL類型代碼,甚至不必深入瞭解SQL查詢,並且可以在各處使用方法,符號和一些字符串來執行所有Ruby樣式。如果你正在做大量的db交互,我可以看到它明顯優於哪裏,尤其是在能夠創建更多純粹的OOP代碼方面。有關更多詳細信息,請參閱2009年Ruby會議上的Sequel作者的this presentation

在我的情況下,DBI對於我所需要的「足夠好」,因爲我非常適合使用SQL,並且除了在這裏和那裏執行db級別的位操作之外,徘徊創造適當的測試條件。 OTOH如果我不得不對數據庫做很多查詢作爲測試預言,並將其與UI中提供的數據進行比較,我可以看到使用Sequel會讓我的生活變得更容易。

+0

我一直在使用DBI來訪問一個用於MSSQL的ODBC到目前爲止。續集將是一個很好的補充,但我發現每次運行它我都會得到「沒有這樣的文件加載 - java」(Sequel :: AdapterNotFound)。這可能是由於我需要複製到某個目錄或其他目錄的一些不明確的文件,但是我會根據TM的建議通過PostgreSQL去DBI和ODBC。如果我可以讓ODBC爲H2工作,那麼我所有的問題都結束了。我會更新我的研究結果。感謝您的建議:) – kinofrost 2011-04-01 08:46:17

+2

如果您使用的是JRuby,那麼您只能使用Sequel的jdbc適配器,這就是爲什麼您會得到「無此類文件加載 - java」錯誤。 – 2011-04-01 17:51:24

+0

@Jeremy這是真的。 JDBC和Ruby不喜歡彼此。我現在已經使用Sequel連接使用ODBC,它工作得很好。只是爲了記錄:)。 – kinofrost 2011-04-04 10:44:04

相關問題