Не найдено подходящего драйвера для
Я пытаюсь провести модульное тестирование (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: не удалось открыть соединение JDBC для транзакции; Вложенное исключение: java.sql.SQLException: не найден подходящий драйвер для 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) at junit.framework.TestCase.runBare(TestCase.java:128) в org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java:76) на junit.framework.TestResult$1.protect(TestResult.java:106) в junit.framework.TestResult.runProtected(TestResult.java:124) на junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:120) на 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) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) Вызывается: java.sql.SQLException: не найден подходящий драйвер для jdbc:hsqldb:hsql://localhost в java.sql.DriverManager.getConnection(Неизвестный источник) в java.sql.DriverManager.getConnection(Неизвестный источник) в 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
15 ответов
Чтобы HSQLDB регистрировался сам, вам нужно получить доступ к его классу jdbcDriver. Вы можете сделать это так же, как в этом примере.
Class.forName("org.hsqldb.jdbcDriver");
Это вызывает статическую инициализацию класса jdbcDriver, которая:
static {
try {
DriverManager.registerDriver(new jdbcDriver());
} catch (Exception e) {}
}
"нет подходящего драйвера" обычно означает, что синтаксис для URL-адреса соединения неверен.
Итак, вот решение. Большинство из них сделали действительно хорошие замечания, но никто не решил проблему (СПАСИБО за помощь). Вот решение, которое я нашел для работы.
- Переместить банки из.../web-inf/lib в PROJECT_ROOT/lib
- Измените путь сборки в затмении, чтобы отразить это изменение.
- почистил и перестроил мой проект.
- побежал тест джунит и БУМ это работало!
Я предполагаю, что это как-то связано с тем, как Ганимед читает jar-файлы в папке / web-inf / lib. Но кто знает... Это работает сейчас.
Если вы посмотрите на исходную строку подключения:
<property name="url" value="jdbc:hsqldb:hsql://localhost"/>
Гиперзвуковые документы предполагают, что вы пропустили псевдоним после localhost:
Похоже, вы не указываете имя базы данных для подключения, должно идти что-то вроде
jdbc:hsqldb:hsql://serverName:port/DBname
Здорово у меня была похожая проблема. Совет для всех, чтобы проверить синтаксис URL JDBC
Как уже отвечали некоторые, эта строка кода решила проблему
Class.forName("org.hsqldb.jdbcDriver");
Но мое приложение запущено в некоторых tomcats, но только в одной установке мне пришлось добавить этот код.
У меня была такая же проблема с пружиной, commons-dbcp и oracle 10g. Используя этот URL, я получил ошибку "нет подходящего драйвера": jdbc: oracle: thin@192.168.170.117: 1521: kinangop
В приведенном выше URL отсутствует двоеточие перед символом @. После исправления ошибка исчезла.
Когда мы пытаемся запустить соединение с источником данных, используя статический метод main, сначала нам нужно запустить соединение с базой данных. Этого мы можем достичь в затмении, как показано ниже.
1) открыть любую IDE(Eclipse или RAD) после открытия рабочей области. По умолчанию IDE будет открыта в перспективе JAVA. Попробуйте переключиться с Java на предполагаемую базу данных, чтобы создать источник данных, а также подключение к виртуальной базе данных.
2) в предполагаемой базе данных введите все данные, такие как имя пользователя, пароль и URL конкретной схемы.
3) затем попробуйте запустить основной метод для доступа к базе данных.
Это разрешит "имя_сервера не определено".
Можете ли вы импортировать драйвер (org.hsqldb.jdbcDriver) в один из ваших исходных файлов? (Чтобы проверить, что класс находится на вашем пути к классу).
Если вы не можете импортировать его, попробуйте включить hsqldb.jar в путь сборки.
Это может быть
HSQL:// локальный
не может быть разрешен в файл. Посмотрите на пример программы здесь:
Посмотрите, сможете ли вы сначала заставить это работать, а затем посмотрите, сможете ли вы взять эту информацию о конфигурации и использовать ее в конфигурации bean-компонента Spring.
Удачи!
Я думаю, что ваш HSQL URL неверен. Он также должен включать имя базы данных,
так что-то вроде
jdbc:hsqldb:hsql://localhost/mydatabase
если mydatabase - это имя вашей БД (файла). Не считая этого, можно (я не уверен, что это так) запутать синтаксический анализ URL, что может привести к тому, что DriverManagerDS посчитает, что ваш драйвер не подходит (он найден, но считает, что это не очень хорошо) один)
Не уверен, стоит ли это чего-то, но у меня была похожая проблема, когда я получал ошибку "java.sql.SQLException: не найден подходящий драйвер". Я нашел эту тему во время исследования решения.
Способ, которым я в итоге решил свою проблему, состоял в том, чтобы отказаться от использования java.sql.DriverManager, чтобы получить соединение, и вместо этого создал экземпляр org.hsqldb.jdbc.jdbcDataSource и использовал его.
Основная причина моей проблемы (я полагаю) была связана с иерархией загрузчика классов и тем фактом, что JRE работала на Java 5. Несмотря на то, что я мог успешно загрузить класс jdbcDriver, загрузчик классов за java.sql.DriverManager был выше, до такой степени, что он не мог видеть hsqldb.jar, в котором я нуждался.
В любом случае, просто разместите эту заметку здесь на случай, если кто-то другой столкнется с аналогичной проблемой.
Я столкнулся с подобной проблемой, и, к моему удивлению, проблема была в версии Java. java.sql.DriverManager пришел из rt.jar не смог загрузить мой драйвер "COM.ibm.db2.jdbc.app.DB2Driver".
Я обновил с JDK 5 и JDK 6, и это сработало.
В некоторых случаях проверьте разрешения (право собственности).