Hsqldb驱动程序随机为空

Posted

技术标签:

【中文标题】Hsqldb驱动程序随机为空【英文标题】:Hsqldb driver being randomly null 【发布时间】:2012-12-11 17:40:13 【问题描述】:

我正在编写一个需要 servlet-> 数据库连接的项目。我正在与另一个使用 HyperSQL (hsqldb) 设计数据库的人合作,我现在正尝试通过将他的代码添加到我的代码中来将我的项目与他的项目合并。

但我的问题更进一步。当我复制代码时,它通常可以工作。我几乎没有使用数据库中的数据并将它们与用户输入进行比较的方法。

在尝试连接数据库时,我会随机成功或失败,出现以下错误;

Unable to acquire a connection from driver [null]

我当然会初始化一个驱动程序; Class.forName("org.hsqldb.jdbcDriver").newInstance();

现在,在运行我的方法时,有时会成功,有时会失败,这是数据库的 XML 文件;

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
Creates both the HyperSQL databases using hibernate. No password or username is set.
-->
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="monsters" transaction-type="RESOURCE_LOCAL">
    <class>databaseManagement.Monster</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
      <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
      <property name="hibernate.connection.username" value=""/>
      <property name="hibernate.connection.password" value=""/>
      <property name="hibernate.connection.url" value="jdbc:hsqldb:monsters"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>
  <persistence-unit name="users" transaction-type="RESOURCE_LOCAL">
    <class>databaseManagement.User</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
      <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
      <property name="hibernate.connection.username" value=""/>
      <property name="hibernate.connection.password" value=""/>
      <property name="hibernate.connection.url" value="jdbc:hsqldb:users"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>
</persistence>

【问题讨论】:

【参考方案1】:

可能试图在只读目录中打开数据库。

    您需要为两个持久性单元指定用户名。默认用户名是“SA”。

    您在 URL 中指定的数据库的文件路径是相对的。它解析为执行目录。在开发 Web 应用程序时,您需要指定一个可写入的目录。

这样做的一种方法是在路径中包含一个变量,例如“jdbc:hsqldb:file:$directorypath/monsters”,其中目录路径是 Web 应用程序数据目录的名称,如您在web.xml 文件。

【讨论】:

密码和用户名故意留空 - 我可以补充说原来的应用程序工作得很好。它也可以保存到本地。

以上是关于Hsqldb驱动程序随机为空的主要内容,如果未能解决你的问题,请参考以下文章

SimpleJdbcInsert 插入失败,因为自动生成的 id 为空 (HSQLDB)

在 hsqldb 中禁用主机名验证

SimpleJdbcInsert由于自动生成的ID(HSQLDB)为空而无法插入

JRuby 和 HSQLDB:随机丢失的行

RazorSQL 导致 HSQLDB 抛出 org.hsqldb.HsqlException:需要大于 '2.1.0.0' 的客户端驱动程序版本。 HSQLDB 服务器版本是 '2.3.4'

无法为连接 URL“jdbc:hsqldb:db/database”创建类“org.hsqldb.jdbcDriver”的 JDBC 驱动程序