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 脚本?

无法以新用户身份连接到 HyperSQL / HSQLDB 数据库

连接到 IDE 中现有的 hsqldb 实例

连接到 Play 应用程序中嵌入的 HSQLDB 数据库

无法从 NodeMCU 板连接到 Wi-Fi 网络

Wi-fi无法连接到Android Studio模拟器