Array
本章节描述在JDBC驱动使用java.sql.Array类型时,Oracle与GaussDB的差异。
构造方式 |
Oracle数据库 |
GaussDB数据库 |
接口差异 |
---|---|---|---|
1. ArrayDescriptor的静态构造方法构造ArrayDescriptor对象; 2. 通过ArrayDescriptor构造Array对象。 |
String typeName = "XXX"; Connection conn = getConnection(); Object[] elements = null; ArrayDescriptor desc = ArrayDescriptor.createDescriptor(typeName, conn); Array array = new ARRAY(desc, conn, elements); |
String typeName = "xxx"; Connection conn = getConnection(); Object[] elements = null; ArrayDescriptor desc = ArrayDescriptor.getDescriptor(typeName, conn); Array array = new GaussArray(desc, elements); |

方法名 |
返回值类型 |
throws |
GaussDB数据库 |
---|---|---|---|
getBaseTypeName() |
String |
SQLException |
支持 |
getBaseType() |
int |
SQLException |
支持 |
getArray() |
Object |
SQLException |
支持 |
getArray(java.util.Map<String,Class<?>> map) |
Object |
SQLException |
不支持 |
getArray(long index, int count) |
Object |
SQLException |
支持 |
getArray(long index, int count, java.util.Map<String,Class<?>> map) |
Object |
SQLException |
不支持 |
getResultSet() |
ResultSet |
SQLException |
不支持 |
getResultSet(java.util.Map<String,Class<?>> map) |
ResultSet |
SQLException |
不支持 |
getResultSet(long index, int count) |
ResultSet |
SQLException |
不支持 |
getResultSet (long index, int count, java.util.Map<String,Class<?>> map) |
ResultSet |
SQLException |
不支持 |
free() |
void |
SQLException |
不支持 |
元素数据库类型 |
getArray接口实际返回值类型(Oracle) |
getArray接口实际返回值类型(GaussDB) |
---|---|---|
CHAR |
java.lang.String[] |
java.lang.String[] |
VARCHAR/VARCHAR2 |
java.lang.String[] |
java.lang.String[] |
NCHAR |
java.lang.String[] |
java.lang.String[] |
NVARCHAR2 |
java.lang.String[] |
java.lang.String[] |
NUMBER |
java.math.BigDecimal[] |
java.math.BigDecimal[] |
NUMERIC |
java.math.BigDecimal[] |
java.math.BigDecimal[] |
DECIMAL |
java.math.BigDecimal[] |
java.math.BigDecimal[] |
INTEGER |
java.math.BigDecimal[] |
java.lang.Integer[] |
SMALLINT |
java.math.BigDecimal[] |
java.lang.Short[] |
DOUBLE PRECISION |
java.math.BigDecimal[] |
java.lang.Double[] |
FLOAT |
java.math.BigDecimal[] |
java.lang.Double[] |
REAL |
java.math.BigDecimal[] |
java.lang.Float[] |
BINARY_DOUBLE |
java.lang.Double[] |
java.lang.Double[] |
BINARY_INTEGER |
java.math.BigDecimal[] |
java.lang.Integer[] |
BOOLEAN |
java.math.BigDecimal[] |
java.lang.Boolean[] |
TIMESTAMP |
java.sql.Timestamp[] |
java.sql.Timestamp[] |
TIMESTAMP WITH TIME ZONE |
java.time.OffsetDateTime[] |
java.sql.Timestamp[] |
BLOB |
oracle.sql.BLOB[] |
java.sql.Blob[] |
CLOB |
oracle.sql.CLOB[] |
java.sql.Clob[] |
集合类型/数组类型 |
java.lang.Object[] |
java.sql.Array[] |
RECORD类型 |
java.lang.Object[] |
java.sql.Struct[] |

- 对于上述表格中未列举出的类型,GaussDB暂不支持。
- getArray(long index, int count)接口返回值差异也参考上述表格。
- getArray接口(long index, int count),参数index的差异如下:
- Oracle支持范围为[1, Long.MAX_VALUE];Gauss支持范围为[1, Integer.MAX_VALUE]。
- Oracle在index > Integer.MAX_VALUE时index会被截断;Gauss在index > Integer.MAX_VALUE时报错。
元素数据库类型 |
getBaseType接口返回值(Oracle) |
getBaseType接口返回值(GaussDB) |
---|---|---|
CHAR |
java.sql.Types.CHAR |
java.sql.Types.CHAR |
VARCHAR/VARCHAR2 |
java.sql.Types.VARCHAR |
java.sql.Types.VARCHAR |
NCHAR |
java.sql.Types.NCHAR |
java.sql.Types.CHAR |
NVARCHAR2 |
java.sql.Types.NVARCHAR |
java.sql.Types.VARCHAR |
NUMBER |
java.sql.Types.NUMERIC |
java.sql.Types.NUMERIC |
NUMERIC |
java.sql.Types.DECIMAL |
java.sql.Types.NUMERIC |
DECIMAL |
java.sql.Types.DECIMAL |
java.sql.Types.NUMERIC |
INTEGER |
java.sql.Types.NUMERIC |
java.sql.Types.INTEGER |
SMALLINT |
java.sql.Types.NUMERIC |
java.sql.Types.SMALLINT |
DOUBLE PRECISION |
java.sql.Types.FLOAT |
java.sql.Types.DOUBLE |
FLOAT |
java.sql.Types.FLOAT |
java.sql.Types.DOUBLE |
REAL |
java.sql.Types.FLOAT |
java.sql.Types.REAL |
BINARY_DOUBLE |
oracle.jdbc.OracleTypes.BINARY_DOUBLE |
java.sql.Types.DOUBLE |
BINARY_INTEGER |
java.sql.Types.NUMERIC |
java.sql.Types.INTEGER |
BOOLEAN |
java.sql.Types.NUMERIC |
java.sql.Types.BIT |
TIMESTAMP |
java.sql.Types.TIMESTAMP |
java.sql.Types.TIMESTAMP |
TIMESTAMP WITH TIME ZONE |
oracle.jdbc.OracleTypes.TIMESTAMPTZ |
java.sql.Types.TIMESTAMP |
BLOB |
java.sql.Types.BLOB |
java.sql.Types.BLOB |
CLOB |
java.sql.Types.CLOB |
java.sql.Types.CLOB |
集合类型/数组类型 |
java.sql.Types.ARRAY |
java.sql.Types.ARRAY |
RECORD类型 |
java.sql.Types.STRUCT |
java.sql.Types.STRUCT |

对于上述表格中未列举出的类型,GaussDB暂不支持。
元素数据库类型 |
getBaseTypeName接口返回值(Oracle) |
getBaseTypeName接口返回值(GaussDB) |
---|---|---|
CHAR |
"CHAR" |
"bpchar" |
VARCHAR/VARCHAR2 |
"VARCHAR" |
"varchar" |
NCHAR |
"NCHAR" |
"bpchar" |
NVARCHAR2 |
"NVARCHAR" |
"nvarchar2" |
NUMBER |
"NUMBER" |
"numeric" |
NUMERIC |
"DECIMAL" |
"numeric" |
DECIMAL |
"DECIMAL" |
"numeric" |
INTEGER |
"NUMBER" |
"int4" |
SMALLINT |
"NUMBER" |
"int2" |
DOUBLE PRECISION |
"FLOAT" |
"float8" |
FLOAT |
"FLOAT" |
"float8" |
REAL |
"FLOAT" |
"float4" |
BINARY_DOUBLE |
"BINARY_DOUBLE" |
"float8" |
BINARY_INTEGER |
"NUMBER" |
"int4" |
BOOLEAN |
"NUMBER" |
"bool" |
TIMESTAMP |
"TIMESTAMP" |
"timestamp" |
TIMESTAMP WITH TIME ZONE |
"TIMESTAMP WITH TIME ZONE" |
"timestamptz" |
BLOB |
"BLOB" |
"blob" |
CLOB |
"CLOB" |
"clob" |
集合类型/数组类型 |
见说明部分 |
见说明部分 |
RECORD类型 |
见说明部分 |
见说明部分 |

- 对于上述表格中未列举出的类型,GaussDB暂不支持。
- 元素为集合类型、数组类型或record类型,且元素类型是package里定义的类型时,getBaseTypeName返回规则如下:
- OJDBC11返回schemaName.packageName.typeName。
- OJDBC8一般返回schemaName.packageName.typeName,在类型名满足以下条件返回"schemaName"."packageName.typeName":
schemaName/packageName/typeName中有任意名称不符合首字符为字母,其他字符为字母、数字或下划线。
- GaussDB一般返回schemaName.packageName.typeName,在类型名满足以下条件返回"schemaName"."packageName"."typeName":
schemaName/packageName/typeName中有任意名称不符合首字符为字母或下划线,其他字符为字母、数字或下划线。
- 元素为集合类型、数组类型或record类型,且元素类型是schema下定义的类型时(非package里定义的类型),getBaseTypeName返回规则如下:
- 若元素类型在创建时不做特殊处理,Oracle的getBaseTypeName接口通常返回的是大写的类型名称,GaussDB的getBaseTypeName接口通常返回的是小写的类型名称。
元素数据库类型 |
元素入参支持的Java类型列表(Oracle OJDBC8) |
元素入参支持的Java类型列表(GaussDB) |
差异说明 |
---|---|---|---|
CHAR |
任意Java类型 |
Byte、Short、Integer、Long、BigInteger、BigDecimal、Float、Double、Character、Boolean、java.sql.Date、java.sql.Time、java.sql.Timestamp、PGClob |
元素入参支持的类型差异见表格。 |
VARCHAR/VARCHAR2 |
任意Java类型 |
Byte、Short、Integer、Long、BigInteger、BigDecimal、Float、Double、Character、Boolean、java.sql.Date、java.sql.Time、java.sql.Timestamp、PGClob |
元素入参支持的类型差异见表格。 |
NCHAR |
任意Java类型 |
Byte、Short、Integer、Long、BigInteger、BigDecimal、Float、Double、Character、Boolean、java.sql.Date、java.sql.Time、java.sql.Timestamp、PGClob |
元素入参支持的类型差异见表格。 |
NVARCHAR2 |
任意Java类型 |
Byte、Short、Integer、Long、BigInteger、BigDecimal、Float、Double、Character、Boolean、java.sql.Date、java.sql.Time、java.sql.Timestamp、PGClob |
元素入参支持的类型差异见表格。 |
NUMBER |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String、oracle.sql.NUMBER |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String |
|
NUMERIC |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String、oracle.sql.NUMBER |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String |
|
DECIMAL |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String、oracle.sql.NUMBER |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String |
|
INTEGER |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String、oracle.sql.NUMBER |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String |
|
SMALLINT |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String、oracle.sql.NUMBER |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String |
|
DOUBLE PRECISION |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String、oracle.sql.NUMBER |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String |
|
FLOAT |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String、oracle.sql.NUMBER |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String |
|
REAL |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String、oracle.sql.NUMBER |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String |
|
BINARY_DOUBLE |
Double、oracle.sql.BINARY_DOUBLE |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String |
|
BINARY_INTEGER |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、AtomicInteger、AutomicLong、DoubleAccumulator、DoubleAddr、LongAccumulator、LondAdder、Striped64、String、oracle.sql.NUMBER |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String |
|
BOOLEAN |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、AtomicInteger、AutomicLong、DoubleAccumulator、DoubleAddr、LongAccumulator、LondAdder、Striped64、String、oracle.sql.NUMBER |
Byte、Short、Integer、Long、Float、Double、Boolean、BigDecimal、BigInteger、String |
|
TIMESTAMP |
byte[]、java.sql.Date、Calendar、java.util.Date、LocalDate、LocalDateTime、LocalTime、OffsetDateTime、OffsetTime、String、java.sql.Time、java.sql.Timestamp、oracle.sql.DATE、oracle.sql.TIMESTAMP、oracle.sql.TIMESTAMPTZ、oracle.sql.TIMESTAMPLTZ、ZonedDateTime |
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp、LocalDateTime、String |
元素入参支持的类型差异见表格。 |
TIMESTAMP WITH TIME ZONE |
java.sql.Date、Calendar、java.util.Date、LocalDate、LocalDateTime、LocalTime、OffsetDateTime、OffsetTime、String、java.sql.Time、java.sql.Timestamp、oracle.sql.DATE、oracle.sql.TIMESTAMP、oracle.sql.TIMESTAMPTZ、oracle.sql.TIMESTAMPLTZ、ZonedDateTime |
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp、LocalDateTime、String |
|
BLOB |
oracle.sql.BLOB、oracle.jdbc.driver.OracleBlob |
PGBlob |
元素入参支持的类型差异见表格。 |
CLOB |
oracle.sql.CLOB、oracle.jdbc.driver.OracleClob、InputStream、Reader |
PGClob |
元素入参支持的类型差异见表格。 |
集合类型/数组类型 |
ARRAY、Object |
GaussArray、Object |
|
RECORD类型 |
STRUCT、Object[] |
GaussStruct、Object[] |

- 构造Array时,若传入元素的Java类型不符合目标类型,会进行相应的隐式转换操作,对于不同的数据库元素类型,支持传入的元素的Java类型差异见上表。
- 对于上述表格中未列举出的类型,GaussDB暂不支持。
- 构造方法需要提供元素数组,上述表格描述的是数组中每一个元素对应的差异。