org.h2.Driver的java ClassNotFoundException
我正在尝试使用H2连接到Java中的数据库(使用Eclipse作为IDE)。 示例(下面)抛出ClassNotFoundException
。 问题是,我确实将h2 jar文件添加到系统CLASSPATH中。 我甚至在控制台中通过printenv
多次检查过它。 我省略了一步吗?
码:
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); } }
在我的情况下(有点无关,但值得一提),我将此添加到我的maven pom中,并且错误消息消失了:
com.h2database h2 xxx
或者如果您在unit testing期间仅使用h2:
com.h2database h2 xxx test
最近我在使用最新版本(1.4.196)的H2驱动程序时遇到了IntelliJ IDEA 2017.2 EAP中的java.lang.ClassNotFoundException: org.h2.Driver
exception。 解决方案是降级到1.4.195,这是有效的。
com.h2database h2 1.4.195 test
示例(下面)抛出ClassNotFoundException
然后驱动程序不在类路径上。
问题是,我确实将h2 jar文件添加到系统CLASSPATH中。 我甚至在控制台中通过’printenv’检查了几次。
你是怎么做到的? 请显示获得的输出。
我省略了一步吗?
我不能用提供的信息说。 但是依赖于CLASSPATH
环境变量无论如何都是一种不好的做法,如果你在命令行上运行Java,你应该使用-cp
选项。 喜欢这个:
java -cp h2.jar com.acme.Program
有没有办法在我使用RUN菜单时将Eclipse设置为使用jar文件,这样我就不必一直从控制台运行?
是。 在Eclipse下,将JAR添加到项目构建路径: 右键单击项目,然后单击 Properties> Java Build Path> Libaries> Add JARS … (假设H2 JAR在相对于项目的目录中可用)。 其他IDE有相同的方法来做到这一点。
应包含您正在使用的数据库。 如果将db从一个更改为另一个,请确保也更改范围。 一旦我改变它,错误就消失了。
在我的情况下(我使用sbt)改变
libraryDependencies += "com.h2database" % "h2" % "1.4.196" % Test
至
libraryDependencies += "com.h2database" % "h2" % "1.4.196"
使用
不应该在逻辑上起作用。 尝试使用
或
,除非您只需要测试阶段。
在maven文档中,它表示正常使用应用程序不需要
依赖关系,并且仅适用于测试编译和执行阶段
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
- 调试ClassNotFoundException
- 带有已部署的动态Web项目的WebSphere ClassNotFoundException
- 使用JDBC连接到MS SQLServer时出现ClassNotFoundException
- IntelliJ IDEA:ClassNotFoundException如果运行Debug,执行/运行确实有效
- 没有在路径DexPathList上找到类
- 启动java.util.concurrent.ExecutionException期间子容器失败
- 如何捕获java.lang.NoClassDefFoundError?
- 如何设置rmiregistry使用的类路径?
- classpath – 从命令行运行java程序