私が作成した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
HSQLDB自体を登録するには、jdbcDriverクラスにアクセスする必要があります。これは、この example と同じ方法で行うことができます。
Class.forName("org.hsqldb.jdbcDriver");
JdbcDriverクラスの静的初期化をトリガーします。
static {
try {
DriverManager.registerDriver(new jdbcDriver());
} catch (Exception e) {}
}
「適切なドライバーがない」とは、通常、接続URLの構文が正しくないことを意味します。
さて、ここに解決策があります。ほとんどの人が本当に良い点を挙げましたが、誰も問題を解決しませんでした(助けてくれてありがとう)。私が見つけた解決策は次のとおりです。
私の推測では、Ganymedeが/ web-inf/libフォルダー内のjarを読み取る方法と関係があると考えられます。しかし、誰が知っている...それは今動作します。
元の接続文字列を見ると:
<property name="url" value="jdbc:hsqldb:hsql://localhost"/>
Hypersonicのドキュメントでは、localhostの後にエイリアスが欠落していることが示唆されています。
似たような問題がありました。すべてのアドバイスは、jdbc url sintaxをチェックすることです
接続するデータベース名を指定していないようですが、次のようになります
jdbc:hsqldb:hsql://serverName:port/DBname
前に答えたように、このコード行は問題を解決しました
Class.forName("org.hsqldb.jdbcDriver");
しかし、私のアプリはいくつかのTomcatで実行されていますが、1つのインストールでのみこのコードを追加する必要がありました。
静的mainメソッドを使用してデータソース接続を実行しようとすると、最初にデータベース接続を実行する必要があります。これはEclipseで次のように実現できます。
1)デフォルトでワークスペースを開いた後にIDE(EclipseまたはRAD)を開きます。IDEはJavaで開かれます。データソースと仮想データベース接続を作成するために、Javaから将来のデータベースに切り替えてみてください。
2)データベースに、特定のスキーマのユーザー名、パスワード、URLなどのすべての詳細を入力します。
3)次に、mainメソッドを実行してデータベースにアクセスしてみてください。
これにより、「serverName undefined」が解決されます。
ドライバー(org.hsqldb.jdbcDriver)をソースファイルの1つにインポートできますか? (クラスが実際にクラスパス上にあることをテストするため)。
インポートできない場合は、ビルドパスに hsqldb.jar を含めてみてください。
Spring、commons-dbcp、およびOracle 10gでも同じ問題が発生しました。このURLを使用すると、「適切なドライバーがありません」というエラーが発生しました:jdbc:Oracle:[email protected]:1521:kinangop
上記のURLでは、@の直前に完全なコロンがありません。それを修正した後、エラーは消えました。
それかもしれない
hsql:// localhost
ファイルに解決できません。こちらのサンプルプログラムをご覧ください。
最初にそれを機能させることができるかどうかを確認してから、その構成情報を取得してSpring Bean構成で使用できるかどうかを確認してください。
幸運を!
何か価値があるかどうかはわかりませんが、「Java.sql.SQLException:適切なドライバーが見つかりません」というエラーが表示されるという同様の問題がありました。解決策を研究しているときにこのスレッドを見つけました。
問題を解決する方法は、Java.sql.DriverManagerを使用して接続を取得するのをやめて、代わりにorg.hsqldb.jdbc.jdbcDataSourceのインスタンスを構築し、それを使用することでした。
私の問題の根本原因は、クラスローダーの階層と、JREが実行されているという事実に関係していると思いますJava 5。 Java.sql.DriverManagerは、私が必要とするhsqldb.jarを見ることができなくなるまで、より上位にありました。
とにかく、誰かが同様の問題でつまずく場合に備えて、このメモをここに置いてください。
私は同様の問題に直面していましたが、驚いたことに、問題はJavaのバージョンにありました。 Java.sql.DriverManagerはrt.jarに由来し、ドライバー「COM.ibm.db2.jdbc.app.DB2Driver」をロードできませんでした。
私はjdk 5とjdk 6からアップグレードし、機能しました。
場合によっては、許可(所有権)を確認してください。
HSQL URLが間違っていると思います。また、データベース名、
のようなもの
jdbc:hsqldb:hsql://localhost/mydatabase
mydatabaseがDB(ファイル)の名前である場合。これを含めないと(ここに当てはまるかどうかわかりません)、URLの解析が混乱し、DriverManagerDSがドライバーが適切でないと判断する可能性があります(見つかったが、良くないと思います) 1)