有没有办法在没有JRuby的情况下从Ruby连接到H2数据库?

时间:2011-03-31 11:57:06

标签: ruby database-connection jruby watir h2

我正在使用ruby 1.8.7和WATiR测试Web应用程序,我想尽可能轻松地连接到H2数据库,我只能找到有关JDBC访问的信息。如果有一种方法可以使用JRuby从Ruby中做到这一点,但是我需要主要使用Ruby,因为我的WATiR代码是用它编写的,并且希望保持这样。

我将考虑所有可能的解决方案,但我正在寻找一些简单性,因为我的数据库知识有限,我需要从Ruby / WATiR访问数据库(读取和写入)以测试Web前面显示的内容端。

编辑:我删除了一些无知,现在我知道JDBC是用于数据库访问的Java API,所以我现在正在寻找连接到H2数据库的任何方法,以便我的Ruby / WATiR脚本可以访问它。

背景: 我对DBI和Sequel宝石有一些经验,我安装了Rails(所以我可以开始主要使用ActiveRecord),但愿意学习新东西来解决这个问题。

让我们假设我不是一个优秀的Java编码器。我以前从未考虑过使用JRuby,所以我并不完全熟悉它是如何工作的。

解决方案 我最终让两人互相交谈,主要得益于Thomas Mueller的回答。我安装了PostgreSQL ODBC驱动程序,使Sequel工作并使用ODBC连接。使用Sequel的PG适配器连接到H2 PG服务器会导致一些我仍在处理的语法错误。我还没有尝试过DBI连接,但我会因为它可以让我在需要时更好地控制语法。非常感谢Jeremy Evans帮助解决activerecord-jdbc-adapter和Sequel(我的红宝石路径中的pesky pg.rb文件)之间的冲突,以及管理Sequel。这不是一个答案,所以我可以赞扬那些回答的人,同时向与我情况相同的人提供反馈。

我已经安装了pg(不是ruby-pg),续集,dbi,dbd-odbc(加上手动文件修复,你可以向我询问详细信息),hoe和UNinstalled activerecord-jdbc-adapter。

3 个答案:

答案 0 :(得分:3)

H2 can act as a PostgreSQL server and supports the PostgreSQL ODBC driver

所以理论上你应该可以使用ruby-pg。但是我自己从未尝试过,我猜它有效的可能性大约为50%。所以答案是:也许吧。但首选的解决方案是使用JRuby。

如果WATiR是用Ruby编写的...... then WATiR should also work in JRuby

答案 1 :(得分:2)

没有名为 jdbc database 的东西,只要数据库提供了ruby连接器,就可以使用ruby访问任何数据库。

答案 2 :(得分:2)

恕我直言,你最好的两个选择是DBI或Sequel宝石。

DBI gem可用于通过ODBC连接到db。如果H2具有Thomas指示支持ODBC的能力,那么您应该能够使用DBI连接并查询db(当然包括'update'查询以设置给定的测试数据等)。

有关详细信息,请参阅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 gem可能会更好。 Sequel使您无需编写大量实际的SQL类型代码,甚至无法深入理解SQL查询,并且可以使用方法,符号和一些字符串来执行所有ruby样式。如果您正在进行大量的数据库交互,我可以看到它明显优越,特别是在能够创建更多纯OOP代码方面。有关更多详细信息,请参阅Sequel作者在2009年Ruby会议上的this presentation

在我的情况下,DBI对我所需要的“足够好”,因为我对SQL非常熟悉,并且除了在这里和那里发出一些命令做db-level bit-twiddling之外不需要做太多其他事情创造适当的测试条件。 OTOH如果我不得不对db作为测试oracle进行大量查询,并将其与UI中显示的数据进行比较,我可以看到使用Sequel会让我的生活变得更轻松。