Не найдено подходящего драйвера для - PullRequest
19 голосов
/ 02 октября 2008

Я пытаюсь выполнить юнит-тест (JUnit) DAO, который я создал. Я использую 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 выбора - затмение. Когда я запускаю класс как тест JUnit, вот моя ошибка (ниже). Я понятия не имею, почему это происходит. hsql.jar находится на моем пути сборки согласно 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

Ответы [ 15 ]

29 голосов
/ 14 февраля 2010

Чтобы HSQLDB регистрировался сам, вам нужно получить доступ к его классу jdbcDriver. Вы можете сделать это так же, как в этом примере .

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

Запускает статическую инициализацию класса jdbcDriver, а именно:

static {
    try {
        DriverManager.registerDriver(new jdbcDriver());
    } catch (Exception e) {}
}
10 голосов
/ 24 декабря 2008

«нет подходящего драйвера» обычно означает, что синтаксис для URL-адреса соединения неверен.

4 голосов
/ 03 октября 2008

Хорошо, так вот решение. Большинство из них высказали действительно хорошие замечания, но никто не решил проблему (СПАСИБО за помощь). Вот решение, которое я нашел для работы.

  1. Перемещение банок из ... / web-inf / lib в PROJECT_ROOT / lib
  2. Измените путь сборки в затмении, чтобы отразить это изменение.
  3. очистил и перестроил мой проект.
  4. запустил тест джунита, и БУМ работал!

Я предполагаю, что это как-то связано с тем, как Ганимед читает jar-файлы в папке / web-inf / lib. Но кто знает ... Это работает сейчас.

3 голосов
/ 24 декабря 2008

Если вы посмотрите на исходную строку подключения:

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

Гиперзвуковые документы предполагают, что вы пропустили псевдоним после localhost:

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

2 голосов
/ 22 декабря 2010

здорово у меня была похожая проблема. Совет для всех, это проверить JDBC URL Sintax

2 голосов
/ 02 октября 2008

Похоже, вы не указываете имя базы данных для подключения, должно быть что-то вроде

jdbc:hsqldb:hsql://serverName:port/DBname
1 голос
/ 24 июня 2012

Как уже отвечали некоторые, эта строка кода решила проблему

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

Но мое приложение работает в некоторых кошках, но только в одной установке мне пришлось добавить этот код.

1 голос
/ 16 января 2012

при попытке запустить соединение с источником данных, используя статический метод main, сначала нам нужно запустить соединение с базой данных. Этого мы можем достичь в затмении, как показано ниже.

1) открыть любую IDE (Eclipse или RAD) после открытия рабочей области. По умолчанию IDE будет открыта в перспективе JAVA. Попробуйте переключиться с Java на предполагаемую базу данных, чтобы создать источник данных, а также подключение к виртуальной базе данных.

2) в предполагаемой базе данных введите все данные, такие как имя пользователя, пароль и URL конкретной схемы.

3) затем попытайтесь запустить метод main для доступа к базе данных.

Это разрешит "имя_сервера не определено".

1 голос
/ 09 января 2009

У меня была такая же проблема с spring, commons-dbcp и oracle 10g. Используя этот URL, я получил ошибку «нет подходящего драйвера»: jdbc: oracle: thin@192.168.170.117: 1521: kinangop

В указанном выше URL отсутствует двоеточие перед символом @. После исправления ошибка исчезла.

1 голос
/ 02 октября 2008

Можете ли вы импортировать драйвер (org.hsqldb.jdbcDriver) в один из ваших исходных файлов? (Чтобы проверить, что класс на самом деле находится на вашем пути к классу).

Если вы не можете импортировать его, попробуйте включить hsqldb.jar в путь сборки.

...