嵌入式 hsql 的有趣之处

Posted

技术标签:

【中文标题】嵌入式 hsql 的有趣之处【英文标题】:something funny with embedded hsql 【发布时间】:2009-11-12 17:14:50 【问题描述】:

我只是对某事感到好奇。我在我的项目中使用 hsql(当然是嵌入的)。有时我觉得需要可视化 hibernate 生成的内容。我免费获取了 dbvisualizer 副本。这是 hsqljdbc.properties

jdbc.url=jdbc:hsqldb:file:mydb;create=true 休眠 hbm2ddl.auto=create

我下载了 hsql 1.8.0_10。我做了所有必需的程序。我可以连接并查看表格,但之后对表格所做的更改似乎不愿意显示出来。然后我尝试删除数据库生成一个新的但仍然存在。你得到了有什么想法吗?

我通常是 Derby,但最近我意识到关系管理并不那么精确。我目前使用 mysql,这对开发不利,所以我想知道我是否忘记做某事,或者它只是为了表现那样。感谢您阅读本文

【问题讨论】:

我对 JBoss 5.0 服务器中的嵌入式 HSQLDB 有相同的行为。 EJB3 在没有任何错误的情况下工作,但数据库总是空的。现在改用 Derby,效果很好。 mmmh man.unique on field 对我来说似乎在 Derby 中不起作用。这就是我将它切换到 hsql 的原因之一。除了它的语法就像 mysql one 那么...我的回答对你有用吗?考虑提供反馈,我应该如何知道我是否需要改进我的答案。或者,如果您自己找到了可行的解决方案,请发布 抱歉回复晚了。我从一开始就一直在使用 show_sql=true 但是你知道通过所有的读数尤其是当你承受压力时有点乏味。它有助于有一个视觉在通过阅读 hibernate 语句深入研究之前检查明显的错误或问题。至少这是我相信的,或者我应该说什么对我有用。谢谢你的回答 【参考方案1】:

在新指南中详细讨论了使用 HSQLDB 进行开发和测试。

http://hsqldb.org/doc/2.0/guide/deployment-chapt.html#dec_app_dev_testing

HSQLDB 默认使用写入延迟机制,在 1.8.x 版本中 10 秒或 2.0 及更高版本中 0.5 秒后将更改刷新到磁盘。

您可以使用此 URL 强制关闭数据库并在最后一个连接关闭时写入所有更改:

jdbc.url=jdbc:hsqldb:file:mydb;shutdown=true

使用 HSQLDB 2.x,您可以使用 write_delay 属性强制每个提交立即写入磁盘:

jdbc.url=jdbc:hsqldb:file:mydb;hsqldb.write_delay=false

版本 2.2.9 及更高版本会在关闭最后一个连接时保留最新更改,因此可能不需要使用 hsqldb.write_delay=false 进行关闭连接的测试。

使用 HSQLDB 1.8,您需要在开始时运行 SQL 命令来执行此操作:

设置 WRITE_DELAY 为假

【讨论】:

感谢伙计,现在一切都说得通了。下次我将使用 2.0 版本,看看效果如何 目前最新版本为2.2.9。总是尝试最新的。 有谁知道设置写入延迟是否对MEMORY TABLES 有任何影响?还是只为CACHED 写入延迟用于将更改写入 .log 文件,适用于 MEMORY 和 CACHED 表。【参考方案2】:

默认情况下,HSQLDB 将表内容保存在内存中,直到数据库关闭:http://www.hsqldb.org/doc/guide/ch05.html#N10DD6

根据您的需要(例如,在开发环境中工作),这可能就足够了。然而,对于生产,我宁愿使用一个 DBMS,它将每个更改写入多个位置的磁盘(这对我来说是指 Oracle,尽管 MySQL 可能也可以工作)。

【讨论】:

【参考方案3】:

如果您想查看 hibernate 的作用,为什么不直接将 show_sql 属性设置为 true?

【讨论】:

以上是关于嵌入式 hsql 的有趣之处的主要内容,如果未能解决你的问题,请参考以下文章

如何将 HSQL DB Manager 连接到嵌入式数据库

在内存数据库中嵌入 HSQL 的 Spring DataSource 和 Linux 上的休眠创建-删除排序

HSQL - 识别打开连接的数量

HSQL 访问被拒绝加载文件

将 Liferay 数据库迁移到 HSQL

如何在应用程序外部连接/查询 HSQL 数据库?