没有合适的驱动程序的原因找到了(Cause of No suitable driver found

2019-08-31 09:08发布

我试图单元测试(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

Answer 1:

为了让HSQLDB注册自己,你需要访问它的jdbcDriver类。 你可以这样做相同的方式,在这个例子 。

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

它触发jdbcDriver类,它是静态初始化:

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


Answer 2:

“没有合适的驱动程序”通常意味着用于连接URL的语法不正确。



Answer 3:

好吧,这里的解决方案。 大多数人都做出真正的好点,但没有解决问题(感谢您的帮助)。 下面是我找到工作的解决方案。

  1. 从... / WEB-INF / lib下移到罐到PROJECT_ROOT / lib目录
  2. 改变构建路径在Eclipse中反映这一变化。
  3. 清理和重建我的项目。
  4. 运行JUnit测试和BOOM它的工作!

我的猜测是,它必须是与木卫三是如何在/ WEB-INF / lib文件夹中读取罐子。 但谁知道......它现在。



Answer 4:

如果你看看你的原始连接字符串:

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

高超声速文档建议你缺少本地主机后一个别名:

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



Answer 5:

它看起来就像你不指定连接到,应该去像一个数据库名称

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


Answer 6:

太好了,我有类似的问题。 所有的建议是检查JDBC URL sintax



Answer 7:

你可以导入驱动程序(org.hsqldb.jdbcDriver)到源文件中的一个? (要测试的类实际上是你的类路径上)。

如果你不能导入它,那么你可以尝试,包括了hsqldb.jar在您的构建路径。



Answer 8:

我有同样的问题与春,公地DBCP和Oracle 10g。 使用这个网址我得到了“没有合适的驱动程序”的错误:JDBC的:甲骨文:thin@192.168.170.117:1521:基南戈普

上面的网址只是@前面缺少一个完整的结肠。 更正后,错误消失。



Answer 9:

尽量使用静态的主要方法来运行数据源的连接时,我们首先需要运行数据库连接。 由此我们可以在Eclipse作为波纹管实现。

1)打开默认IDE开口的工作区之后的任何IDE(Eclipse或RAD)将在JAVA预期被打开。 尝试从Java切换到数据库的前瞻性,以创建数据源以及虚拟数据库的连接。

2)在数据库中输入准像用户名,密码和特定模式的URL所有细节。

3)然后尝试运行访问数据库的主要方法。

这将解决“未定义的服务器名”。



Answer 10:

由于一些之前回答,这行代码解决了这个问题

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

但我的应用程序在一些雄猫运行,但只在一个安装我不得不添加该代码。



Answer 11:

这可能是

HSQL://本地主机

无法解析到一个文件中。 看看这里的示例程序:

示例程序HSQLDB

看看你是否可以得到工作,然后再看看你可以采取的配置信息,并在Spring bean配置使用它。

祝好运!



Answer 12:

我觉得你的HSQL网址是错误的。 它还应包括数据库名,

所以像

jdbc:hsqldb:hsql://localhost/mydatabase 

如果MyDatabase的是您的DB(文件)的名称。 不包括这可以(我不知道这是否是这里的情况)混淆URL,这可能导致DriverManagerDS认为你的驱动程序是不适合的解析(它被发现,但它认为它是不是一个好一)



Answer 13:

不知道是否值得什么,但我也有类似的问题,我在那里得到一个“java.sql.SQLException中:未找到合适的驱动程序”的错误。 我发现这个线程,而研究一个解决方案。

我结束了我的解决问题的方法是使用java.sql.DriverManager来获取连接放弃,而是建立org.hsqldb.jdbc.jdbcDataSource的实例,并使用了。

我的问题的根本原因(我相信)曾与类加载器层次结构和事实的JRE是运行Java 5,即使我能成功加载jdbcDriver类,背后java.sql.DriverManager中的类加载器是越往上做,以它不能看到我所需要的的hsqldb.jar点。

总之,只要用类似的问题把这个记在这里情况下别人绊倒。



Answer 14:

我正面临类似的问题,让我吃惊的问题是在Java版本。 java.lang.DriverManager中来自rt.jar中无法加载我的司机“COM.ibm.db2.jdbc.app.DB2Driver”。

我从JDK 5和JDK 6升级和它的工作。



Answer 15:

在某些情况下,检查权限(所有权)。



文章来源: Cause of No suitable driver found for