Java18连接Oracle11g添加ojdbc6后仍报驱动类找不到异常
ClassNotFoundException: oracle.jdbc.driver.OracleDriver 排查修复
现有操作的核心错误
- JAR包存放路径完全无效:从高版本JDK开始,
JDK安装目录/lib属于核心类路径,受模块化安全校验保护,用户自行放入的第三方JAR不会被应用类加载器识别。把JDK的lib路径加到系统Path变量也没有任何作用——Path是操作系统查找可执行文件的配置,和Java类加载查找class/JAR的逻辑无关。 - 驱动版本与JDK版本不兼容:你使用的
ojdbc6.jar是适配JDK 6的驱动,类文件版本无法在JDK 18环境下运行。Oracle JDBC驱动的命名规则是ojdbcN对应适配JDK N版本,JDK 18需要使用ojdbc11.jar,该版本驱动向下兼容Oracle 11.2g数据库,不存在连接兼容问题。 - 驱动类名过时:旧版
oracle.jdbc.driver.OracleDriver已经被标记为废弃,新版驱动统一使用oracle.jdbc.OracleDriver,且JDBC 4.0及以上版本支持SPI自动注册驱动,不需要手动调用Class.forName()加载。
修复步骤
- 先删除你之前放到
C:\Program Files\Java\jdk-18.0.1.1\lib下的ojdbc6.jar、ojdbc6_g.jar,避免后续类加载冲突。 - 下载ojdbc11版本的JDBC驱动,存放到你自己的项目目录下,不要往JDK安装目录放任何第三方依赖。
- 按你的项目场景正确引入依赖:
- 如果是手动用命令行编译运行:编译、运行时通过
-cp参数指定驱动JAR路径,示例命令如下:# 编译阶段指定驱动类路径 javac -cp D:/jars/ojdbc11.jar OracleConnect.java # 运行阶段指定当前目录+驱动类路径 java -cp .;D:/jars/ojdbc11.jar OracleConnect - 如果用IDEA、Eclipse等IDE开发:直接在项目的Libraries配置项中添加ojdbc11.jar为项目依赖即可,不需要修改任何系统环境变量。
- 如果是手动用命令行编译运行:编译、运行时通过
- 调整数据库连接代码,移除过时写法,参考代码如下:
import java.sql.Connection; import java.sql.DriverManager; public class OracleConnect { public static void main(String[] args) throws Exception { // JDBC4.0+无需手动加载驱动,如需显式声明使用新版类名 // Class.forName("oracle.jdbc.OracleDriver"); String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:xe"; String username = "system"; String password = "root"; try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) { System.out.println("连接成功,连接对象:" + conn); } } }
补充:如果一定要通过环境变量配置类路径,需要修改的是
CLASSPATH系统变量,而非Path,在变量值中追加ojdbc11.jar的完整文件路径即可。但这种方式全局生效容易引发版本冲突,不推荐使用。
内容的提问来源于stack exchange,提问作者Shrutika Dorugade
相关产品推荐
相关产品推荐

