0

我正在将 Rails 应用程序移植到 JRuby 和 HSQLDB。我的目标是将数据库和站点嵌入到单个 JAR 文件中,以便在客户站点进行部署。我的站点在 JAR 中运行良好,但存在一些值得注意的问题。

当我使用非常普通的 ActiveRecord 模型执行以下操作时:

@total = SessionLog.count(:id)

我得到以下异常:

ActiveRecord::StatementInvalid (ActiveRecord::ActiveRecordError: 不在聚合函数或 group by 子句中: org.hsqldb.Expression@7be117eb 在语句 [SELECT count(session_logs.id) AS count_id FROM session_logs WHERE (created_at >= '2010-02- 06' AND created_at <= '2010-03-09' AND session_type = 'tunnel_client') ORDER BY id DESC ]:

SELECT count(session_logs.id) AS count_id FROM session_logs WHERE (created_at >= '2010-02-06' AND created_at <= '2010-03-09' AND session_type = 'tunnel_client') ORDER BY id DESC)

我似乎很清楚 COUNT 语句导致了 HSQLDB 中的问题,但我不确定解决这个问题的解决方案是什么。SQLite3 和 MySQL 都可以毫无问题地处理这个 SQL 语句。

我愿意使用除 HSQLDB 之外的其他数据库,但它需要嵌入到我们在 JVM 上的应用程序中。这就是 HSQLDB 的魅力所在。

4

2 回答 2

1

你可以试试H2 数据库 这样连接它。来自维基百科

数据库引擎由 Thomas Mueller 编写。他还开发了 Java 数据库引擎 Hypersonic SQL [1]。2001 年,Hypersonic SQL 停止了,并成立了 HSQLDB Group 继续研究 Hypersonic SQL 代码。H2 这个名字代表 Hypersonic 2,但是 H2 不与 Hypersonic SQL 或 HSQLDB 共享任何代码。H2 是从头开始构建的。

于 2010-03-09T09:28:25.250 回答
1

您可能在 ActiveRecord 适配器中发现了一个错误——activerecord-jdbchsqldb-adapter我想。

您可以尝试在某些非 ruby​​ SQL 会话中直接运行 SQL 吗?然后也许你可以看到哪里出了问题并提交一个错误或(更好)提交一个补丁。

于 2010-03-10T23:41:45.320 回答