web-dev-qa-db-ja.com

適切なドライバーが見つからない原因

私が作成した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です:org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.Java:219)[.____でjdbc:hsqldb:hsql:// localhost 
に適したドライバーが見つかりません。] org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.Java:377)
 at org.springframework.test.AbstractTransactionalSpringContextTests.startNewTransaction(AbstractTransactionalSpringContextTests.Java:3。)at ..______ .springframework.test.AbstractTransactionalSpringContextTests.onSetUp(AbstractTransactionalSpringContextTests.Java:217)
 at org.springframework.test.AbstractSingleSpringContextTests.setUp(AbstractSingleSpringContextTests.Java:101)
 at junit.framework.Test (TestCase.Java:128)
 org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.Java:76)
 at junit.framework.TestResult $ 1.protect(Test Result.Java:106)
 at junit.framework.TestResult.runProtected(TestResult.Java:124)
 at junit.framework.TestResult.run(TestResult.Java:109)
 junit.framework.TestCase.run(TestCase.Java:120)
 at junit.framework.TestSuite.runTest(TestSuite.Java:230)
 at junit.framework.TestSuite.run( TestSuite.Java:225)
 org.Eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.Java:130)
 at org.Eclipse.jdt.internal junit.runner.TestExecution.run(TestExecution.Java:38)
 at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:460)
 at org。 Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:673)
 at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.Java:386)
 at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.Java:196)
原因:Java.sql.SQLE xception:jdbc:hsqldb:hsql:// localhost 
 for Java.sql.DriverManager.getConnection(Unknown Source)
 at Java.sql.DriverManager.getConnection(Unknown Source)に適切なドライバーが見つかりません
 org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.Java:291)
 at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.Java:277)
 org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.Java:259)
 at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection(DriverManagerDataSource.Java:241)
 org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.Java:182)
 ... 18 more 
19
IaCoder

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

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

JdbcDriverクラスの静的初期化をトリガーします。

static {
    try {
        DriverManager.registerDriver(new jdbcDriver());
    } catch (Exception e) {}
}
29
Ivan Koblik

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

10
duffymo

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

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

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

4
IaCoder

元の接続文字列を見ると:

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

Hypersonicのドキュメントでは、localhostの後にエイリアスが欠落していることが示唆されています。

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

3
duffymo

似たような問題がありました。すべてのアドバイスは、jdbc url sintaxをチェックすることです

2
gianluca

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

jdbc:hsqldb:hsql://serverName:port/DBname
2
Max Stewart

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

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

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

1
Emac

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

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

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

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

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

1
arun.bevoor

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

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

1
Max Stewart

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

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

1
EN

それかもしれない

hsql:// localhost

ファイルに解決できません。こちらのサンプルプログラムをご覧ください。

HSQLDBプログラムのサンプル

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

幸運を!

0
MetroidFan2002

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

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

私の問題の根本原因は、クラスローダーの階層と、JREが実行されているという事実に関係していると思いますJava 5。 Java.sql.DriverManagerは、私が必要とするhsqldb.jarを見ることができなくなるまで、より上位にありました。

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

0
Jim R Wilson

私は同様の問題に直面していましたが、驚いたことに、問題はJavaのバージョンにありました。 Java.sql.DriverManagerはrt.jarに由来し、ドライバー「COM.ibm.db2.jdbc.app.DB2Driver」をロードできませんでした。

私はjdk 5とjdk 6からアップグレードし、機能しました。

0
poonam

場合によっては、許可(所有権)を確認してください。

0
CamelTM

HSQL URLが間違っていると思います。また、データベース名、

のようなもの

jdbc:hsqldb:hsql://localhost/mydatabase 

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

0
NR.