嵌入式 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 的有趣之处的主要内容,如果未能解决你的问题,请参考以下文章