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

方法名 |
返回值类型 |
throws |
GaussDB数据库 |
---|---|---|---|
getSQLTypeName() |
String |
SQLException |
支持 |
getAttributes() |
Object[] |
SQLException |
支持 |
getAttributes(java.util.Map<String,Class<?>> map) |
Object[] |
SQLException |
不支持 |

getSQLTypeName接口差异参考如下说明:
- 对于package类型,通过packageName.typeName形式构造的Struct,getSQLTypeName接口差异如下:
- OJDBC11返回packageName.typeName。
- OJDBC8返回packageName.typeName,在packageName和typeName满足以下条件时返回"packageName"."typeName":
- GaussDB返回schemaName.packageName.typeName,在schemaName、packageName和typeName满足以下条件时返回"schemaName"."packageName"."typeName":
schemaName/packageName/typeName有任意名称不符合首字符为字母或者下划线,其他字符为字母、数字或者下划线。
- 对于package类型,其他场景下getSQLTypeName接口差异如下:
- OJDBC11返回schemaName.packageName.typeName。
- OJDBC8返回schemaName.packageName.typeName,在schemaName、packageName和typeName满足以下条件时返回"schemaName"."packageName.typeName":
schemaName/packageName/typeName有任意名称不符合首字符为字母,其他字符为字母或者数字或者下划线。
- GaussDB返回schemaName.packageName.typeName,在schemaName、packageName和typeName满足以下条件时返回"schemaName"."packageName"."typeName":
schemaName/packageName/typeName有任意名称不符合首字符为字母或者下划线,其他字符为字母、数字或者下划线。
- 对于非package类型,getSQLTypeName接口差异如下:
- OJDBC11返回schemaName.typeName。
- OJDBC8返回schemaName.typeName,在schemaName和typeName满足以下条件时返回"schemaName"."typeName":
- GaussDB返回schemaName.typeName,在schemaName和typeName满足以下条件时返回"schemaName"."typeName":
Attribute数据库类型 |
返回值中对应元素的Java类型(Oracle OJDBC8) |
返回值中对应元素的Java类型(Oracle OJDBC11) |
返回值中对应元素的Java类型(GaussDB) |
---|---|---|---|
CHAR |
String |
String |
String |
VARCHAR/VARCHAR2 |
String |
String |
String |
NCHAR |
String |
String |
String |
NVARCHAR2 |
String |
String |
String |
NUMBER |
BigDecimal |
BigDecimal |
BigDecimal |
NUMERIC |
BigDecimal |
BigDecimal |
BigDecimal |
DECIMAL |
BigDecimal |
BigDecimal |
BigDecimal |
INTEGER |
BigDecimal |
BigDecimal |
Integer |
SMALLINT |
BigDecimal |
BigDecimal |
Short |
DOUBLE PRECISION |
BigDecimal |
BigDecimal |
Double |
FLOAT |
BigDecimal |
BigDecimal |
Double |
REAL |
BigDecimal |
BigDecimal |
Float |
BINARY_DOUBLE |
Double |
Double |
Double |
BINARY_INTEGER |
BigDecimal |
Integer |
Integer |
BOOLEAN |
BigDecimal |
Integer |
Boolean |
TIMESTAMP |
Timestamp |
Timestamp |
Timestamp |
TIMESTAMP WITH TIME ZONE |
TIMESTAMPTZ |
TIMESTAMPTZ |
Timestamp |
BLOB |
BLOB |
BLOB |
PGBlob |
CLOB |
CLOB |
CLOB |
PGClob |
集合类型/数组类型 |
ARRAY |
ARRAY |
GaussArray |
RECORD类型 |
STRUCT |
STRUCT |
GaussStruct |

对于上述表格中未列举出的类型,GaussDB暂不支持。
Attribute数据库类型 |
Attribute入参支持的Java类型列表(Oracle) |
Attribute入参支持的Java类型列表(GaussDB) |
差异说明 |
---|---|---|---|
CHAR |
任意Java类型 |
Byte、Short、Integer、Long、BigInteger、BigDecimal、Float、Double、Character、Boolean、String、java.sql.Date、java.sql.Time、java.sql.Timestamp、PGClob |
|
VARCHAR/VARCHAR2 |
任意Java类型 |
Byte、Short、Integer、Long、BigInteger、BigDecimal、Float、Double、Character、Boolean、String、java.sql.Date、java.sql.Time、java.sql.Timestamp、PGClob |
attribute入参支持的类型差异见表格。 |
NCHAR |
任意Java类型 |
Byte、Short、Integer、Long、BigInteger、BigDecimal、Float、Double、Character、Boolean、String、java.sql.Date、java.sql.Time、java.sql.Timestamp、PGClob |
attribute入参支持的类型差异见表格。 |
NVARCHAR2 |
任意Java类型 |
Byte、Short、Integer、Long、BigInteger、BigDecimal、Float、Double、Character、Boolean、String、java.sql.Date、java.sql.Time、java.sql.Timestamp、PGClob |
attribute入参支持的类型差异见表格。 |
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 |
byte[]、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、String、java.sql.Time、java.sql.Timestamp、oracle.sql.TIMESTAMP、oracle.sql.DATE |
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp、LocalDateTime、String |
attribute入参支持的类型差异见表格。 |
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.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 |
PGClob |
|
集合类型/数组类型 |
ARRAY、Object |
GaussArray、Object |
|
RECORD类型 |
STRUCT、Object[] |
GaussStruct、Object[] |

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