Hibernate 无法连接到 HSQLDB File-Based DB,挂起
Posted
技术标签:
【中文标题】Hibernate 无法连接到 HSQLDB File-Based DB,挂起【英文标题】:Hibernate cannot connect to HSQLDB File-Based DB, hangs 【发布时间】:2011-06-10 23:38:20 【问题描述】:我正在使用 Hibernate 和 HSQL DB。我有一个名为“testdb”的基于文件的 HSQL 数据库。
当我尝试连接到我的 HSQL 文件字符串 URL 时,我的应用程序挂起。
它在这个 Hibernate 输出之后挂起:
INFO: using driver: org.hsqldb.jdbcDriver at URL: jdbc:hsqldb:file:testdb
INFO: connection properties: user=SA, password=****
请注意,该问题不会发生在 In-Memory HSQL 中。如果 URL 是 "jdbc:hsqldb:mem:testdb" 一切正常。所以这是一个文件设置问题。
我在 Hibernate 中验证了 DB 存在,HSQL 文件存在,我的表在那里并且可以浏览它们。
事实上,即使我在 File: 中指定了一个不存在的文件,它仍然会挂起。我究竟做错了什么?谢谢
我的hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:file:testdb</property>
<property name="connection.username">SA</property>
<property name="connection.password"></property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">2</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
</session-factory>
</hibernate-configuration>
【问题讨论】:
你说“我在 Hibernate 中验证了数据库存在,HSQL 文件存在,......”如果它挂起,你是怎么做的?请注意,您不能同时从两个进程访问“文件:”数据库。查看第一次连接时是否创建了 .lck 文件。否则可能存在文件权限问题。 谢谢。文件夹中有 .lck 文件,但我删除了它们。运行应用程序后,我看不到任何 .lck 文件(只有 .log、.properties 和 .script),但在尝试连接到文件 DB 时应用程序仍然挂起。此外,它还通过 JDBC 挂起。 【参考方案1】:当第一次连接尝试尝试打开数据库时,它会创建一个 .lck 文件。此文件包含定期更新的时间戳,并防止其他进程同时连接到数据库。如果没有连接其他数据库,它不会阻止连接。因此,您无需删除 .lck 文件。
如果在连接尝试期间未创建 .lck 文件,则表明尚未建立连接。文件访问权限可能存在问题。
您始终可以通过与 GUI DatabaseManager 连接来检查数据库本身。
【讨论】:
【参考方案2】:数据库表很大,获取数据库对象需要时间。
【讨论】:
以上是关于Hibernate 无法连接到 HSQLDB File-Based DB,挂起的主要内容,如果未能解决你的问题,请参考以下文章
HSQLDB 无法使用 android 连接到 db 脚本?