- Release date: March 7, 2025
- Version: V2.4.14
Overview
OceanBase Connector/J V2.4.14 supports the Hong Kong Supplementary Character Set (HKSCS). It also provides the emulateLocators and locatorFetchBufferSize parameters to ensure correct conversion of BLOB data. The logic for matching and building anonymous array metadata caches is optimized to improve performance. A parameter is provided to control the maximum number of reconnection attempts, thereby enhancing the stability of the driver.
New features
- The
emulateLocatorsandlocatorFetchBufferSizeparameters are provided to ensure that BLOB data is correctly converted by thegetBytes()method. - The
maxReconnectsparameter is provided to control the maximum number of reconnection attempts. This can avoid theStackOverFlowErrorerror caused due to infinite reconnection attempts upon I/O exceptions whenautoReconnect=trueis configured. - The HKSCS character set is supported for compatibility with OceanBase Database. To store characters in HKSCS or HKSCS31, set
&characterEncoding=HKSCS/HKSCS31in the URL and sendset names hkscs/hkscs31to OceanBase Database. - The logic for matching and building anonymous array metadata caches is optimized. Specifically, if the array elements are of a basic data type, OceanBase Connector/J does not need to interact with OceanBase Database, thereby reducing the performance overhead.
URL parameter changes
The following URL parameters are added.
| Parameter | Status | Default value | Description |
|---|---|---|---|
emulateLocators |
New | False | Specifies whether the driver needs to emulate java.sql.Blob with locators. |
locatorFetchBufferSize |
New | 1048576 | The buffer size used by getBinaryInputStream() to obtain BLOB data when emulateLocators is set to true. |
maxReconnects |
New | 3 | The maximum number of reconnection attempts when autoReconnect is set to true. |
characterEncoding |
New | When characterEncoding=HKSCS/HKSCS31 is configured, OceanBase Connector/J will send set names hkscs/hkscs31 to OceanBase Database. |
Bug fixes
This version fixes the following bugs:
- Fixed the issue where the value set by the
setQueryTimeout()method is invalid for a cursor result set. - Fixed the issue where the
5777or9747error code is returned when the value set by thesetClob()method is empty in a PL statement in Oracle mode. - Fixed the issue where an error is returned when the
getParameterMetaData()method is called if the stored procedure does not containBEGINin MySQL mode. - Fixed the issue where the number of open cursors exceeds the limit when the
executeBatch()method is called whilecachePrepStmts=trueis configured. - Fixed the issue where the
ORDER BYclause is incorrectly concatenated with input parameters on a cursor result set. - Fixed the issue where the
FOR UPDATEclause is incorrectly concatenated with input parameters on a cursor result set when the PreparedStatement protocol is enabled in Oracle mode. - Fixed the issue where a pagination query statement is incorrectly concatenated with input parameters on a cursor result set when the PreparedStatement protocol is enabled in Oracle mode.
- Fixed the issue where the
HAVINGclause is incorrectly concatenated with input parameters on a cursor result set when the PreparedStatement protocol is enabled in Oracle mode. - Fixed the issue where an error is returned if the equal sign (
=) incall ?:=function(?)is not followed by a space. - Fixed the issue where the
ps.getMetaData()method returns NULL when it is called on aPreparedStatementobject that represents a non-SELECT statement, with the PreparedStatement protocol enabled or both the PreparedStatement and PrepareExecute protocols enabled, which is incompatible with native MySQL. - Fixed the issue where a syntax error of
INSERT INTO...SETis returned whenrewriteBatchedStatements=trueis configured in MySQL mode. - Fixed the issue where the number of returned rows is always
-1when DML statements containing theRETURNINGclause are executed in a batch in Oracle mode. - Fixed the issue where an error is returned when
TRUNCATEis called on BLOB data stored by using OUTROW storage in Oracle mode. - Fixed the issue where the
rs.getClob().toString()method returns the class name, which is incompatible with native MySQL and Oracle. - Fixed the issue where session variables are missing when the JDBC driver reconnects to the database after an SQL statement that exceeds the value of
maxAllowedPacketis sent. - Fixed the issue where text execution is not applied upon an exception when statements are executed in a batch, with the PreparedStatement protocol enabled and
emulateUnsupportedPstmts=trueconfigured. - Fixed the issue where an error is returned when the output parameter type specified by the
registerOutParameter()method is a complex data type and the method containstypeNamein Oracle mode. - Fixed the issue where an
ArrayIndexOutOfBoundsExceptionis thrown when agetXXX()method is called to obtain information about the target column, if the data type isbinary_floatorbianary_doubleand the PreparedStatement protocol is enabled, in Oracle mode. - Fixed the issue where a parameter match error occurs if
aincall p(a=>?)is not the first parameter in Oracle mode. - Fixed the issue where the result of the
free()method called on LOB data is inconsistent with that in native MySQL. - Fixed the issue where the
defaultFetchSizeparameter cannot be set toInteger.MIN_VALUE. - Fixed the issue where various
getXXX()methods process data of thefloat,binary_float, andbinary_doubletypes in different ways in Oracle mode. This version applies a unified approach. - Fixed the issue where, when the
getLong()method is called on afloatcolumn to retrieve column values aslongdata, the precision of original column values is missing.