2008-10-02 3 views
18

Я пытаюсь выполнить юнит-тест (JUnit) созданный DAO. Я использую Spring как свою структуру, мой DAO (JdbcPackageDAO) расширяет SimpleJdbcDaoSupport. Класс тестирования (JdbcPackageDAOTest) расширяет AbstractTransactionalDataSourceSpringContextTests. Я переопределен в configLocations следующим образом:Причина Не найдено подходящих драйверов для

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

Моего файл тест-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 

ответ

2

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

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

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

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

+0

Я могу импортировать jdbcDriver; что означает, что hsqldb находится на моем пути сборки. – IaCoder 2008-10-02 03:04:51

0

Может быть,

hsql://localhost

не может быть решена в файл. Посмотрите на пример программы здесь:

Sample HSQLDB program

Смотрите, если вы можете получить, что работает, а затем посмотреть, если вы можете взять эту информацию о конфигурации и использовать его в конфигурации Spring бина.

Удачи вам!

0

Я думаю, что ваш URL-адрес HSQL неверен. Она также должна включать имя базы данных,

так что-то вроде

jdbc:hsqldb:hsql://localhost/mydatabase 

если MyDatabase этого имени вашей БД (файл). Не включая это может (я не уверен, что это так) путайте разбор URL-адреса, что может привести к тому, что DriverManagerDS подумает, что ваш драйвер не подходит (он найден, но он считает, что это нехорошо один)

3

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

  1. Перемещение банки из .../WEB-INF/Lib для PROJECT_ROOT/Библиотека
  2. Alter построить путь в затмении, чтобы отразить это изменение.
  3. очистил и перестроил мой проект.
  4. прошел тест юнита, и он работал!

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

0

Не уверен, что это того стоит, но у меня была аналогичная проблема, когда я получал ошибку «java.sql.SQLException: No found driver found». Я нашел эту тему, исследуя решение.

Способ, которым я решил решить мою проблему, заключался в том, чтобы отказаться от использования java.sql.DriverManager для получения соединения и вместо этого создать экземпляр org.hsqldb.jdbc.jdbcDataSource и использовать его.

Основная причина моей проблемы (я считаю) связана с иерархией загрузчика классов и тем фактом, что JRE работает под управлением Java 5. Даже если бы я мог успешно загрузить класс jdbcDriver, загрузчик классов за java.sql.DriverManager был выше, до такой степени, что он не мог видеть hsqldb.jar, в котором я нуждался.

В любом случае, просто поместите это примечание здесь, если кто-то еще споткнется с аналогичной проблемой.

10

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

3

Если посмотреть на исходной строке соединения:

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

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

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

+0

Это исправило это для меня. У свойства связи были проблемы. – leeand00 2012-01-03 03:51:31

1

У меня была такая же проблема с весной , commons-dbcp и оракул 10g. Используя этот URL я получил «нет подходящего драйвера» ошибки: JDBC: оракул: [email protected]: 1521: kinangop

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

+0

Я также узнал, что org.springframework.jdbc.datasource.DriverManagerDataSource дает более информативную ошибку для того же условия. – 2009-01-09 13:03:08

27

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

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

Это вызывает статическую инициализацию класса jdbcDriver, что:

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

Он уже исправил проблему. – BalusC 2010-02-14 23:24:07

+7

Я видел это, но у меня была аналогичная проблема, и решение было таким, как показано выше. Поэтому я подумал, почему бы не поделиться этим с моими коллегами-переполнениями.) – 2010-02-15 09:39:24

2

большой я имел подобную проблему. Совет для всех заключается в том, чтобы проверить jdbc url sintax

1

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

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

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

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

Это решит проблему «имя_сервера undefined».

1

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

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

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

0

У меня возникла аналогичная проблема, и, к моему удивлению, проблема была в версии Java. java.sql.DriverManager от rt.jar не смог загрузить мой драйвер «COM.ibm.db2.jdbc.app.DB2Driver».

Я обновился от jdk 5 и jdk 6, и это сработало.

0

В некоторых случаях проверять разрешения (право собственности).

Смежные вопросы