test example java eclipse spring junit hsqldb

java - example - Causa de No se encontrĂ³ un controlador adecuado para



spring database in memory (15)

¿Puede importar el controlador (org.hsqldb.jdbcDriver) en uno de sus archivos fuente? (Para probar que la clase está realmente en su camino de clase).

Si no puede importarlo, intente incluir hsqldb.jar en su ruta de compilación.

Estoy tratando de probar la unidad (JUnit) un DAO que he creado. Estoy usando Spring como mi framework, mi DAO (JdbcPackageDAO) extiende SimpleJdbcDaoSupport. La clase de prueba (JdbcPackageDAOTest) extiende AbstractTransactionalDataSourceSpringContextTests. He reemplazado las configLocations de la siguiente manera:

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

Mi archivo test-context.xml se define de la siguiente manera:

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

Estoy usando HSQL como mi backend, se está ejecutando en modo independiente. Mi IDE de elección es eclipse. Cuando ejecuto la clase como una prueba JUnit aquí está mi error (a continuación). No tengo idea de por qué está sucediendo. hsql.jar está en mi ruta de compilación según Eclipse.

org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: No suitable driver found for jdbc:hsqldb:hsql://localhost 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) at junit.framework.TestCase.run(TestCase.java:120) at junit.framework.TestSuite.runTest(TestSuite.java:230) at 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) Caused by: java.sql.SQLException: No suitable driver found for jdbc:hsqldb:hsql://localhost at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) 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 more


Creo que su URL HSQL es incorrecta. También debe incluir el nombre de la base de datos,

algo así como

jdbc:hsqldb:hsql://localhost/mydatabase

if mydatabase es el nombre de tu DB (archivo). No incluir esto puede (no estoy seguro si es el caso aquí) confundir el análisis sintáctico de la URL, lo que puede llevar al DriverManagerDS a pensar que su controlador no es adecuado (lo encuentra, pero cree que no es bueno uno)


Parece que no está especificando el nombre de una base de datos para conectarse, debería ser algo como

jdbc:hsqldb:hsql://serverName:port/DBname


Puede ser que

hsql: // localhost

no se puede resolver en un archivo. Mira el programa de ejemplo aquí:

Ejemplo del programa HSQLDB

Vea si puede hacer que eso funcione primero, y luego vea si puede tomar esa información de configuración y usarla en la configuración de Spring Bean.

¡Buena suerte!


De acuerdo, esta es la solución. La mayoría de todos hicieron puntos realmente buenos, pero ninguno resolvió el problema (GRACIAS por la ayuda). Aquí está la solución que encontré para trabajar.

  1. Mueva los archivos jar desde ... / web-inf / lib a PROJECT_ROOT / lib
  2. Altere la ruta de compilación en eclipse para reflejar este cambio.
  3. Limpié y reconstruí mi proyecto.
  4. ejecutó la prueba junit y BOOM funcionó!

Supongo que tiene algo que ver con cómo lee Ganymede jar en la carpeta / web-inf / lib. Pero quién sabe ... Funciona ahora.


"No hay un controlador adecuado" generalmente significa que la sintaxis de la URL de conexión es incorrecta.


No estoy seguro de si vale algo, pero tuve un problema similar cuando recibí un error "java.sql.SQLException: No se encontró un controlador adecuado". Encontré este hilo mientras investigaba una solución.

La forma en que terminé solucionando mi problema fue renunciar al uso de java.sql.DriverManager para obtener una conexión y en su lugar construí una instancia de org.hsqldb.jdbc.jdbcDataSource y la utilicé.

La causa de mi problema (creo) tenía que ver con la jerarquía del cargador de clases y el hecho de que el JRE estaba ejecutando Java 5. Aunque pude cargar con éxito la clase jdbcDriver, el cargador de clases detrás de java.sql.DriverManager estaba más arriba, hasta el punto de que no podía ver el hsqldb.jar que necesitaba.

De todos modos, solo ponga esta nota aquí en caso de que alguien más tropiece con un problema similar.


Tuve el mismo problema con spring, commons-dbcp y oracle 10g. Al usar esta URL obtuve el error "no driver adecuado": jdbc: oracle: [email protected]: 1521: kinangop

A la URL anterior le faltan dos puntos justo antes de la @. Después de corregir eso, el error desapareció.


genial tuve el problema similar. El consejo para todos es verificar jdbc url sintax


cuando intentemos ejecutar la conectividad del origen de datos utilizando el método principal estático, primero debemos ejecutar la conexión a la base de datos. Esto lo podemos lograr en eclipse como abajo.

1) abra cualquier IDE (Eclipse o RAD) después de abrir el espacio de trabajo de forma predeterminada IDE se abrirá en JAVA prospectivo. Intente cambiar de java a prospecto de base de datos para crear un origen de datos así como conectividad de base de datos virtual.

2) en la base de datos prospectiva ingrese todos los detalles como nombre de usuario, contraseña y URL del esquema particular.

3) luego intente ejecutar el método principal para acceder a la base de datos.

Esto resolverá el "serverName undefined".


Para que HSQLDB se registre a sí mismo, necesita acceder a su clase jdbcDriver. Puedes hacer esto de la misma manera que en este ejemplo .

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

Activa la inicialización estática de la clase jdbcDriver, que es:

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


Como algunos respondieron antes, esta línea de código resolvió el problema

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

Pero mi aplicación se está ejecutando en algunos tomcat, pero solo en una instalación tuve que agregar este código.


Me enfrentaba a un problema similar y, para mi sorpresa, el problema estaba en la versión de Java. java.sql.DriverManager viene de rt.jar no pudo cargar mi controlador "COM.ibm.db2.jdbc.app.DB2Driver".

Actualicé de jdk 5 y jdk 6 y funcionó.


En algunos casos, compruebe los permisos (propiedad).


Si miras la cadena de conexión original:

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

Los documentos hipersónicos sugieren que te falta un alias después de localhost:

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