J'essaie de tester à l'unité (JUnit) un DAO que j'ai créé. J'utilise Spring comme cadre, mon DAO (JdbcPackageDAO) étend SimpleJdbcDaoSupport. La classe de test (JdbcPackageDAOTest) étend AbstractTransactionalDataSourceSpringContextTests. J'ai remplacé les configLocations comme suit:
protected String[] getConfigLocations(){
return new String[] {"classpath:company/dc/test-context.xml"};
}
Mon fichier test-context.xml est défini comme suit:
<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>
J'utilise HSQL comme serveur principal, il fonctionne en mode autonome. Mon IDE de choix est Eclipse. Lorsque j'exécute la classe en tant que test JUnit, voici mon erreur (ci-dessous). Je ne sais pas pourquoi cela se produit. hsql.jar est sur mon chemin de construction selon Eclipse.
org.springframework.transaction.CannotCreateTransactionException: Impossible d'ouvrir la connexion JDBC pour la transaction; L'exception imbriquée est Java.sql.SQLException: aucun pilote approprié trouvé pour 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) sur junit.framework.TestCase.runBare (TestCase.Java:128) à org.springframework.test.ConditionalTestCase.runBare (ConditionalTestCase.Java:76) à junit.framework.TestResult $ 1.protect (TestResult.Java:106) sur junit.framework.TestResult.runProtected (TestResult.Java:124) à junit.framework.TestResult.run (TestResult.Java:109) à junit.framework.TestCase.run (TestCase.Java:120) sur 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) at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.Java:196) Causée par: Java.sql.SQLException: Aucun pilote approprié trouvé pour jdbc: hsqldb: hsql: // localhost at Java.sql.DriverManager.getConnection (Source inconnue) at Java.sql.DriverManager.getConnection (Source inconnue) à 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 autres
Pour que HSQLDB s'enregistre, vous devez accéder à sa classe jdbcDriver. Vous pouvez le faire de la même manière que dans cet exemple exemple .
Class.forName("org.hsqldb.jdbcDriver");
Il déclenche l'initialisation statique de la classe jdbcDriver, qui est:
static {
try {
DriverManager.registerDriver(new jdbcDriver());
} catch (Exception e) {}
}
"pas de pilote approprié" signifie généralement que la syntaxe de l'URL de connexion est incorrecte.
Bon alors voici la solution. La plupart des participants ont fait de très bons arguments, mais aucun n’a résolu le problème (MERCI de l’aide). Voici la solution que j'ai trouvée pour fonctionner.
Je suppose que cela a quelque chose à voir avec la façon dont Ganymède lit les bocaux dans le dossier/web-inf/lib. Mais qui sait ... Cela fonctionne maintenant.
Si vous regardez votre chaîne de connexion d'origine:
<property name="url" value="jdbc:hsqldb:hsql://localhost"/>
Les documents Hypersonic suggèrent qu'il vous manque un alias après localhost:
super j'ai eu le même problème. Le conseil pour tous est de vérifier jdbc url sintax
Il semble que vous ne spécifiez pas un nom de base de données auquel vous souhaitez vous connecter.
jdbc:hsqldb:hsql://serverName:port/DBname
Comme certains l'ont déjà répondu, cette ligne de code a résolu le problème
Class.forName("org.hsqldb.jdbcDriver");
Mais mon application est en cours d'exécution dans certains tomcats mais seulement dans une installation, j'ai dû ajouter ce code.
lorsque vous essayez d’exécuter la connectivité de source de données à l’aide de la méthode principale statique, vous devez d’abord exécuter la connexion à la base de données. C'est ce que nous pouvons réaliser dans Eclipse.
1) ouvrir tout IDE (Eclipse ou RAD) après avoir ouvert l’espace de travail par défaut IDE sera ouvert dans Java prospective. Essayez de passer de Java à une base de données potentielle afin de créer une source de données et une connectivité de base de données virtuelle.
2) dans la base de données prospective, entrez tous les détails tels que nom d'utilisateur, mot de passe et URL du schéma particulier.
3) puis essayez d’exécuter la méthode principale pour accéder à la base de données.
Cela résoudra le "nom_serveur non défini".
Pouvez-vous importer le pilote (org.hsqldb.jdbcDriver) dans l'un de vos fichiers source? (Pour vérifier que la classe est réellement sur votre chemin de classe).
Si vous ne pouvez pas l'importer, vous pouvez essayer d'inclure hsqldb.jar dans votre chemin de construction.
J'ai eu le même problème avec spring, commons-dbcp et Oracle 10g . En utilisant cette URL, j'ai eu l'erreur «aucun pilote approprié»: jdbc: Oracle: [email protected]: 1521: kinangop
Il manque un point-virgule complet juste avant le @. Après avoir corrigé cela, l'erreur a disparu.
Il se peut que
hsql: // localhost
ne peut pas être résolu dans un fichier. Regardez l'exemple de programme ici:
Voyez si vous pouvez le faire fonctionner en premier, puis si vous pouvez utiliser ces informations de configuration et les utiliser dans la configuration du bean Spring.
Bonne chance!
Je ne suis pas sûr que cela vaille la peine, mais j’ai eu un problème similaire, où j’obtenais une erreur "Java.sql.SQLException: No driver adapté found". J'ai trouvé ce fil lors de la recherche d'une solution.
La façon dont j'ai fini par résoudre mon problème a été de ne pas utiliser Java.sql.DriverManager pour obtenir une connexion, mais plutôt de créer une instance de org.hsqldb.jdbc.jdbcDataSource et de l'utiliser.
La cause première de mon problème (je crois) était liée à la hiérarchie du chargeur de classes et au fait que le JRE exécutait Java 5. Même si je pouvais charger avec succès la classe jdbcDriver, le chargeur de classes derrière Java.sql.DriverManager était plus haut, au point qu'il ne pouvait pas voir le hsqldb.jar dont j'avais besoin.
Quoi qu'il en soit, il suffit de mettre cette note ici au cas où quelqu'un d'autre tomberait par un problème similaire.
J'étais confronté à un problème similaire et à ma grande surprise, le problème était lié à la version de Java . Java.sql.DriverManager vient de rt.jar n'a pas pu charger mon pilote "COM.ibm.db2.jdbc.app.DB2Driver" .
Je suis passé de jdk 5 à jdk 6 et cela a fonctionné.
Dans certains cas, vérifiez les autorisations (propriété).
Je pense que votre URL HSQL est fausse. Il devrait également inclure le nom de la base de données,
donc quelque chose comme
jdbc:hsqldb:hsql://localhost/mydatabase
si mydatabase est le nom de votre base de données (fichier). Ne pas inclure ceci peut (je ne suis pas sûr si c'est le cas ici) confondre l'analyse de l'URL, ce qui peut amener le DriverManager à penser que votre pilote n'est pas adapté (il est trouvé, mais il pense que ce n'est pas un bon un)