Причина Не найдено подходящего драйвера для
Я пытаюсь создать unit test (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
Ответы
Ответ 1
Чтобы зарегистрировать HSQLDB, вам нужно получить доступ к его классу jdbcDriver. Вы можете сделать это так же, как в этом .
Class.forName("org.hsqldb.jdbcDriver");
Он запускает статическую инициализацию класса jdbcDriver:
static {
try {
DriverManager.registerDriver(new jdbcDriver());
} catch (Exception e) {}
}
Ответ 2
"Нет подходящего драйвера" обычно означает, что синтаксис URL-адреса подключения неверен.
Ответ 3
Хорошо, так вот решение. Большинство из них сделали действительно хорошие очки, но никто не решил проблему (СПАСИБО за помощь). Вот решение, которое я нашел для работы.
- Переместить банки из... /web -inf/lib в PROJECT_ROOT/lib
- Изменить путь сборки в eclipse, чтобы отразить это изменение.
- очистить и перестроить мой проект.
- запускал тест junit и работал с ним!
Я предполагаю, что это как-то связано с тем, как Ganymede читает банки в папке /web -inf/lib. Но кто знает... Он работает сейчас.
Ответ 4
Если вы посмотрите на свою исходную строку подключения:
<property name="url" value="jdbc:hsqldb:hsql://localhost"/>
Гиперзвуковые документы предполагают, что вам не хватает псевдонима после локального хоста:
http://hsqldb.org/doc/guide/ch04.html
Ответ 5
Похоже, вы не указываете имя базы данных для подключения, должно идти что-то вроде
jdbc:hsqldb:hsql://serverName:port/DBname
Ответ 6
У меня была аналогичная проблема. Совет для всех - проверить jdbc url sintax
Ответ 7
Можете ли вы импортировать драйвер (org.hsqldb.jdbcDriver) в один из ваших исходных файлов? (Чтобы проверить, что класс действительно находится на пути к вашему классу).
Если вы не можете импортировать его, вы можете попробовать включить hsqldb.jar в свой путь сборки.
Ответ 8
У меня была та же проблема с spring, commons-dbcp и oracle 10g.
Используя этот URL, я получил ошибку "нет подходящего драйвера": jdbc: oracle: [email protected]: 1521: kinangop
В приведенном выше URL-адресе отсутствует полный двоеточник перед символом @. После исправления ошибка исчезла.
Ответ 9
при попытке запустить подключение к источнику данных с использованием статического основного метода, сначала нам нужно запустить подключение к базе данных. Это мы можем достичь в затмении, как ниже.
1) откройте любую IDE (Eclipse или RAD) после открытия рабочей области по умолчанию. IDE будет открыта в перспективном формате JAVA. Попробуйте перейти от Java к базе данных, чтобы создать источник данных, а также подключение к виртуальной базе данных.
2) в базе данных проспективно введите все данные, такие как имя пользователя, пароль и URL-адрес конкретной схемы.
3), попробуйте запустить основной метод для доступа к базе данных.
Это приведет к решению "serverName undefined".
Ответ 10
Как уже говорили некоторые, эта строка кода решила проблему
Class.forName("org.hsqldb.jdbcDriver");
Но мое приложение работает в некоторых котах, но только в одной установке мне пришлось добавить этот код.
Ответ 11
Возможно, что
HSQL://локальный
не может быть разрешено для файла. Посмотрите пример программы здесь:
Пример программы HSQLDB
Посмотрите, сможете ли вы сначала выполнить эту работу, а затем посмотреть, можете ли вы взять эту информацию о конфигурации и использовать ее в конфигурации Spring bean.
Удачи!
Ответ 12
Я думаю, что ваш URL-адрес HSQL неверен. Он также должен включать имя базы данных,
так что-то вроде
jdbc:hsqldb:hsql://localhost/mydatabase
если mydatabase - это имя вашего DB (файла). Не включая это может (я не уверен, что это так) путайте разбор URL-адреса, что может привести к тому, что DriverManagerDS подумает, что ваш драйвер не подходит (он найден, но он считает, что это нехорошо один)
Ответ 13
Не уверен, что это того стоит, но у меня была аналогичная проблема, когда я получал ошибку "java.sql.SQLException: No found driver found". Я нашел эту ветку, исследуя решение.
В результате я решил отказаться от использования java.sql.DriverManager, чтобы получить соединение, а вместо этого создал экземпляр org.hsqldb.jdbc.jdbcDataSource и использовал его.
Основная причина моей проблемы (я полагаю) связана с иерархией загрузчика классов и тем фактом, что JRE работает под управлением Java 5. Несмотря на то, что я смог успешно загрузить класс jdbcDriver, загрузчик классов за java.sql.DriverManager был выше, до такой степени, что он не мог видеть hsqldb.jar, в котором я нуждался.
Во всяком случае, просто помещаем эту заметку здесь, если кто-то другой сталкивается с аналогичной проблемой.
Ответ 14
У меня возникла аналогичная проблема, и, к моему удивлению, проблема была в версии Java.
java.sql.DriverManager из rt.jar не смог загрузить мой драйвер "COM.ibm.db2.jdbc.app.DB2Driver".
Я обновился от jdk 5 и jdk 6 и работал.
Ответ 15
В некоторых случаях проверять разрешения (право собственности).