Oracle 和 Oceanbase 的 jar 包对列长参数的标准不同,因为 ob-jdbc 没有兼容 oracle-jdbc 实现的 getColumnDisplaySize 接口逻辑。oracle-jdbc 内部有一些自定义的变量值用在了该接口里。应用平台划定范围时是以这些参数充当条件的,导致应用平台的划定范围受到影响。
场景如下。
测试表。
CREATE TABLE "TEST"."USER11" ("ID" NUMBER(38),"NAME" CHAR(10),"BIRTHDAY" VARCHAR2(9),"SEX" NUMBER(38),"ADDRESS" CLOB,"MONEY" NUMBER(10,1));使用不同数据库 jar 包列长参数标准的测试结果。
使用 oceanbase-client-2.2.10.jar 包连接 OceanBase 数据库,输出打印结果如下。
getcolumnName (i) : ID; getcolumnTypeName (i): NUMBER; getColumnDisplaySize(i):39 getcolumnName (i): NAME; getcolumnTypeName (i) : CHAR; getcolumnDisplaysize(i):2 getColumnName (i): BIRTHDAY; getColumnTypeName(i): VARCHAR2; getcolumnDisplaySize(i):2 getcolumnName (i) : SEX; getColumnTypeName(i): NUMBER; getcolumnDisplaysize(i):39 getcolumnName (i) : ADDRESS; getcolumnTypeName(i): CLOB; getColumnDisplaySize(i): 50331648 getcolumnName (i): MONEY: getcolumnTypeName(i) : NUMBER: getColumnDisplaySize(i): 12使用 ojdbc6.jar 包连接 Oracle 数据库,输出打印结果如下。
getcolumnName (i) : ID;getcolumnTypeName (i) : NUMBER;getcolumnDisplaySize(i):39 getcolumnName (i): NAME;getcolumnTypeName(i) : CHAR;getcolumnDisplaySize(i):10 getcolumnName (i) : BIRTHDAY;getcolumnTypeName(i): VARCHAR2;getcolumnDisplaySize(i):9 getcolumnName (i) : SEX;getcolumnTypeName (i) : NUMBER;getcolumnDisplaySize(i) : 39 getcolumnName (i) : ADDRESS;getColumnTypeName (i) : CLO3;getColumnDisplaysize(i):4000 getcolumnName (i): MONEY;getColumnTypeName (i) : NUMBER;getcolumnDisplaySize(i):12
适用版本
OceanBase 数据库 V2.x、V3.x、V4.x 版本。
建议
升级 OceanBase-jdbc 版本至 V2.4.4 及其以上版本。