【问题标题】:Is there a way to connect to a H2 database from Ruby without JRuby?有没有办法在没有 JRuby 的情况下从 Ruby 连接到 H2 数据库?
【发布时间】:2011-03-31 11:57:05
【问题描述】:

我正在使用 ruby​​ 1.8.7 和 WATiR 测试一个 Web 应用程序,我想尽可能轻松地连接到 H2 数据库,我只能找到有关 JDBC 访问的信息。如果有一种方法可以使用 JRuby 从 Ruby 中执行此操作,那没关系,但我需要使用 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。

【问题讨论】:

  • 感谢您对解决方案的跟进和总结。这应该对与您处于相同情况的其他用户大有裨益。

标签: ruby database-connection jruby watir h2


【解决方案1】:

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?

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 啊哈,所以我应该问的问题是如何从 Ruby 连接到 H2 数据库。我的大脑谢谢你。
    • 我对H2不熟悉,但是看看这个链接:ruby-forum.com/topic/107819
    【解决方案3】:

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

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

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

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

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

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

    【讨论】:

    • 到目前为止,我一直在使用 DBI 来访问 MSSQL 的 ODBC。 Sequel 将是一个不错的补充,但我发现每次运行它时我都会得到“没有要加载的此类文件--java”(Sequel::AdapterNotFound)。这可能是由于我需要将一些晦涩的文件复制到某个目录或其他目录,但根据 TM 的建议,我将通过 PostgreSQL 使用 DBI 和 ODBC。如果我能让 ODBC 为 H2 工作,那么我所有的问题都结束了。我将更新我的发现。谢谢你的建议:)
    • 如果您使用的是 JRuby,则只能使用 Sequel 的 jdbc 适配器,这就是为什么您会收到“no such file to load -- java”错误。
    • @Jeremy 这是真的。 JDBC 和 Ruby 互不喜欢。我现在使用 Sequel 使用 ODBC 进行连接,它工作得很好。只是为了记录:)。
    • @kinofrost 很高兴听到我将您指向 Sequel gem 帮助您找到解决方案。
    • 在某种程度上,是的。我已经知道续集 gem,但我必须修复其中的一个错误才能使其正常工作。是 PostgreSQL ODBC 驱动程序拯救了我的皮肤,但如果我想拥有完整的连接功能,我仍然需要使用 JRuby。 Sequel 中的 PG 没有与 H2 对话,存在某种语法上的不协调。
    猜你喜欢
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2021-12-04
    • 2015-02-12
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多