Release date: February 2, 2026 Version: V2.4.17
Overview
JDBC V2.4.17 introduces the clientInfoProvider attribute, supporting custom implementations of the Connection.get/setClientInfo() interface. In MySQL mode, it now supports the Array data type. In Oracle tenants, it is compatible with the DatabaseMetaData interface, enhancing overall compatibility with both MySQL and Oracle.
New features
- Supports the
clientInfoProviderconnection attribute for custom implementations of theConnection.get/setClientInfo()interface, applicable to both MySQL and Oracle tenants. - In MySQL tenants, supports the Array data type, including 7 types: tinyint, smallint, int, bigint, float, double, and varchar.
- In Oracle tenants, is compatible with the DatabaseMetaData interface, including
supportsCatalogsInDataManipulation()andsupportsSchemasInDataManipulation().
Compatibility changes
Product behavior changes
The following behavior changes are introduced:
| Feature | Affects Tenant | Behavior After Change | Behavior Before Change |
|---|---|---|---|
| DatabaseMetaData interface return values | Oracle | metaData.supportsCatalogsInDataManipulation() = false, metaData.supportsSchemasInDataManipulation() = true |
metaData.supportsCatalogsInDataManipulation() = true, metaData.supportsSchemasInDataManipulation() = false |
| useSqlStringCache URL parameter behavior | Oracle, MySQL | The parameter is deprecated and no longer effective; when set to true, an error is returned, and it must be changed to false | The parameter is supported; when set to true, the parameter is effective; when set to false, the feature is ineffective |
| useLegacyDatetimeCode default value modification | MySQL | Default value is true, meaning that the JVM's default timezone is used for time processing in JDBC. For versions below 2.4.15, the default value is true; for versions 2.4.15 and 2.4.16, the default value is false; for 2.4.17 and later, the default value is fixed to true | Default value is false, meaning that the timezone set in the URL is used for time processing in JDBC |
| loadbalance blacklist timeout setting | Oracle, MySQL | The timeout parameter for the blacklist is in milliseconds | The timeout for the blacklist is in seconds |
| clob.toString method output content | Oracle, MySQL | Added parameter obClobToStringReturnsContents to control the output of clob.toString. false: compatible with mysql-jdbc and oracle-jdbc, output className@hash code (default); true: output clob content. For versions below 2.4.14, clob.toString outputs clob content; for 2.4.14–2.4.16, the output is className@hash code |
- |
| number, decimal, float data type values less than 10^-6 getString output format | Oracle, MySQL | Oracle tenants: getString always uses standard notation, not scientific notation. MySQL tenants using text protocol: always use standard notation. MySQL tenants using PS protocol: use scientific notation for values less than 10^(-6) | For number, decimal, and float values less than 10^-6, return the number in scientific notation |
URL parameter changes
The following URL parameters are changed:
| Name | Change | Description |
|---|---|---|
| clientInfoProvider | New | The class name implementing the com.oceanbase.jdbc.ClientInfoProvider interface, used to support custom management and retrieval of Connection.get/setClientInfo() methods. |
| sendTypesToServer | New | Forces sending data types to the OBServer in PS/Unified protocol scenarios. Default value is true. |
| useLegacyDatetimeCode | Default value changed | Default value changed from false to true; when set to true, the JVM's default timezone is used for time processing in JDBC. |
| obClobToStringReturnsContents | New | Controls whether Clob.toString() returns CLOB content (instead of the class name). Default value is false. |
Bug fixes
The following issues were fixed in this release:
- Fixed an issue where, in Oracle tenants, using array binding with large data volumes caused packet splitting and improper handling of empty bitmaps, leading to OBServer core dumps.
- Fixed an issue where, in send piece + reused stmtid scenarios,
new-params-bound-flag=falseand ODP switching OBServer connections, JDBC did not send parameter information, causing parameter type retrieval errors on the new OBServer node. - Fixed an issue where, with ps cache enabled and using cursor result sets, the Statement object did not truly close the cursor when executing
executeQuery, leading to cursor limits. - Fixed an issue where, with ps cache enabled, SQL statements longer than
prepStmtCacheSqlLimitcould not be cached or properly closed, leading to cursor limits. - Fixed an issue where, using the PS protocol, repeated field traversal in large result sets or with many fields impacted performance.
- Fixed an issue where, using the
getXaConnection(user, password)interface and configuring the URL via extended information, a null pointer exception occurred. - Fixed an issue where, with multi-statement SQL exceeding length limits, JDBC repeatedly parsed SQL statements, increasing processing time.
- Fixed an issue where, in Oracle mode using the Unified protocol and with PS cursor enabled, ArrayBinding batch operations did not reuse PS IDs, leading to cursor limits.
- Fixed an issue where, with JDBC defaulting to UTF8 character encoding for OBServer exceptions, non-UTF8 encoded exception information from OBServer caused garbled text.
- Fixed an issue where, with the
useSqlStringCacheparameter enabled, thegetCachedSqlmethod occasionally returned errors. - Fixed an issue where, in PL calls with parameter lists containing expressions, JDBC mishandled parameters, causing index out-of-bounds and call errors.
