0

私は、サーブレットからデータベースへの接続を必要とするプロジェクトの作成に携わっています。私は、HyperSQL (hsqldb) を使用してデータベースを設計した別の人物と共同作業を行っています。現在、彼のコードを私のプロジェクトに追加して、私のプロジェクトを彼のプロジェクトとマージしようとしています。

私の問題にさらに。コードをコピーすると、通常は機能します。データベースのデータを使用してユーザー入力と比較する方法はほとんどありません。

データベースに接続しようとすると、ランダムに成功または失敗し、次のエラーが発生します。

Unable to acquire a connection from driver [null]

もちろん、ドライバーを初期化します。 Class.forName("org.hsqldb.jdbcDriver").newInstance();

ここで、私のメソッドを実行すると、成功することも失敗することもあります。これが DB の 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>
4

1 に答える 1

0

読み取り専用ディレクトリでデータベースを開こうとした可能性があります。

  1. 両方の持続性ユニットのユーザー名を指定する必要があります。デフォルトのユーザー名は「SA」です。

  2. URL で指定するデータベースのファイル パスは相対パスです。実行ディレクトリに解決されます。Web アプリケーションを開発しているときは、書き込み可能なディレクトリを指定する必要があります。

これを行う 1 つの方法は、"jdbc:hsqldb:file:{$directorypath}/monsters" などのパスに変数を含めることです。ここで、directorypath は、web.xml で指定されている Web アプリケーションのデータ ディレクトリの名前です。ファイル。

于 2012-12-11T18:41:25.067 に答える