Oracle JDBC 常见问题解答 (FAQ)
本常见问题解答提供关于 Oracle JDBC 驱动程序的常见问题解答。请注意,本常见问题解答仅解答特定技术问题,并涵盖已知问题。有关这些特性以及如何在应用中使用这些特性的更多详细信息,请参阅《JDBC 开发人员指南》和 JDBC 的 Javadoc。
常见问题解答
全部展开全部收起-
-
26ai 有哪些新特性?
-
有哪些面向 Java 开发人员的 Oracle Database Cloud Service 文档?
-
JDBC 常见问题
全部展开全部收起-
-
什么是 JDBC?
-
如何获取关于 JDBC 的更多信息?
-
如何获取关于 Java 的更多信息?
-
版本 |
GA 日期 |
标准支持终止日期 |
扩展支持终止日期 |
持续支持终止日期 |
|---|---|---|---|---|
| 26ai | 2026 年 1 月 |
|
2031 年 12 月 | 未定义 |
| 21c(创新版本) | 2021 年 8 月 | 2027 年 7 月 | 不适用 | 未定义 |
| 19c(长期发行版本) | 2019 年 4 月 | 2029 年 12 月(请参阅 Lifetime Support Policy) | 2032 年 12 月 | 未定义 |
| 18c | 2018 年 7 月 | 2021 年 6 月 | 不适用 | 未定义 |
| 12.2 | 2017 年 3 月 | 2020 年 11 月 30 日(针对 12.2.0.1 的有限错误更正期限:2020 年 12 月 1 日至 2022 年 3 月 31 日) | 不适用 | 未定义 |
| EE 12.1 | 2013 年 6 月 | 2018 年 7 月 | 2022 年 7 月 | 未定义 |
互操作性矩阵 |
Database 23.x |
Database 21.x |
Database 19.x |
Database 18.3 |
Database 12.2 和 12.1 |
|---|---|---|---|---|---|
| JDBC 23.x | 是 | 是 | 是 | 否 | 否 |
| JDBC 21.x | 是 | 是 | 是 | 曾经支持 | 曾经支持 |
| JDBC 19.x | 是 | 是 | 是 | 曾经支持 | 曾经支持 |
| JDBC 18.x | 否 | 曾经支持 | 曾经支持 | 曾经支持 | 曾经支持 |
| JDBC 12.2 和 12.1 | 否 | 曾经支持 | 曾经支持 | 曾经支持 | 曾经支持 |
Oracle Database 版本 |
特定于 JDK 版本的 JDBC Jar 文件 |
|---|---|
| 23.x | ojdbc17.jar 兼容 JDK17、JDK19、JDK21 和 JDK25,并支持 Jakarta API ojdbc11.jar 兼容 JDK11 和 JDK21 ojdbc8.jar 兼容 JDK8 和 JDK11 |
| 21.x | ojdbc11.jar 兼容 JDK11、JDK17、JDK19 和 JDK21 ojdbc8.jar 兼容 JDK8 和 JDK11 |
| 19.x | ojdbc10.jar 兼容 JDK11、JDK17、JDK19 和 JDK21(19.25 及更高版本) ojdbc8.jar 兼容 JDK8、JDK11、JDK17、JDK19 和 JDK21(19.25 及更高版本) |
| 18.x | ojdbc8.jar 兼容 JDK8 和 JDK11 |
| 12.2 或 12cR2 | ojdbc8.jar 兼容 JDK 8 |
| 12.1 或 12cR1 | ojdbc7.jar 兼容 JDK 7 和 JDK 8 ojdbc6.jar 兼容 JDK 6 |
| 11.2 或 11gR2 | ojdbc6.jar 兼容 JDK 6、JDK 7 和 JDK 8 (注意:仅 11.2.0.3 和 11.2.0.4 支持 JDK7 和 JDK8) ojdbc5.jar 兼容 JDK 5 |
Oracle Database 版本 |
JDBC 规范合规性 |
|---|---|
| 23.x 和 21.x | ojdbc11.jar 遵循 JDBC 4.3 规范 ojdbc8.jar 遵循 JDBC 4.2 规范 |
| 19.x | ojdbc10.jar 遵循 JDBC 4.3 规范 ojdbc8.jar 遵循 JDBC 4.2 规范 |
| 18.3 | ojdbc8.jar 遵循 JDBC 4.2 规范 |
| 12.2 或 12cR2 | ojdbc8.jar 遵循 JDBC 4.2 规范 |
| 12.1 或 12cR1 | ojdbc7.jar 遵循 JDBC 4.1 规范 ojdbc6.jar 遵循 JDBC 4.0 规范 |
| 11.2 或 11gR2 | ojdbc6.jar 遵循 JDBC 4.0 规范 ojdbc5.jar 遵循 JDBC 3.0 规范 |
其他版本特定问题
全部展开全部收起-
-
Oracle JDBC 驱动程序是否通过了 OpenJDK 认证?
-
对于 JDK11,Oracle Database 19.x 适合使用哪些 JDBC 驱动程序?
-
如何使用上表所示以外版本的 JDBC?
-
如何获取 JDBC Jar 文件?
-
Oracle Database 19.x JDBC 驱动程序下载页面都提供哪些 Jar 文件?
-
Oracle JDBC 常见问题
全部展开全部收起-
-
Oracle 都提供哪些 JDBC 驱动程序?
-
我应该使用哪种驱动程序?
-
服务器端 Thin 驱动程序和服务器内部驱动程序需要使用哪些 Jar 文件?
-
第三方提供商能否在分发自家软件时一同分发 Oracle JDBC 驱动程序?
-
Oracle JDBC 驱动程序需要哪些权限?
-
安装
全部展开全部收起-
-
如何安装 Thin 驱动程序?
-
如何安装 OCI 驱动程序?
-
如何安装服务器端内部驱动程序或 Thin 服务器内部驱动程序?
-
DriverManager 和 DataSource
全部展开全部收起-
-
DriverManager 与 DataSource 有何区别?
-
我应该使用哪种连接池?
-
什么是 JDBC OCIConnectionPool?
-
连接
全部展开全部收起-
-
URL 的格式是什么?
-
数据库描述的格式是什么?
-
如何使用 Properties 参数?
-
不需要向 DriverManager 注册 OracleDriver 类吗?
-
连接服务器内部驱动程序时,我应该使用什么用户名和密码?
-
我在设置了一个较高的默认预取值时发生了 OutofMemory 错误,怎么办?
-
什么是服务连接字符串?
-
如何以 SYSDBA 或 SYSOPER 身份连接?
-
Oracle JDBC 驱动程序支持哪些加密方法?
-
使用 Thin 驱动程序时,如何启用加密和校验和验证?
-
什么是代理身份验证?
-
Oracle JDBC 驱动程序是否支持 SSL?
-
Oracle JDBC 驱动程序是否在连接 URL 中提供 LDAP 支持?
-
如何使用 JDBC 连接位于防火墙后方的数据库服务器?
-
-
Statement、PreparedStatement 和 CallableStatement
-
什么是 defineColumnType?我应当何时使用?
-
defineColumnType 是否会在服务器上强制执行转换操作?
-
如何在 JDBC 驱动程序层面关闭 EscapeProcessing,而不是在应用代码中调用 stmt.setEscapeProcessing (false)?
-
Oracle JDBC 驱动程序是否提供 Bind by Name(按名称绑定)工具?
-
对于 PreparedStatement 中的 setXXX 方法,Oracle JDBC 驱动程序如何确定数据类型?
-
如果目标参数的类型与 setXXX 方法预设的类型不一致,会怎么样?
-
驱动程序为何不在客户端侧执行转换?
-
当在表中插入列时,应当使用哪种字节数据类型?
-
在表中插入列时,应使用哪种字符数据类型?
-
setString、setCharacterStream 和 setAsciiStream 的大小是多少?通过 setBytes 和 setBinaryStream 处理二进制数据时的大小限制是多少?
-
格式 |
Stmt |
驱动程序 |
下限 |
上限 |
绑定机制 |
备注 |
|---|---|---|---|---|---|---|
| 所有 | 所有 | 所有 | 0 | 0 | Null | |
| 所有 | SQL | 客户端 | 1 个字符 | 32766 个字符 | 直接 | |
| 所有 | SQL | 客户端 | 32767 个字符 | 2147483647 字节 | 流 | |
| 所有 | SQL | 客户端 | 2147483648 字节 | 2147483647 个字符 | 临时 Clob |
|
| CHAR | |
服务器 | 1 个字符 | 65536 字节 | 直接 |
1, 2 |
| NCHAR | |
|
1 个字符 | 4000 字节 | 直接 |
|
| NCHAR | |
|
4001 字节 | 2147483647 个字符 | 临时 Clob |
|
| CHAR | |
|
65537 字节 | 2147483647 个字符 | 流 |
|
| |
|
|
2147483647 字节 | 2147483647 个字符 | 临时 Clob |
| 所有 | PL/SQL | 所有 | 1 个字符 | 32512 个字符 | 直接 | |
| 所有 | PL/SQL | 所有 | 32512 个字符 | 2147483647 个字符 | 临时 Clob |
API |
格式 |
Stmt |
驱动程序 |
下限 |
上限 |
绑定机制 |
注意 |
|---|---|---|---|---|---|---|---|
| setBytesForBlob | n/a |
所有 | 所有 | 0 |
0 |
Null | |
| |
|
所有 | 客户端 | 1 字节 | 2000 字节 |
直接 | |
| |
|
所有 | 客户端 | 2001 字节 | 21474836487 字节 | 临时 blob | 2 |
| setStringForClob | 所有 |
所有 | 所有 | 0 | 0 | Null | |
| |
所有 |
所有 | 客户端 | 1 个字符 | 32766 个字符 | 直接 | |
| |
所有 |
所有 | 客户端 | 32766 个字符 | 2147483647 个字符 | 临时 Clob | |
| |
所有 |
所有 | 服务器 | 1 个字符 | 4000 字节 | 直接 | |
| |
所有 |
所有 | 服务器 | 4001 字节 | 2147483647 个字符 | 临时 Clob | 1 |
全部展开全部收起
-
-
切换绑定类型是否会强制执行额外的服务器端语句解析?
-
如何在 CallableStatements 和程序中使用 IN OUT 参数?
-
当绑定类型发生变更时,多态 PL/SQL 程序的选择是否会改变?
-
现有代码是否会改变?
-
某些情况下,驱动程序会创建临时 lob,驱动程序是否会跟踪并释放这些 lob?
-
我们使用可变宽度字符集(如 UTF8),驱动程序是否会按照字符序列的实际字节长度进行更正?
-
是否应使用 setString 等来创建超长字符串?
-
LONG RAW 和 LONG 列类型已经弃用,为什么还要使用 setXXXStream API?
-
LOB API 更加灵活,对吗?
-
为什么我无法创建一个 PreparedStatement 来执行 select * from tab where id in (?, ?, ?, ...)?
-
ResultSet
全部展开全部收起-
-
"Exhausted Resultset: prepare_for_new_get" 是什么意思?
-
为什么我必须关闭 ResultSet?
-
基本数据类型
全部展开全部收起-
-
DATE 和 TIMESTAMP 有何区别?
-
我可以绑定的最长值是多少?
-
方法 |
列类型 |
最大长度 |
|---|---|---|
setBytes |
LONG |
4k 字节 |
setBytes |
LONG RAW |
2G 字节 |
setString |
LONG |
32k 字符( |
setString |
|
2G 字符 |
全部展开全部收起
-
-
为什么读取 TIMESTAMP WITH TIME ZONE 会出现不同的结果?
-
高级数据类型(对象)
全部展开全部收起-
-
如何创建 ADT 实例?
-
为什么不支持标准工厂方法 createArrayOf supported?
-
BFILE、BLOB、CLOB
全部展开全部收起-
-
DBMS_LOB.ERASE 有何作用?
-
我可以使用 oracle.sql.CLOB.putChars() 吗?
-
OCI 提供函数来操作 CLOB CharSetId,在这方面 JDBC 提供了什么?
-
写入到 BLOB 的速度是否比 LONG RAW 慢?
-
在 Stream 示例代码中获取 LobLength 时,为什么会出现 ORA-03127 错误?
-
从数据库获取 CLOB 并更新,有时我的更改不会显示在数据库中,为什么?
-
REF 类型
全部展开全部收起-
-
如何在两个 JDBC 客户端(EJB 客户端、JDBC 客户端等)之间传递 oracle.sql.REF?REF 类不支持序列化吗?
-
如何创建一个新 REF?
-
OPAQUE 类型
全部展开全部收起-
-
什么是 OPAQUE 类型?
-
行源
全部展开全部收起-
-
我设置了执行完毕可滚动属性,但却对 RowSet 的可滚动性不起作用,为什么?
-
我是否可以在 RowSet 包含流的情况下将 RowSet 对象序列化为平面文件?
-
Thin 驱动程序
全部展开全部收起-
-
Thin JDBC 驱动程序是否可用于开发 Java 应用?
-
服务器内部驱动程序
全部展开全部收起-
-
何时应使用服务器内部驱动程序?
-
服务器 Thin 驱动程序
全部展开全部收起-
-
何时应使用服务器 Thin 驱动程序?
-
错误
全部展开全部收起-
-
DriverManager.getConnection 报错:"No suitable driver"
-
错误信息:"UnsatisfiedLinkError with OCI driver"
-
错误信息:"ORA-1019: unable to allocate memory."
-
错误信息:"ORA-01000: maximum open cursors exceeded"
-
错误信息:"ORA-01002: fetch out of sequence"
-
错误信息:"ORA-12705: invalid or unknown NLS parameter value specified"
-
对于 Error ORA-12705,尝试检索文本时报错。
-
错误信息:JDBC Thin 驱动程序提示 Unicode 文字出现“无效字符”错误
-
INSERT 或 UPDATE 操作缓慢
-
错误信息:"Connection reset by peer"
-
“违反协议”是什么意思?
-
演示程序
全部展开全部收起-
-
JDBC 是否提供演示程序?
-
如何运行演示程序?
-
如果运行演示程序时发生错误,我该怎么做?
-
Oracle JDBC 跟踪工具
全部展开全部收起-
-
什么是 JDBC 跟踪工具?
-
如何打开旧版本 JDBC 跟踪工具?
-
如何控制跟踪的输出量?
-
跟踪输出的目的地是哪里?
-
如何在启用 DMS 的 Jar 中关闭 DMS?
-
开发工具和环境
全部展开全部收起-
-
是否可以使用 Symantec Visual Cafe 来调试 JDBC 程序?
-
是否可以使用 Microsoft's Visual J++ 来调试 JDBC 程序?
-
支持的特性
全部展开全部收起-
-
JDBC 驱动程序是否可以访问 PL/SQL 存储过程?
-
JDBC 驱动程序是否支持流处理?
-
JDBC 驱动程序是否支持多字节字符集?
-
JDBC 驱动程序是否与防火墙兼容?
-
Oracle JDBC 驱动程序是否支持 PL/SQL 表/结果集/记录/布尔值?
-
是否支持故障转移?
-
JDBC 驱动程序如何支持 Oracle ROWID 数据类型?getCursorName 和 setCursorName 呢?
-
JDBC 驱动程序如何支持 Oracle REFCURSOR 数据类型?
-
JDBC 驱动程序是否支持 ANO?
-
我能否将 oracle.sql.* 数据类型序列化?
-
JDBC 驱动程序是否支持对象或集合?
-
我是否可以使用 WaitOption 和 AutoRollback?
-
一个数据库实例中的 Java 存储过程是否可以打开面向其他数据库实例的连接?
-
性能
全部展开全部收起-
-
Thin 驱动程序和 OCI 驱动程序哪个速度更快?
-
Statement 和 PreparedStatement 哪个速度更快?
-
java.util.logging
全部展开全部收起-
-
如何使用 java.util.logging 从 Oracle JDBC 驱动程序获取跟踪输出?
-
如何配置 java.util.logging,从 Oracle JDBC 获取有用的跟踪输出?
-
如何配置 java.util.logging,从服务器端内部驱动程序获取有用的跟踪输出??
-