ojdbc8.jar是当前最通用的选择,支持运行时JDK 8至21、Oracle 11g至21c,实现JDBC 4.2规范;它不依赖编译JDK版本,只认java -version输出的运行时JVM版本,且官方已验证在JDK 17/21下稳定运行。
ojdbc8.jar 是当前最通用的选择,只要运行时 jvm ≥ 8(包括 jdk 11/17/21),且 oracle 数据库是 11g 及以上,它基本都能扛住。别被名字里的“8”骗了——它不是只配 jdk 8。
怎么判断该用哪个 ojdbc.jar?看运行时 JVM 版本,不是编译版本
常见错误现象:java.lang.UnsupportedClassVersionError: oracle/jdbc/OracleDriver has been compiled by a more recent version of the Java Runtime
这通常不是 ojdbc8.jar 的锅,而是你误用了 ojdbc10.jar 或 ojdbc11.jar 却在 JDK 8 下跑。
-
ojdbc8.jar:JDBC 4.2 规范,最低运行时 JDK 8,官方测试兼容至 JDK 21 -
ojdbc10.jar:JDBC 4.3,最低运行时 JDK 10;放在 JDK 8 下直接报错 -
ojdbc11.jar:最低运行时 JDK 11;JDK 8/10 跑不了 - 关键点:Maven 编译用的 JDK 版本不重要,运行时 JVM 版本才决定能否加载类
Spring Boot 项目里 classpath 混入多个 ojdbc.jar 怎么办?
典型错误现象:java.lang.LinkageError: loader constraint violation 或 oracle.jdbc.driver.T4CConnection cannot be cast to java.sql.Connection —— 大概率是 classpath 同时存在 ojdbc6.jar 和 ojdbc8.jar。
- 检查
mvn dependency:tree | grep ojdbc,确认是否有多版本残留 - 在
pom.xml中显式<exclusion></exclusion>掉传递依赖里的旧版驱动(比如某些老 Spring Boot starter 自带ojdbc6) - 本地仓库里手动删掉
~/.m2/repository/com/oracle/下的非目标版本目录(如ojdbc6、ojdbc7) - IDE 中刷新 Maven 项目后,再检查
External Libraries列表是否只剩一个ojdbc8-*.jar
数据库是 Oracle 11g,但应用跑在 JDK 17 上,能用 ojdbc11.jar 吗?
不能。虽然 ojdbc11.jar 支持 JDK 17,但它**不支持 Oracle 11g 的部分协议特性**(比如旧认证方式、服务名解析逻辑),连接时大概率抛 ORA-28040: No matching authentication protocol 或静默超时。
- 查清数据库真实版本:
SELECT * FROM v$version - 对照 Oracle 官方 JDBC FAQ 的 “Supported Database Versions” 表格:只有
ojdbc8.jar(12.2.0+)明确支持 11g/12c/19c/21c 全系列 - Spring Boot 3.x 默认要求 JDK 17,但数据库是 11g 时,必须选
ojdbc8-21.12.0.0.jar这类小版本锁定包,而非ojdbc11 - 生产环境务必固定小版本号,避免
ojdbc8-latest.jar自动升级引入连接池初始化失败等静默变更
Maven 找不到 com.oracle:ojdbc8 怎么办?
这是常态——Oracle 驱动未发布到 Maven 中央仓库,Missing artifact com.oracle:ojdbc8 不是配置错误,而是设计如此。
- 去 Oracle 官网下载页 注册账号后下载
ojdbc8.jar(注意选 “ojdbc8-full.tar.gz” 或 “ojdbc8.jar” 单文件) - 执行安装命令(路径和版本号按实际调整):
mvn install:install-file -Dfile=ojdbc8.jar -DgroupId=com.oracle.database.jdbc -DartifactId=ojdbc8 -Dversion=21.12.0.0 -Dpackaging=jar
- 新版驱动的
groupId已从com.oracle改为com.oracle.database.jdbc,Maven 依赖要同步改,否则仍会报 missing - 验证是否装成功:检查
~/.m2/repository/com/oracle/database/jdbc/ojdbc8/21.12.0.0/下是否有ojdbc8-21.12.0.0.jar
真正容易被忽略的是:驱动版本号里的数字(如 ojdbc8)对应的是 JDBC 规范版本,不是 JDK 主版本号;而数据库版本、JVM 运行时版本、Maven 依赖坐标三者必须交叉对齐,缺一不可。
立即学习“Java免费学习笔记(深入)”;



















