【问题标题】:org.hsqldb.jdbcDriver ClassNotFoundException while running junit test for a methodorg.hsqldb.jdbcDriver ClassNotFoundException 同时为方法运行 junit 测试
【发布时间】:2011-07-01 06:07:06
【问题描述】:

我正在使用一种返回数据源的方法。方法如下:

public static DataSource getDataSource(){
        String url;
        //url="jdbc:hsqldb:file:"+filePath;
        url = "jdbc:hsqldb:file:D:/EclipseWorskpace/ew-pg/lmexadapter/hsqldb-example/src/main/webapp/WEB-INF/data/db/hsqldb.jar";
        BasicDataSource basicDataSource = new BasicDataSource();
        basicDataSource.setUsername("SA");
        basicDataSource.setPassword("password");
        basicDataSource.setDriverClassName("org.hsqldb.jdbc.JDBCDriver");
        basicDataSource.setUrl(url);
        System.out.println("$$$$$$$$ URL is : " + url);
        return basicDataSource;
    }

我从 dao 调用这些方法。有了这一切,我将 ibatis 用于我的 OR 映射。当我通过 junit test 运行我的测试用例时,它给了我一个例外:

" org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.hsqldb.jdbcDriver'
    at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1259)
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1192)
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:884)
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
    at org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:213)
    ... 35 more
Caused by: java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1253)
    ... 39 more
"

【问题讨论】:

  • @Jigar:我宁愿看到他们发布太多堆栈跟踪,也不愿看到太少。

标签: java hsqldb


【解决方案1】:

通过在here的类路径中下载并添加HSQLDB jar

【讨论】:

  • 如果您有其他解决此问题的建议,我无法将 jar 添加到我的类路径中
  • 为什么??,没有其他解决方案
  • @Chitresh:既然这是唯一正确的解决方案,那你就不走运了。
  • 嗨,我无法在我的类路径中添加 jar,如果您有其他建议,请告诉我,我曾尝试在我的 tomcat 服务器库中添加 jar,但它也没有从那里得到
  • i had tried adding jar in my tomcat server lib, && hi i can't add jar in my classpath, 将返回 false。它应该工作。重试将罐子放入common\lib
【解决方案2】:

如果您已经下载了 HSQLDB jar 文件并正确安装,那么我会检查类路径。

【讨论】:

  • 如果必须不将其添加到类路径中,那么我该怎么做。我有一个解决方案可以在我的 tomcat 库中添加一个 jar,但它也给了我同样的例外。你知道如何解决这个问题吗
  • 很可能你应该添加到你的构建路径中。我假设您使用的是 Eclipse,然后右键单击您的项目,单击属性,然后将其添加到您的构建路径中。你把你的jar文件放在哪里了?如何?您可以将文件拖放到项目的 lib 目录中。
【解决方案3】:

这里之前的答案是对的,也是错的。

需要将 HSQLDB jar 添加到类路径中。问题是在之前的答案中,提问者被指向项目的旧版本,这些版本没有他们正在寻找的类。未找到的类仅在 HSQLDB 版本 2 中,可从http://sourceforge.net/projects/hsqldb/files/hsqldb/hsqldb_2_3/获得

【讨论】:

  • 谢谢,很幸运你昨天回答了这个问题!
【解决方案4】:

如果您使用的是 maven,请尝试添加

<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.4.0</version>
    <scope>runtime</scope>
</dependency>

到你的 pom.xml

【讨论】:

    【解决方案5】:

    只需使用 Grab:

    @Grab('org.hsqldb:hsqldb:2.3.3')
    @GrabConfig(systemClassLoader=true)
    

    更多信息:http://groovy-lang.org/databases.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多