it-swarm.com.de

Ursache für Kein passender Treiber gefunden für

Ich versuche, eine von mir erstellte DAO zu testen (JUnit). Ich benutze Spring als Framework, mein DAO (JdbcPackageDAO) erweitert SimpleJdbcDaoSupport. Die Testklasse (JdbcPackageDAOTest) erweitert AbstractTransactionalDataSourceSpringContextTests. Ich habe die configLocations wie folgt überschrieben:

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

Meine Datei test-context.xml ist wie folgt definiert:

<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>

Ich benutze HSQL als mein Backend, es läuft im Standalone-Modus. Meine IDE Wahl ist Eclipse. Wenn ich die Klasse als JUnit-Test durchführe, ist hier mein Fehler (unten). Ich habe keine Ahnung, warum es passiert. hsql.jar befindet sich laut Eclipse auf meinem Build-Pfad.

 org.springframework.transaction.CannotCreateTransactionException: Die JDBC-Verbindung konnte für die Transaktion nicht geöffnet werden. geschachtelte Ausnahme ist Java.sql.SQLException: Für jdbc: hsqldb: hsql: //localhost.__ wurde kein geeigneter Treiber gefunden. at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin (DataSourceTransactionManager.Java:219) 
 at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction (AbstractPlatformTransactionManager.Java:377) 
 at org.springframework.test.AbstractTransactionalSpringContextTests.startNewTransaction (AbstractTransactionalSpringContextTests.Java:387) 
 at org.springframework.test.AbstractTransactionalSpringContextTests.onSetUp (AbstractTransactionalSpringContextTests.Java:217) 
 at org.springframework.test.AbstractSingleSpringContextTests.setUp (AbstractSingleSpringContextTests.Java:101) 
 at junit.framework.TestCase.runBare (TestCase.Java:128) 
 at org.springframework.test.ConditionalTestCase.runBare (ConditionalTestCase.Java:76) 
 at junit.framework.TestResult $ 1.protect (TestResult.Java:106) 
 at junit.framework.TestResult.runProtected (TestResult.Java:124) 
 at junit.framework.TestResult.run (TestResult.Java:109) 
 bei junit.framework.TestCase.run (TestCase.Java: 120) 
 at junit.framework.TestSuite.runTest (TestSuite.Java:230) 
 bei junit.framework.TestSuite.run (TestSuite.Java:225) 
 at 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) 
 Ursache: Java.sql.SQLException: Für jdbc: hsql: // localhost wurde kein geeigneter Treiber gefunden
 at Java.sql.DriverManager.getConnection (unbekannte Quelle) 
 at Java.sql.DriverManager.getConnection (unbekannte Quelle) 
 at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager (DriverManagerDataSource.Java:291) 
 at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager (DriverManagerDataSource.Java:277) 
 at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager (DriverManagerDataSource.Java:259) 
 at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection (DriverManagerDataSource.Java:241) 
 at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin (DataSourceTransactionManager.Java:182) 
 ... 18 mehr 
19
IaCoder

Um HSQLDB registrieren zu lassen, müssen Sie auf die Klasse jdbcDriver zugreifen. Sie können dies auf dieselbe Weise wie in diesem Beispiel tun.

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

Es löst die statische Initialisierung der jdbcDriver-Klasse aus. Dies ist:

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

"Kein geeigneter Treiber" bedeutet normalerweise, dass die Syntax für die Verbindungs-URL falsch ist.

10
duffymo

Okay, hier ist die Lösung. Die meisten machten wirklich gute Punkte, aber keiner löste das Problem (DANKE für die Hilfe). Hier ist die Lösung, die ich gefunden habe, um zu arbeiten.

  1. Verschieben Sie die Gläser von .../web-inf/lib nach PROJECT_ROOT/lib
  2. Ändern Sie den Erstellungspfad in Eclipse, um diese Änderung zu berücksichtigen.
  3. mein Projekt gereinigt und neu aufgebaut.
  4. lief den junit test und BOOM es funktionierte!

Meine Vermutung ist, dass es etwas damit zu tun hatte, wie Ganymede Gläser im Ordner/web-inf/lib liest. Aber wer weiß ... Es funktioniert jetzt. 

4
IaCoder

Wenn Sie sich Ihre ursprüngliche Verbindungszeichenfolge ansehen:

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

Die hypersonischen Dokumente weisen darauf hin, dass Sie nach localhost einen Aliasnamen verpassen:

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

3
duffymo

toll, ich hatte das ähnliche Problem. Der Ratschlag für alle ist die Überprüfung der Jdbc-URL sintax

2
gianluca

Es scheint, dass Sie keinen Datenbanknamen angeben, zu dem eine Verbindung hergestellt werden soll 

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

Wie bereits erwähnt, löste diese Codezeile das Problem

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

Meine App läuft aber in einigen Kater, aber nur in einer Installation musste ich diesen Code hinzufügen.

1
Emac

wenn Sie versuchen, die Datenquellenverbindung mit der statischen Hauptmethode auszuführen, müssen Sie zuerst die Datenbankverbindung ausführen. Dies können wir in Eclipse wie folgt erreichen.

1) Öffnen Sie eine beliebige IDE (Eclipse oder RAD), nachdem der Arbeitsbereich standardmäßig geöffnet ist. IDE wird in Java prospective geöffnet. Versuchen Sie, von Java zu einer prospektiven Datenbank zu wechseln, um sowohl eine Datenquelle als auch eine virtuelle Datenbankkonnektivität zu erstellen.

2) Geben Sie in der Datenbank prospective alle Details wie Benutzername, Passwort und URL des jeweiligen Schemas ein.

3) Versuchen Sie dann, die Hauptmethode auszuführen, um auf die Datenbank zuzugreifen.

Dadurch wird der "Servername undefined" aufgelöst.

1
arun.bevoor

Können Sie den Treiber (org.hsqldb.jdbcDriver) in eine Ihrer Quelldateien importieren? (Um zu testen, ob sich die Klasse tatsächlich in Ihrem Klassenpfad befindet).

Wenn Sie es nicht importieren können, können Sie versuchen, hsqldb.jar in Ihren Build-Pfad einzufügen.

1
Max Stewart

Ich hatte das gleiche Problem mit spring, commons-dbcp und Oracle 10g . Mit dieser URL erhielt ich den Fehler 'Kein geeigneter Treiber': jdbc: Oracle: [email protected]: 1521: kinangop

Der obigen URL fehlt ein vollständiger Doppelpunkt vor dem @. Nach der Korrektur verschwand der Fehler.

1
EN

Es könnte das sein 

hsql: // localhost

kann nicht in eine Datei aufgelöst werden. Schauen Sie sich das Beispielprogramm hier an:

HSQLDB-Beispielprogramm

Sehen Sie nach, ob Sie diese Funktion zuerst ausführen können, und prüfen Sie dann, ob Sie diese Konfigurationsinformationen verwenden und in der Spring-Bean-Konfiguration verwenden können.

Viel Glück!

0
MetroidFan2002

Nicht sicher, ob es etwas wert ist, aber ich hatte ein ähnliches Problem, bei dem ich die Fehlermeldung "Java.sql.SQLException: Kein passender Treiber gefunden" erhielt. Ich habe diesen Thread gefunden, als ich nach einer Lösung gesucht habe.

Am Ende habe ich mein Problem gelöst, indem ich auf Java.sql.DriverManager verzichtete, um eine Verbindung herzustellen, und stattdessen eine Instanz von org.hsqldb.jdbc.jdbcDataSource aufbauen und diese verwenden konnte.

Die Hauptursache meines Problems (glaube ich) hatte mit der Klassenlader-Hierarchie und der Tatsache zu tun, dass die JRE Java 5 ausführte. Obwohl ich die Klasse jdbcDriver erfolgreich laden konnte, war der Klassenlader hinter Java.sql.DriverManager höher. zu dem Punkt, dass es nicht die hsqldb.jar sah, die ich brauchte.

Setzen Sie einfach diese Notiz hier ein, falls jemand anderes mit einem ähnlichen Problem vorbeikommt.

0
Jim R Wilson

Ich war mit einem ähnlichen Problem konfrontiert und zu meiner Überraschung befand sich das Problem in der Java-Version Java.sql.DriverManager stammt von rt.jar konnte meinen Treiber "COM.ibm.db2.jdbc.app.DB2Driver" nicht laden. .

Ich habe ein Upgrade von jdk 5 und jdk 6 durchgeführt und es hat funktioniert.

0
poonam

In einigen Fällen überprüfen Sie die Berechtigungen (Besitzrechte).

0
CamelTM

Ich denke, Ihre HSQL-URL ist falsch. Es sollte auch den Datenbanknamen enthalten.

so etwas wie 

jdbc:hsqldb:hsql://localhost/mydatabase 

wenn meinedatenbank der Name Ihrer Datenbank (Datei) ist. Wenn Sie dies nicht angeben, kann das Parsing der URL (ich bin nicht sicher, ob es hier der Fall ist) verwirren. Dies kann dazu führen, dass der DriverManagerDS denkt, dass Ihr Treiber nicht geeignet ist (er wird gefunden, er ist jedoch nicht der Fall ein)

0
NR.