Release date: July 2, 2025 Version: V2.4.15
Version overview
OceanBase Connector/J V2.4.15 introduces multiple parameters to enhance MySQL and Oracle compatibility. In MySQL mode, the useLocalSessionState parameter controls whether JDBC uses locally cached session states (such as transaction mode, auto-commit status, and current database) to avoid frequent queries to OBServer. In Oracle mode, the lowercaseRoutinesInMetadata parameter controls whether the names of procedures and functions retrieved via interfaces like getProcedures and getFunctions are required to be in uppercase. Additionally, the Set/Get ClientInfo interfaces have been optimized to use local caching, reducing the need for frequent requests to OBServer and lowering database resource overhead.
New features
- Optimized Set/Get ClientInfo interfaces to use local caching, reducing the need for frequent requests to OBServer and lowering database resource overhead.
- MySQL tenant support:
- Introduced the
useLocalSessionStateparameter to control whether JDBC uses locally cached session states (such as transaction mode, auto-commit status, and current database) to avoid frequent queries to OBServer. When the parameter value is False, queries are always sent. When the value is True and the session state has not changed, no query is sent. If the state has changed, a query is sent. In versions prior to JDBC V2.4.15, the behavior was to send a query only when the state changed, which aligns withuseLocalSessionState=true. Therefore, the default value is set to True.
- Introduced the
- Oracle tenant support:
- Introduced the
lowercaseRoutinesInMetadataparameter to control whether the names of procedures and functions retrieved via interfaces likegetProceduresandgetFunctionsare required to be in uppercase. The default value is True, supporting lowercase names. - In Oracle mode, only
binary_doubleis a true double type. Other double types should be converted to number. Currently, thesetDoubleinterface sends data of type double, which is indistinguishable from thesetBinary_doubleinterface. In JDBC V2.4.15, the serialization data type of thesetDoubleinterface is changed to Number to distinguish it fromsetBinary_double. - Introduced the
convertNoneNanoSecsToDateparameter to control whether a timestamp field with different precision will be converted to a Date type.
- Introduced the
URL parameter changes
The following URL parameters have been added:
| Option Name | Status | Default Value | Description |
|---|---|---|---|
oracleXaPrepareThrowException |
New | false | Throws an exception when the return value of dbms_xa.xa_prepare is neither 0 nor 3. |
useLocalSessionState |
New | true | Controls whether the driver uses locally cached session states (such as transaction mode, auto-commit status, and current database) to avoid frequent queries to the server for these states. The default value for MySQL-JDBC is false. |
convertNoneNanoSecsToDate |
New | true | In Oracle mode, whether the setTimestamp interface will convert the value to a Date type when there are no nanoseconds (nanos). |
oracleUseNumberForSetDouble |
New | false | In Oracle mode, whether to serialize the type of setDouble to number. |
lowercaseRoutinesInMetadata |
New | true | In Oracle mode, whether the names of procedures and functions retrieved via interfaces like getProcedures and getFunctions can be in lowercase. |
Bug fixes
The following issues were fixed in this release:
- Fixed the issue where an error was reported when connecting to the database without importing the timezone table in Oracle mode.
- Fixed the issue where the output parameter values were incorrect when the output parameters were not registered in cross-user stored procedure calls.
- Optimized the
getcolumnsinterface to improve execution performance. - Fixed the issue where, when PS cache was enabled and cursor result sets were used, if the data from the previous request was not fully fetched, the PS would be used to re-execute and retrieve new data, leading to abnormal data states.
- Fixed the issue where type conversion failed occasionally for nested CLOB types in arrays.
- Fixed the issue where cursor limits were exceeded due to the failure to close pstmts created for cursor result sets when PSs were frequently created and closed.
- Fixed the issue where, in the PS two-in-one protocol, the PS was not closed when arraybinding execution failed.
- Fixed the issue where, when only one row of data existed in the database and the two-in-one protocol and cursor result set were used, the
ResultSet.isAfterLast()method returned incorrect results. - Fixed the issue where the
getFunctionColumnsmethod returned incorrect results when the function comment was a single string. - Fixed the issue where an error was reported when data was truncated with the
jdbcCompliantTruncation=falseparameter. - Fixed the issue where an error was reported when using public synonyms across users.
- Fixed the issue where, in MySQL mode, when
rewriteBatchedStatementswas set to true and theon duplicate key updatestatement contained\n, thegetGeneratedKeysmethod returned incorrect results. - Fixed the issue where, when inserting two rows with the same values using the
ON DUPLICATE KEY UPDATEstatement, theexecuteBatchmethod returned incorrect results. - Fixed the issue where, when anonymous arrays were nested within records, the JDBC driver reported an unknown complex data type error.
- Fixed the issue where, in MySQL mode, when
useServerPrepStmts=true, thesetBlobmethod concatenated statements incorrectly. - Fixed the issue where, in Oracle mode, the
releaseSavepointinterface caused disconnection in HikariCP due to incompatibility between errCode and SqlState with Oracle. - Fixed the issue where, in Oracle mode, the registration of out parameters was not standardized, leading to incorrect result values when retrieving results.
- Fixed the issue where, when PL returned the correct number of updated rows, the client calculated the result incorrectly.
