2011-03-31 71 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

相关问题