20

作成した DAO を単体テスト (JUnit) しようとしています。フレームワークとしてSpringを使用しています.DAO(JdbcPackageDAO)はSimpleJdbcDaoSupportを拡張しています。テスト クラス (JdbcPackageDAOTest) は、AbstractTransactionalDataSourceSpringContextTests を拡張します。次のように configLocations をオーバーライドしました。

protected String[] getConfigLocations(){
    return new String[] {"classpath:company/dc/test-context.xml"};
}

私の test-context.xml ファイルは次のように定義されています。

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="dataPackageDao" class="company.data.dao.JdbcPackageDAO">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:hsqldb:hsql://localhost"/>
        <property name="username" value="sa" />
        <property name="password" value="" />
    </bean>

    <bean id="propertyConfigurer" 
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>company/data/dao/jdbc.properties</value>
            </list>
        </property>
    </bean>

    <bean id="transactionManager" 
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
</beans>

バックエンドとして HSQL を使用しています。スタンドアロン モードで実行しています。私が選んだ IDE は eclipse です。クラスを JUnit テストとして実行すると、エラーが発生します (以下)。なぜそれが起こっているのか、私には手がかりがありません。hsql.jar は、Eclipse によるビルド パスにあります。

org.springframework.transaction.CannotCreateTransactionException: トランザクションの JDBC 接続を開けませんでした。ネストされた例外は java.sql.SQLException です: jdbc:hsqldb:hsql://localhost に適したドライバーが見つかりません
    org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:219) で
    org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:377) で
    org.springframework.test.AbstractTransactionalSpringContextTests.startNewTransaction(AbstractTransactionalSpringContextTests.java:387) で
    org.springframework.test.AbstractTransactionalSpringContextTests.onSetUp(AbstractTransactionalSpringContextTests.java:217) で
    org.springframework.test.AbstractSingleSpringContextTests.setUp(AbstractSingleSpringContextTests.java:101) で
    junit.framework.TestCase.runBare (TestCase.java:128) で
    org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java:76) で
    junit.framework.TestResult$1.protect(TestResult.java:106) で
    junit.framework.TestResult.runProtected (TestResult.java:124) で
    junit.framework.TestResult.run(TestResult.java:109) で
    junit.framework.TestCase.run(TestCase.java:120) で
    junit.framework.TestSuite.runTest(TestSuite.java:230) で
    junit.framework.TestSuite.run(TestSuite.java:225) で
    org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run (JUnit3TestReference.java:130) で
    org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) で
    org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:460) で
    org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:673) で
    org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:386) で
    org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:196) で
原因: java.sql.SQLException: jdbc:hsqldb:hsql://localhost に適したドライバーが見つかりません
    java.sql.DriverManager.getConnection で (不明なソース)
    java.sql.DriverManager.getConnection で (不明なソース)
    org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:291)で
    org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:277) で
    org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:259) で
    org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:241) で
    org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:182) で
    ... 18以上
4

15 に答える 15

30

HSQLDB 自体を登録するには、その jdbcDriver クラスにアクセスする必要があります。これは、このと同じ方法で実行できます。

Class.forName("org.hsqldb.jdbcDriver");

jdbcDriver クラスの静的初期化をトリガーします。これは次のとおりです。

static {
    try {
        DriverManager.registerDriver(new jdbcDriver());
    } catch (Exception e) {}
}
于 2010-02-14T18:03:40.623 に答える
11

「適切なドライバーがない」とは、通常、接続URLの構文が正しくないことを意味します。

于 2008-12-24T16:48:20.940 に答える
4

さて、ここに解決策があります。ほとんどの人は本当に良い点を指摘しましたが、誰も問題を解決しませんでした (助けてくれてありがとう)。ここに私が見つけた解決策があります。

  1. jar を .../web-inf/lib から PROJECT_ROOT/lib に移動します。
  2. この変更を反映するために、Eclipse のビルド パスを変更します。
  3. 私のプロジェクトをきれいにして再構築しました。
  4. junit テストを実行すると、BOOM が機能しました。

私の推測では、Ganymede が /web-inf/lib フォルダー内の jar を読み取る方法に関係があると思われます。しかし、誰が知っている...それは今動作します。

于 2008-10-03T02:48:28.643 に答える
3

元の接続文字列を見ると、次のようになります。

<property name="url" value="jdbc:hsqldb:hsql://localhost"/>

Hypersonicのドキュメントでは、ローカルホストの後にエイリアスがないことが示されています。

http://hsqldb.org/doc/guide/ch04.html

于 2008-12-24T16:53:53.657 に答える
2

接続するデータベース名を指定していないようです。次のようにする必要があります

jdbc:hsqldb:hsql://serverName:port/DBname
于 2008-10-02T02:30:20.833 に答える
2

私は同様の問題を抱えていました。すべての人へのアドバイスは、jdbc url sintax を確認することです

于 2010-12-22T16:26:38.187 に答える
1

ドライバー (org.hsqldb.jdbcDriver) をソース ファイルの 1 つにインポートできますか? (クラスが実際にクラスパス上にあることをテストするため)。

インポートできない場合は、ビルド パスにhsqldb.jarを含めてみてください。

于 2008-10-02T02:47:53.100 に答える
1

一部の人が以前に答えたように、このコード行は問題を解決しました

Class.forName("org.hsqldb.jdbcDriver");

しかし、私のアプリはいくつかの tomcat で実行されていますが、このコードを追加する必要があったのは 1 つのインストールだけでした。

于 2012-06-24T05:23:22.027 に答える
1

static main メソッドを使用してデータソース接続を実行しようとすると、まずデータベース接続を実行する必要があります。これは、次のようにEclipseで達成できます。

1) デフォルトでワークスペースを開いた後、任意の IDE (Eclipse または RAD) を開きます IDE は JAVA で開かれます。データソースと仮想データベース接続を作成するために、Java からデータベース プロスペクティブに切り替えてみてください。

2) データベース見込みで、特定のスキーマのユーザー名、パスワード、URL などのすべての詳細を入力します。

3) 次に、main メソッドを実行してデータベースにアクセスしてみます。

これにより、「serverName undefined」が解決されます。

于 2012-01-16T00:26:02.663 に答える
1

春、commons-dbcp、およびoracle 10gで同じ問題が発生しました。この URL を使用すると、「適切なドライバーがありません」というエラーが発生しました: jdbc:oracle:thin@192.168.170.117:1521:kinangop

上記の URL では、@ の直前に完全なコロンがありません。それを修正した後、エラーは消えました。

于 2009-01-09T12:59:11.670 に答える
0

何か価値があるかどうかはわかりませんが、「java.sql.SQLException:適切なドライバーが見つかりません」というエラーが発生するという同様の問題が発生しました。解決策を研究しているときにこのスレッドを見つけました。

私が問題を解決する方法は、java.sql.DriverManagerを使用して接続を取得するのをやめ、代わりにorg.hsqldb.jdbc.jdbcDataSourceのインスタンスを構築してそれを使用することでした。

私の問題の根本的な原因(私は信じています)は、クラスローダー階層と、JREがJava 5を実行しているという事実に関係していました。jdbcDriverクラスを正常にロードできたとしても、java.sql.DriverManagerの背後にあるクラスローダーは上位にありました。必要なhsqldb.jarが表示されないところまで。

とにかく、他の誰かが同様の問題でつまずいた場合に備えて、このメモをここに置くだけです。

于 2008-12-24T08:22:35.733 に答える
0

HSQL URL が間違っていると思います。データベース名も含める必要があります。

のようなもの

jdbc:hsqldb:hsql://localhost/mydatabase 

mydatabase が DB (ファイル) の名前である場合。これを含めないと (ここに当てはまるかどうかはわかりません)、URL の解析が混乱し、DriverManagerDS がドライバーが適切でないと判断する可能性があります (見つかったが、適切ではないと判断する可能性があります)。 1)

于 2008-10-02T07:35:26.137 に答える
0

そうかもね

hsql://localhost

ファイルに解決できません。ここにあるサンプル プログラムを見てください。

サンプル HSQLDB プログラム

最初にそれが機能するかどうかを確認してから、その構成情報を取得して Spring Bean 構成で使用できるかどうかを確認してください。

幸運を!

于 2008-10-02T03:25:04.570 に答える