如何在Java 17中使用HikariCP连接Oracle

风婷吖_7086

风婷吖_7086

2026-10-08

111人浏览

原创

必须用ojdbc11(如23.7.0.24.07),因其声明module-info.java支持jpms;url须用服务名格式(如/xe或//host:port/service_name);module-info.java中必须显式requires oracle.jdbc,否则drivermanager报no suitable driver。

如何在java 17中使用hikaricp连接oracle

Java 17 连不上 Oracle,八成不是 HikariCP 的问题,而是驱动、URL 或模块系统三者之一没对齐。ojdbc8 在 Java 17 模块化环境下会直接类加载失败,ojdbc11 才是唯一可靠选择;URL 写成 jdbc:oracle:thin:@host:1521:XE(SID 格式)大概率报 ORA-12505;module-info.java 缺 requires oracle.jdbc 会导致运行时报 No suitable driver。

必须用 ojdbc11,不是 ojdbc8

Java 17 启用模块系统(JPMS),而 ojdbc8 没声明 module-info.java,会被加载为 unnamed module,导致 java.lang.NoClassDefFoundError: javax/sql/DataSource 或 module not found: java.xml.bind。ojdbc11(如 com.oracle.database.jdbc:ojdbc11:23.7.0.24.07)已正确定义模块名 oracle.jdbc,且兼容 Java 17+。

  • Maven 中显式排除旧驱动:<exclusion><groupid>com.oracle</groupid><artifactid>ojdbc6</artifactid></exclusion>
  • 不要用 Maven Central 上非 Oracle 签名的“ojdbc11”镜像包——它们常缺模块声明
  • 启动 JVM 时无需 --add-opens(ojdbc11 已适配),但若用到反射操作 Oracle 特有类,才需加 --add-opens java.base/java.lang=ALL-UNNAMED

URL 必须用 service_name,不能用 SID

Oracle 12c+(含 19c/21c)默认启用多租户和 PDB,@host:port:SID 格式在容器化或 RAC 环境下基本失效,连接能建上但立即抛 ORA-12505。正确格式是双斜杠 + service_name:

QuantOracle
QuantOracle

63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……

下载
  • ✅ 正确:jdbc:oracle:thin:@//localhost:1521/ORCLPDB1(注意开头两个 /)
  • ✅ 本地 XE 可用:jdbc:oracle:thin:@localhost:1521/XE(注意是 /XE,不是 :XE)
  • ❌ 错误:jdbc:oracle:thin:@localhost:1521:ORCL(SID 格式,已淘汰)
  • 不确定 service_name 时,登录 DB 执行:SELECT SYS_CONTEXT('USERENV', 'SERVICE_NAME') FROM DUAL

module-info.java 必须显式 requires oracle.jdbc

模块化项目(含 module-info.java)中,仅靠 Maven 依赖或 JVM 参数无法让模块系统识别 Oracle 驱动。DriverManager 会因类加载器隔离找不到驱动类,抛出 SQLException: No suitable driver。

  • 必须写:requires oracle.jdbc;(不是 requires transitive oracle.jdbc)
  • 完整示例:
    module my.app {
        requires java.sql;
        requires oracle.jdbc;
        exports com.myapp.db;
    }
  • Spring Boot 用户注意:若使用 spring-boot-starter-jdbc,它不强制模块化,但一旦你加了 module-info.java,就必须补上这行,否则编译或运行都过不去

connection-init-sql 和 auto-commit 是 Oracle 事务正确的前提

Oracle JDBC 驱动默认 autoCommit = true,这会导致 Spring @Transactional 失效、手动 conn.commit() 无效果,甚至出现静默数据丢失。HikariCP 不干预该状态,必须主动设为 false 并初始化 session。

  • 必须配置:config.setAutoCommit(false)
  • 推荐 connection-init-sql:ALTER SESSION SET CURRENT_SCHEMA = MY_SCHEMA(避免每次 SQL 写 schema 前缀)
  • 也可用:SET AUTOCOMMIT OFF(仅 thin 模式支持,更底层)
  • 别信 connection-test-query:HikariCP 5.0+ 默认走 isValid(),Oracle 支持且更快;设 SELECT 1 FROM DUAL 反而多一次 round-trip

真正容易被忽略的是驱动版本与模块声明的耦合性——ojdbc11 不只是“支持 Java 17”,它是唯一能让 DriverManager.getConnection() 在模块路径下成功解析并加载驱动类的版本。哪怕 URL 和参数全对,缺了 requires oracle.jdbc,应用启动那一刻就注定失败。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

oracle java

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

9977

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7122

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6272

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1084

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

908

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1316

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2629

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19951

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1175

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程