1

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

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

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

背景:我有一些使用 DBI 和 Sequel gems 的经验,并且我安装了 Rails(所以我可以开始玩 ActiveRecord,主要是),但愿意学习新事物来解决这个问题。

假设我不是一个出色的 Java 编码器。我以前也从未考虑过使用 JRuby,所以我并不完全熟悉它的工作原理。

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

我已经安装了 pg(不是 ruby​​-pg)、sequel、dbi、dbd-odbc(加上一个手动文件修复,你可以向我询问详细信息)、锄头和卸载的 activerecord-jdbc-adapter。

4

3 回答 3

3

H2 可以充当 PostgreSQL 服务器并支持 PostgreSQL ODBC 驱动程序

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

如果 WATiR 是用 Ruby 编写的……那么 WATiR 也应该在 JRuby 中工作吗?

于 2011-03-31T12:24:58.240 回答
2

恕我直言,您的两个最佳选择是 DBI 或 Sequel gems。

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

有关更多信息,请参阅 ruby​​forge DBI 页面。DBI 已经存在了一段时间,因此很容易找到有关如何使用它的在线教程等。它的级别相当低,您需要了解 SQL 或您的 DB 的语言,以便与它进行良好的交互。

另一种选择是 SEQUEL gem,它可以选择通过 ODBC 或 JDBC 进行连接(JDBC 有一个 H2 子适配器)。此 Gem 较新,并提供了一些优于 DBI 的特定优势。请参阅此链接到 Sequel 的 rdoc 文件的Opening_Databases部分,其中讨论了一些关于使用 JDBC 连接到数据库的内容。我想哪个更容易取决于为 H2 设置 ODBC 的难度与您必须学习多少 Java 才能让 JDBC 为您工作。(如果是我,我会先选择 ODBC,因为我对 Java 知之甚少)

我自己,到目前为止我一直在使用 DBI(通过 ODBC 连接到 MS SQL),但我不得不承认想知道使用 Sequel gem 是否会更好。Sequel 使您免于编写大量实际的 SQL 类型代码,甚至不必深入理解 SQL 查询,并允许您使用方法、符号和一些字符串来完成所有 ruby​​ 风格的事情。如果您正在进行大量的数据库交互,我可以看到它明显优越的地方,特别是在能够创建更多纯 OOP 代码方面。有关更多详细信息,请参阅Sequel 作者在 2009 年 Ruby 会议上的演示文稿。

在我的情况下,DBI 对于我需要的东西来说已经“足够好”了,因为我对 SQL 非常熟悉,除了在这里和那里发出一些命令来做 db-level bit-twiddling 来创建正确的测试条件。OTOH,如果我不得不对 db 作为测试 oracle 进行大量查询并将其与 UI 中显示的数据进行比较,我可以看到使用 Sequel 可以让我的生活变得更轻松。

于 2011-03-31T17:12:31.093 回答
2

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

于 2011-03-31T12:00:22.153 回答