Java 1.8连接Oracle 19c无法获取JDBC连接,求解决方案
解决ORA-28040: No matching authentication协议问题
你的核心问题是JDBC驱动版本与Oracle 19c的认证协议不兼容,ojdbc6仅适配Oracle 11g及更早版本,不支持Oracle 12c+引入的新认证机制,而你使用的是Oracle 19c,Java 8需要对应版本的驱动。
解决方案步骤:
替换为兼容的JDBC驱动:使用
ojdbc8,它是Oracle官方为Java 8和Oracle 12c/18c/19c提供的适配驱动。- 移除项目中所有旧的ojdbc5/6 jar包,确保没有依赖残留
- 若用Maven,添加依赖:
<dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.3.0.0</version> </dependency> - 手动引入的话,将ojdbc8.jar放入项目lib目录
更新Hibernate方言:当前使用的
Oracle10gDialect不适配Oracle 19c,改为对应方言:- 若Hibernate版本≥5.3,使用
org.hibernate.dialect.Oracle19cDialect - 若Hibernate版本较低,使用
org.hibernate.dialect.Oracle12cDialect - 在Spring配置文件中修改方言配置,比如:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle19cDialect
- 若Hibernate版本≥5.3,使用
验证连接URL(可选):如果替换驱动后仍有问题,在JDBC URL中显式指定允许的认证版本:
jdbc:oracle:thin:@//your-host:port/your-service?oracle.net.allowed_login_version=12清理依赖冲突:检查项目依赖树,确保没有多个版本的ojdbc包被引入(比如通过其他依赖间接引入旧版本),使用Maven的
mvn dependency:tree命令排查,排除冲突依赖。
完成以上步骤后重新启动应用,即可解决连接问题。
内容的提问来源于stack exchange,提问作者Azim Uddin
相关产品推荐
相关产品推荐

