org.h2.Driver的java ClassNotFoundException

时间:2010-10-24 11:31:30

标签: java jdbc h2 classnotfoundexception

我正在尝试使用H2连接到Java中的数据库(使用Eclipse作为IDE)。样本(下方)抛出ClassNotFoundException。问题是,我做了将h2 jar文件添加到系统CLASSPATH。我甚至在控制台中通过printenv多次检查了它。我省略了一步吗?

CODE:

import java.sql.*;

public class Program {

 /**
  * @param args
  */
 public static void main(String[] args) 
  throws Exception{

  try{
   System.out.println("hello, world!");
   Class.forName("org.h2.Driver");
   Connection conn = DriverManager.getConnection("jdbc:h2:~/testdb", "sa", "");
   // add application code here
   conn.close();
  }catch(ClassNotFoundException ex){
   System.out.println( "ERROR: Class not found: " + ex.getMessage() );

  }
  System.exit(0);

 }

}

14 个答案:

答案 0 :(得分:30)

在我的情况下(有点无关,但值得一提),我将此添加到我的maven pom中,并且错误消息消失了:

  <dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>xxx</version> <!-- ex: 1.2.140 -->
  </dependency>

或者如果您在单元测试期间仅使用h2:

  <dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>xxx</version> <!-- ex: 1.2.140 -->
    <scope>test</scope>
  </dependency>

答案 1 :(得分:13)

最近,在使用EAP驱动程序的最新版本(1.4.196)时,我在IntelliJ IDEA 2017.2 H2中遇到java.lang.ClassNotFoundException: org.h2.Driver异常。解决方案是降级到1.4.195工作。

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.195</version>
    <scope>test</scope>
</dependency>

答案 2 :(得分:7)

  

示例(下面)抛出ClassNotFoundException

然后驱动程序不在类路径上。

  

问题是,我确实将h2 jar文件添加到系统CLASSPATH中。我甚至在控制台中通过'printenv'检查了几次。

你是怎么做到的?请显示获得的输出。

  

我省略了一步吗?

我不能用提供的信息说出来。但是依赖于CLASSPATH环境变量无论如何都是一种不好的做法,如果你在命令行上运行Java,你应该使用-cp选项。像这样:

java -cp h2.jar com.acme.Program

  

当我使用RUN菜单时,有没有办法让Eclipse使用jar文件,这样我就不必一直从控制台运行?

是。在Eclipse下,将JAR添加到项目构建路径:项目右键单击,然后属性&gt; Java构建路径&gt;图书馆&gt;添加JARS ... (假设H2 JAR在相对于项目的目录中可用)。其他IDE有相同的方法。

答案 3 :(得分:3)

在我的情况下(我使用sbt) 变化

libraryDependencies += "com.h2database" % "h2" % "1.4.196" % Test

libraryDependencies += "com.h2database" % "h2" % "1.4.196"

答案 4 :(得分:2)

<scope>[database_name]</scope>应包含您正在使用的数据库。如果将db从一个更改为另一个,请确保也更改范围。一旦我改变它,错误就消失了。

答案 5 :(得分:1)

我遇到以下错误(使用Intellij)

  

org.h2.Driver的java ClassNotFoundException

通过删除pom中的作用域来解决它。

是:

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.197</version>
        <scope>test</scope>
    </dependency>

更改为:

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.197</version>
    </dependency>

当我们将Maven Quickstart项目实现为对另一个项目的依赖项时,会出现此类错误。通常仅作为对junit的测试而发生。因此,在应用程序中它将不起作用。

答案 6 :(得分:0)

使用发行版。

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>RELEASE</version>
        <scope>compile</scope>
    </dependency>

答案 7 :(得分:0)

就我而言,这实际上是连接字符串问题。我看到了this

在下面的URL字符串中添加mem后,它就起作用了。

String url = "jdbc:h2:mem:~/test";

答案 8 :(得分:0)

如果在build.gradle中使用Gradle更改依赖项:

testCompile group: 'com.h2database', name: 'h2', version: '1.4.199'

compile group: 'com.h2database', name: 'h2', version: '1.4.199'

答案 9 :(得分:0)

在h2数据库中使用 2次时,我遇到了相同的问题,因为驱动程序管理器无法识别正确的连接类型

  • 当您使用“ jdbc:h2:localhost:123 / db”时,它分为“ jdbc”,“ h2:localhost”,“ 123 / db”,
  • 所以这里的期望值是 h2 ,但由于核心正则表达式中存在问题,因此无法获取 h2:localhost ,因此可以从已加载的驱动程序列表中识别驱动程序类

使用完整路径,例如:

  • 不要:“ jdbc:h2:testdb”,请执行:“ jdbc:h2:/ c:/.../ testdb”
  • 不要:“ jdbc:h2:localhost:123 / db”,要做:“ jdbc:h2:// localhost:123 / db”

答案 10 :(得分:0)

我正在与intelliJ合作。我在lib文件夹中有“ h2-1.4.200”。从到,我尝试了所有建议。奇怪的是,我的问题只能通过去以下地方解决: 项目结构->工件->输出布局->可用元素 然后展开文件夹的内容,然后右键单击“ h2-1.4.200”,最后选择“提取到输出根目录”。 :) The strange solution

答案 11 :(得分:0)

这与 testRuntimeOnly 'com.h2database:h2:1.4.200'

并在 application.yaml 属性中 删除或注释掉 # driverClassName: org:h2:Driver

根据 springboot 最新文档,不需要 jdbc 驱动程序,因为它会自动检测到。

答案 12 :(得分:-1)

使用<scope>test</scope>不应在逻辑上起作用。除非您只需要在测试阶段使用它,否则请尝试使用<scope>runtime</scope><scope>provided</scope>进行测试。

在maven文档中,它说<scope>test</scope> 依赖关系对于正常使用该应用程序不是必需的,并且仅在测试编译和执行阶段可用。
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

答案 13 :(得分:-1)

我使用sbt。 在build.sbt中,我删除了“ h2”依赖项,而是包括了它: “ com.h2.database”%“ h2”%“ 1.4.200” 而且有效!