数据类型转换规则
数据类型、JAVA变量类型以及JDBC类型索引关系如表1所示。
- 非透明多写特性下,兼容ORA/MYSQL。
- 发送到服务端的类型非最终存储到数据库表中的类型,下表中发送到数据库的类型对应到数据库表中的类型请参见《参考》中“SQL参考 > 类型转换 > 值存储”章节,其中的类型转换规则同样适用于MYSQL兼容模式。
- JDBC连接参数详情请参见连接参数参考。
| JDBC接口 | 兼容模式 | 目标参数名 | 目标参数JAVA变量类型 | 条件 | 发送到数据库的类型 | 备注 |
|---|---|---|---|---|---|---|
| ORA/MYSQL | int sqlType | java.lang.Integer | - | 接口参数sqlType传入值对应发送到数据库类型请参见表2。 | sqlType为java.sql.Types中定义的sql类型值。 | |
| void setNull(int parameterIndex, int sqlType, String typeName) | ORA/MYSQL | int sqlType | java.lang.Integer | 参数String typeName=null | 请参见表2。 | - |
| ORA/MYSQL | boolean x | java.lang.Boolean | 连接参数use_boolean=true | BOOL | - | |
| ORA/MYSQL | boolean x | java.lang.Boolean | 连接参数use_boolean=false(默认) | INT2 | - | |
| ORA/MYSQL | byte x | byte | - | INT2 | - | |
| ORA/MYSQL | short x | java.lang.Short | - | INT2 | - | |
| ORA/MYSQL | int x | java.lang.Integer | - | INT4 | - | |
| ORA/MYSQL | long x | java.lang.Long | - | INT8 | - | |
| ORA | float x | java.lang.Float | 连接参数binaryTransfer=true | FLOAT4 | - | |
| ORA | float x | java.lang.Float | 连接参数binaryTransfer=false(默认) 并且连接参数setFloat=true | FLOAT4 | - | |
| ORA | float x | java.lang.Float | 连接参数binaryTransfer=false(默认) 并且连接参数setFloat=false(默认) | FLOAT8 | - | |
| MYSQL | float x | java.lang.Float | - | FLOAT4 | - | |
| ORA/MYSQL | double x | java.lang.Double | - | FLOAT8 | - | |
| ORA/MYSQL | BigDecimal x | java.math.BigDecimal | - | NUMERIC | - | |
| ORA/MYSQL | String x | java.lang.String | 连接参数stringtype=varchar(默认) | VARCHAR | - | |
| ORA/MYSQL | String x | java.lang.String | 连接参数stringtype=unspecified | UNSPECIFIED | - | |
| ORA/MYSQL | byte x[] | []byte | - | BYTEA | - | |
| void setDate(int parameterIndex, java.sql.Date x, Calendar cal) | ORA/MYSQL | - | - | - | - | |
| ORA | java.sql.Date x | java.lang.Date | 连接参数binaryTransfer=true 并且数据库GUC参数mapping_date_to_datea取值为on | DATEA | - | |
| ORA/MYSQL | java.sql.Date x | java.lang.Date | 连接参数binaryTransfer=true 并且数据库GUC参数mapping_date_to_datea取值为off | UNSPECIFIED | - | |
| ORA/MYSQL | java.sql.Date x | java.lang.Date | 连接参数binaryTransfer=false(默认) 并且ORA兼容场景下需要数据库连接参数oracleCompatible不配置为true并且配置不包含setDateTime | UNSPECIFIED | - | |
| ORA | java.sql.Date x | java.lang.Date | 连接参数oracleCompatible配置为true或者配置包含setDateTime 并且连接参数binaryTransfer=false(默认) 并且数据库GUC参数mapping_date_to_datea取值为on | DATEA | - | |
| ORA | java.sql.Date x | java.lang.Date | 连接参数oracleCompatible配置为true或者配置包含setDateTime 并且连接参数binaryTransfer=false(默认) 并且数据库GUC参数mapping_date_to_datea取值为off | TIMESTAMP | - | |
| void setTime(int parameterIndex, java.sql.Time x, Calendar cal) | ORA/MYSQL | - | - | - | - | |
| ORA/MYSQL | java.sql.Time x | java.lang.Time | ORA兼容场景下需要连接参数oracleCompatible不配置为true并且配置不包含setDateTime | UNSPECIFIED | 代码示例: PreparedStatement ps = conn.prepareStatement("insert into ptest_table values (?)");
Time time1 = Time.valueOf("12:30:45");
ps.setTime(1, time1); | |
| ORA/MYSQL | java.sql.Time x | PGTime | 参数java.sql.Time x未设置时区 | TIME | 代码示例: PreparedStatement ps = conn.prepareStatement("insert into ptest_table values (?)");
Time time1 = Time.valueOf("12:30:45");
PGTime time2 = new PGTime(time1.getTime());
ps.setTime(1, time2); | |
| ORA/MYSQL | java.sql.Time x | PGTime | 参数java.sql.Time x设置了时区并且不为null | TIMETZ | 代码示例: PreparedStatement ps = conn.prepareStatement("insert into ptest_table values (?)");
Time time1 = Time.valueOf("12:30:45");
Calendar calendar = Calendar.getInstance();
PGTime time2 = new PGTime(time1.getTime(), calendar);
ps.setTime(1, time2); | |
| ORA/MYSQL | java.sql.Time x | java.lang.Time | 参数java.sql.Time x为null | UNSPECIFIED | 代码示例: PreparedStatement ps = conn.prepareStatement("insert into ptest_table values (?)");
ps.setTime(1, null); | |
| ORA | java.sql.Time x | java.lang.Time | 连接参数oracleCompatible配置为true或者配置包含setDateTime | TIMETZ | - | |
| void setTimestamp(int parameterIndex, java.sql.Timestamp x, Calendar cal) | ORA/MYSQL | - | - | - | - | 与void setTimestamp(int parameterIndex, java.sql.Timestamp x)一致。 |
| ORA/MYSQL | java.sql.Timestamp x | java.sql.Timestamp | ORA兼容场景下需要连接参数oracleCompatible不配置为true并且配置不包含setDateTime(默认) | UNSPECIFIED | 代码示例: PreparedStatement ps = conn.prepareStatement("insert into ptest_table values (?)");
Timestamp timestamp1 = Timestamp.valueOf("2024-01-01 12:30:45.888");
ps.setTimestamp(1, timestamp1); | |
| ORA/MYSQL | java.sql.Timestamp x | PGTimestamp | 参数java.sql.Timestamp x未设置时区 | TIMESTAMP | 代码示例: PreparedStatement ps = conn.prepareStatement("insert into ptest_table values (?)");
Timestamp timestamp1 = Timestamp.valueOf("2024-01-01 12:30:45.888");
PGTimestamp timestamp2 = new PGTimestamp(timestamp1.getTime());
ps.setTimestamp(1, timestamp2); | |
| ORA/MYSQL | java.sql.Timestamp x | PGTimestamp | 参数java.sql.Timestamp x设置了时区并且不为null | TIMESTAMPTZ | 代码示例: PreparedStatement ps = conn.prepareStatement("insert into ptest_table values (?)");
Timestamp timestamp1 = Timestamp.valueOf("2024-01-01 12:30:45.888");
Calendar calendar = Calendar.getInstance();
PGTimestamp timestamp2 = new PGTimestamp(timestamp1.getTime(), calendar);
ps.setTimestamp(1, timestamp2); | |
| ORA/MYSQL | java.sql.Timestamp x | java.sql.Timestamp | 参数java.sql.Timestamp x为null | UNSPECIFIED | 代码示例: PreparedStatement ps = conn.prepareStatement("insert into ptest_table values (?)");
ps.setTimestamp(1, null); | |
| ORA | java.sql.Timestamp x | java.sql.Timestamp | 连接参数oracleCompatible配置为true或者配置包含setDateTime | TIMESTAMPTZ | - | |
| void setAsciiStream(int parameterIndex, java.io.InputStream x) | ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 参数java.io.InputStream x为null 并且连接参数stringtype=unspecified | UNSPECIFIED | - |
| ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 参数java.io.InputStream x为null 并且连接参数stringtype不为unspecified | VARCHAR | - | |
| ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 参数java.io.InputStream x不为null | VARCHAR | - | |
| void setAsciiStream(int parameterIndex, java.io.InputStream x, int length) | ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 参数java.io.InputStream x为null 并且连接参数stringtype=unspecified | UNSPECIFIED | - |
| ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 参数java.io.InputStream x为null 并且连接参数stringtype不为unspecified(默认) | VARCHAR | - | |
| ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 参数java.io.InputStream x不为null | VARCHAR | - | |
| void setAsciiStream(int parameterIndex, java.io.InputStream x, long length) | ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 参数java.io.InputStream x为null 并且连接参数stringtype=unspecified | UNSPECIFIED | - |
| ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 参数java.io.InputStream x为null 并且连接参数stringtype不为unspecified | VARCHAR | - | |
| ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 参数java.io.InputStream x不为null | VARCHAR | - | |
| void setBinaryStream(int parameterIndex, java.io.InputStream x) | ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 连接参数blobMode=on | BLOB | - |
| ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 连接参数blobMode=off | BYTEA | - | |
| void setBinaryStream(int parameterIndex, java.io.InputStream x, int length) | ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 连接参数blobMode=on | BLOB | - |
| ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 连接参数blobMode=off | BYTEA | - | |
| void setBinaryStream(int parameterIndex, java.io.InputStream x,long length) | ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 连接参数blobMode=true | BLOB | - |
| ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 连接参数blobMode=false(默认) | BYTEA | - | |
| void setCharacterStream(int parameterIndex, java.io.Reader reader,long length) | ORA/MYSQL | java.io.Reader reader | java.io.Reader | 连接参数stringtype=unspecified | UNSPECIFIED | 与void setCharacterStream(int parameterIndex, java.io.Reader reader,int length)接口一致。 |
| void setCharacterStream(int parameterIndex, java.io.Reader reader,int length) | ORA/MYSQL | java.io.Reader reader | java.io.Reader | 参数java.io.Reader reader不为null 并且连接参数stringtype=unspecified | UNSPECIFIED | - |
| ORA/MYSQL | java.io.Reader reader | java.io.Reader | 参数java.io.Reader reader不为null 并且连接参数stringtype不为unspecified(默认) | VARCHAR | - | |
| ORA | java.io.Reader reader | java.io.Reader | 参数java.io.Reader reader不为null 并且连接参数stringtype=unspecified | UNSPECIFIED | - | |
| ORA | java.io.Reader reader | java.io.Reader | 参数javaio.Reader reader不为null 并且连接参数stringtype不为unspecified(默认) | VARCHAR | - | |
| MYSQL | java.io.Reader reader | java.io.Reader | 参数java.io.Reader reader为null | UNSPECIFIED | - | |
| void setCharacterStream(int parameterIndex, java.io.Reader reader) | ORA/MYSQL | java.io.Reader reader | java.io.Reader | 参数java.io.Reader reader为null 并且连接参数stringtype=unspecified | UNSPECIFIED | - |
| ORA/MYSQL | java.io.Reader reader | java.io.Reader | 参数java.io.Reader reader为null 并且连接参数stringtype不为unspecified(默认) | VARCHAR | - | |
| ORA/MYSQL | java.io.Reader reader | java.io.Reader | 参数java.io.Reader reader不为null 并且连接参数preferQueryMode=simple 并且连接参数stringtype=unspecified | UNSPECIFIED | - | |
| ORA/MYSQL | java.io.Reader reader | java.io.Reader | 参数java.io.Reader reader不为null 并且连接参数preferQueryMode=simple 并且连接参数stringtype不为unspecified(默认) | VARCHAR | - | |
| ORA/MYSQL | java.io.Reader reader | java.io.Reader | 参数java.io.Reader reader不为null 并且连接参数preferQueryMode不为simple 并且连接参数stringtype不为unspecified(默认) | TEXT | - | |
| void setUnicodeStream(int parameterIndex, java.io.InputStream x, int length) | ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 参数java.io.InputStream x为null 并且连接参数stringtype=unspecified | UNSPECIFIED | - |
| ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 参数java.io.InputStream x为null 并且连接参数stringtype不为unspecified(默认) | VARCHAR | - | |
| ORA/MYSQL | java.io.InputStream x | java.io.InputStream | 参数java.io.InputStream x不为null | VARCHAR | - | |
| ORA/MYSQL | Blob x | java.sql.BLOB | - | BLOB | - | |
| void setBlob(int parameterIndex, InputStream inputStream) | ORA/MYSQL | java.io.InputStream x | java.io.InputStream | - | BLOB | - |
| void setBlob(int parameterIndex, InputStream inputStream, long length) | ORA/MYSQL | InputStream inputStream | java.io.InputStream | - | BLOB | - |
| ORA/MYSQL | Clob x | java.sql.CLOB | 参数Clob x为null | CLOB | - | |
| ORA/MYSQL | Clob x | java.sql.CLOB | 参数Clob x不为null 并且连接参数stringtype=unspecified | UNSPECIFIED | - | |
| ORA/MYSQL | Clob x | java.sql.CLOB | 参数Clob x不为null 并且连接参数stringtype不为unspecified(默认) | VARCHAR | - | |
| void setClob(int parameterIndex, Reader reader) | ORA/MYSQL | Reader reader | java.io.Reader | 连接参数stringtype=unspecified | UNSPECIFIED | - |
| ORA/MYSQL | Reader reader | java.io.Reader | 连接参数stringtype不为unspecified | VARCHAR | - | |
| void setClob(int parameterIndex, Reader reader, long length) | ORA/MYSQL | Reader reader | java.io.Reader | 连接参数stringtype=unspecified | UNSPECIFIED | - |
| ORA/MYSQL | Reader reader | java.io.Reader | 连接参数stringtype不为unspecified(默认) | VARCHAR | - | |
| ORA/MYSQL | Array x | java.sql.Array | 参数Array x为null | UNSPECIFIED | - | |
| ORA/MYSQL | Array x | java.sql.Array | 参数Array x不为null | 根据创建PGArray或者GaussArray的参数决定。 | - | |
| ORA | Array x | GaussArray | - | - | - | |
| ORA | Array x | GaussArray | 参数Array x为null | UNSPECIFIED | - | |
| ORA/MYSQL | RowId x | java.sql.RowId | - | ROWID | - | |
| void setNString(int parameterIndex, String value) | ORA/MYSQL | String x | java.lang.String | 连接参数stringtype=varchar(默认) | VARCHAR | - |
| ORA/MYSQL | String x | java.lang.String | 连接参数stringtype=unspecified | UNSPECIFIED | - | |
| ORA/MYSQL | SQLXML xmlObject | java.sql.SQLXML | - | XML | - | |
| void setObject(int parameterIndex, Object x, int targetSqlType) | ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x为null | 请参见表2。 | - |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.SQLXML | - | ||
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.INTEGER | - | ||
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.TINYINT | INT1 | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.SMALLINT | INT2 | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.BIGINT | INT8 | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.REAL | - | ||
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.FLOAT 并且连接参数setFloat=true | FLOAT4 | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.FLOAT 并且连接参数setFloat=false | FLOAT8 | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.DOUBLE | FLOAT8 | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.DECIMAL | NUMERIC | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.NUMERIC | NUMERIC | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.CHAR | BPCHAR | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.VARCHAR | VARCHAR | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.LONGVARCHAR 并且参数Object x类型为InputStream | TEXT | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.LONGVARCHAR 并且Object x类型不为InputStream | VARCHAR | - | |
| ORA | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.DATE 并且参数Object x类型不是LocalDate 并且连接参数binaryTransfer=true 并且数据库GUC参数mapping_date_to_datea取值为on | DATEA | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.DATE 并且参数Object x类型不是LocalDate 并且连接参数binaryTransfer=true 并且数据库GUC参数mapping_date_to_datea取值为off | UNSPECIFIED | - | |
| MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.DATE 并且参数Object x类型不是LocalDate 并且连接参数binaryTransfer=false(默认) | UNSPECIFIED | - | |
| ORA | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.DATE 并且参数Object x类型不是LocalDate 并且连接参数binaryTransfer=false(默认) 并且连接参数oracleCompatible不配置为true并且配置不包含setDateTime | UNSPECIFIED | - | |
| ORA | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.DATE 并且参数Object x类型不是LocalDate 并且连接参数binaryTransfer=false(默认) 并且连接参数oracleCompatible配置为true或者配置包含setDateTime 并且数据库GUC参数mapping_date_to_datea取值为on | DATEA | - | |
| ORA | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.DATE 并且参数Object x类型不是LocalDate 并且连接参数binaryTransfer=false(默认) 并且连接参数oracleCompatible配置为true或者配置包含setDateTime 并且数据库GUC参数mapping_date_to_datea取值为off | TIMESTAMP | - | |
| ORA | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.DATE 并且参数Object x类型是LocalDate 并且连接参数binaryTransfer=true 并且数据库GUC参数mapping_date_to_datea取值为on | DATEA | - | |
| MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.DATE 并且参数Object x类型是LocalDate 并且连接参数binaryTransfer=true 并且数据库GUC参数mapping_date_to_datea取值为on | DATE | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.TIME 并且参数Object x类型不是LocalTime | - | ||
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.TIME 并且参数Object x类型是LocalTime | TIME | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.TIMESTAMP 并且参数Object x类型不是LocalDateTime | 请参见void setTimestamp(int parameterIndex, java.sql.Timestamp x, Calendar cal)接口。 | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.TIMESTAMP 并且参数Object x类型是LocalDateTime | TIMESTAMP | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.TIMESTAMP_WITH_TIMEZONE 并且参数Object x类型是OffsetDateTime | TIMESTAMPTZ | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.TIMESTAMP_WITH_TIMEZONE 并且参数Object x类型是PGTimestamp | 请参见void setTimestamp(int parameterIndex, java.sql.Timestamp x, Calendar cal)接口。 | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.BIT 并且连接参数use_boolean=true | BOOL | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.BIT 并且连接参数use_boolean=false(默认) | INT2 | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.BOOLEAN 并且连接参数use_boolean=true | BOOL | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.BOOLEAN 并且连接参数use_boolean=false(默认) | INT2 | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.BINARY、Types.VARBINARY或Types.LONGVARBINARY | 根据参数Object x数据类型决定,请参见表3。 | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.BLOB 并且参数Object x类型是Blob | - | ||
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.BLOB 并且参数Object x类型是InputStream | - | ||
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.CLOB 并且参数Object x类型是Clob | - | ||
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.DISTINCT | UNSPECIFIED | - | |
| ORA/MYSQL | int targetSqlType | java.lang.Integer | 参数Object x不为null 并且参数int targetSqlType=Types.ROWID | ROWID | - | |
| void setObject(int parameterIndex, Object x) | ORA/MYSQL | - | - | - | - | 根据参数Object x类型,请参见表3寻找对应类型。 |
| default void setObject(int parameterIndex, Object x, SQLType targetSqlType,int scaleOrLength) | ORA/MYSQL | - | - | - | - | 根据参数SQLType targetSqlType类型,请参见表4寻找对应类型。 |
| default void setObject(int parameterIndex, Object x, SQLType targetSqlType) | ORA/MYSQL | - | - | - | - | 根据参数SQLType targetSqlType类型,请参见表4寻找对应类型。 |
| void setObject(int parameterIndex, Object x, int targetSqlType, int scaleOrLength) | ORA/MYSQL | - | - | - | - | 根据参数int targetSqlType类型,请参见表4寻找对应类型。 |
| JAVA type id | 兼容模式 | 条件 | 发送到数据库的类型 |
|---|---|---|---|
| Types.VARCHAR | ORA/MYSQL | 连接参数stringtype=unspecified | UNSPECIFIED |
| Types.VARCHAR | ORA/MYSQL | 连接参数stringtype不为unspecified(默认) | VARCHAR |
| Types.LONGVARCHAR | ORA/MYSQL | 连接参数stringtype=unspecified | UNSPECIFIED |
| Types.LONGVARCHAR | ORA/MYSQL | 连接参数stringtype不为unspecified(默认) | VARCHAR |
| Types.DATE | ORA | 连接参数oracleCompatible配置为true或者配置包含setDateTime 并且数据库GUC参数mapping_date_to_datea取值为on | DATEA |
| Types.DATE | ORA | 连接参数oracleCompatible配置为true或者配置包含setDateTime 并且数据库GUC参数mapping_date_to_datea取值为off | TIMESTAMP |
| Types.DATE | ORA/MYSQL | - | DATE |
| Types.SQLXML | ORA/MYSQL | - | XML |
| Types.INTEGER | ORA/MYSQL | - | INT4 |
| Types.TINYINT | ORA/MYSQL | - | INT1 |
| Types.SMALLINT | ORA/MYSQL | - | INT2 |
| Types.BIGINT | ORA/MYSQL | - | INT8 |
| Types.REAL | ORA/MYSQL | - | FLOAT4 |
| Types.DOUBLE | ORA/MYSQL | - | FLOAT8 |
| Types.FLOAT | ORA/MYSQL | - | FLOAT8 |
| Types.DECIMAL | ORA/MYSQL | - | NUMERIC |
| Types.NUMERIC | ORA/MYSQL | - | NUMERIC |
| Types.CHAR | ORA/MYSQL | - | BPCHAR |
| Types.TIME | ORA/MYSQL | - | UNSPECIFIED |
| Types.TIMESTAMP | ORA/MYSQL | - | UNSPECIFIED |
| Types.TIME_WITH_TIMEZONE | ORA/MYSQL | - | UNSPECIFIED |
| Types.TIMESTAMP_WITH_TIMEZONE | ORA/MYSQL | - | UNSPECIFIED |
| Types.BOOLEAN | ORA/MYSQL | - | BOOL |
| Types.BIT | ORA/MYSQL | - | BOOL |
| Types.BINARY | ORA/MYSQL | - | BYTEA |
| Types.VARBINARY | ORA/MYSQL | - | BYTEA |
| Types.LONGVARBINARY | ORA/MYSQL | - | BYTEA |
| Types.BLOB | ORA/MYSQL | - | BLOB |
| Types.CLOB | ORA/MYSQL | - | CLOB |
| Types.ARRAY | ORA/MYSQL | - | UNSPECIFIED |
| Types.DISTINCT | ORA/MYSQL | - | UNSPECIFIED |
| Types.STRUCT | ORA/MYSQL | - | UNSPECIFIED |
| Types.NULL | ORA/MYSQL | - | UNSPECIFIED |
| Types.OTHER | ORA/MYSQL | - | UNSPECIFIED |
| 类型 | 兼容模式 | 条件 | 发送到数据库的类型 |
|---|---|---|---|
| null | ORA/MYSQL | - | |
| UUID | ORA/MYSQL | - | UUID |
| SQLXML | ORA/MYSQL | - | 请参见表1中void setSQLXML(int parameterIndex, SQLXML xmlObject)接口。 |
| String | ORA/MYSQL | - | |
| Character | ORA/MYSQL | - | |
| RowId | ORA/MYSQL | - | |
| BigDecimal | ORA/MYSQL | - | 请参见表1中void setBigDecimal(int parameterIndex, BigDecimal x)接口。 |
| Short | ORA/MYSQL | - | |
| Integer | ORA/MYSQL | - | |
| Long | ORA/MYSQL | - | |
| Float | ORA/MYSQL | - | |
| Double | ORA/MYSQL | - | |
| byte[] | ORA/MYSQL | - | |
| Byte | ORA/MYSQL | - | |
| java.sql.Date | ORA/MYSQL | - | |
| Time | ORA/MYSQL | - | |
| Timestamp | ORA/MYSQL | - | 请参见表1中void setTimestamp(int parameterIndex, java.sql.Timestamp x)接口。 |
| LocalDate | MYSQL | - | DATE |
| ORA | 连接参数 mapping_date_to_datea取值为on | DATEA | |
| ORA | 连接参数 mapping_date_to_datea取值为off | TIMESTAMP | |
| LocalTime | ORA/MYSQL | - | TIME |
| LocalDateTime | ORA/MYSQL | - | TIMESTAMP |
| OffsetDateTime | ORA/MYSQL | - | TIMESTAMPTZ |
| java.util.Date | ORA/MYSQL | - | 请参见表1中void setTimestamp(int parameterIndex, java.sql.Timestamp x)接口。 |
| Boolean | ORA/MYSQL | - | |
| Blob | ORA/MYSQL | - | |
| Clob | ORA/MYSQL | - | |
| Number | ORA/MYSQL | - | NUMERIC |
| targetSqlType参数值 | 兼容模式 | 条件 | 发送到数据库的类型 |
|---|---|---|---|
| Types.SQLXML | ORA/MYSQL | - | 请参见表1中void setSQLXML(int parameterIndex, SQLXML xmlObject)接口。 |
| Types.INTEGER | ORA/MYSQL | - | |
| Types.TINYINT | ORA/MYSQL | - | INT1 |
| Types.SMALLINT | ORA/MYSQL | - | |
| Types.BIGINT | ORA/MYSQL | - | |
| Types.REAL | ORA/MYSQL | - | |
| Types.FLOAT | ORA/MYSQL | 连接参数setFloat=true | |
| MYSQL | 连接参数setFloat=false(默认) 并且连接参数mCompatible不包含pstatement | ||
| ORA | 连接参数setFloat=false(默认) | ||
| MYSQL | 连接参数setFloat=false(默认) 并且连接参数mCompatible为true或者包含pstatement | ||
| Types.DOUBLE | ORA/MYSQL | - | |
| Types.DECIMAL | ORA/MYSQL | - | 请参见表1中void setBigDecimal(int parameterIndex, BigDecimal x)接口。 |
| Types.NUMERIC | ORA/MYSQL | - | 请参见表1中void setBigDecimal(int parameterIndex, BigDecimal x)接口。 |
| Types.CHAR | ORA/MYSQL | - | BPCHAR |
| Types.VARCHAR | ORA/MYSQL | - | VARCHAR |
| Types.LONGVARCHAR | ORA/MYSQL | 参数Object x类型为InputStream | TEXT |
| ORA/MYSQL | 参数Object x类型不为InputStream | VARCHAR | |
| Types.DATE | ORA/MYSQL | - | |
| Types.TIME | ORA/MYSQL | - | |
| Types.TIMESTAMP | ORA/MYSQL | - | 请参见表1中void setTimestamp(int parameterIndex, java.sql.Timestamp x)接口。 |
| Types.TIMESTAMP_WITH_TIMEZONE | ORA/MYSQL | 参数Object x类型为OffsetDateTime或者PGTimestamp | 请参见表1中void setTimestamp(int parameterIndex, java.sql.Timestamp x)接口。 |
| Types.BIT | ORA/MYSQL | 连接参数mCompatible不配置为true并且配置不包含pstatement | |
| MYSQL | 连接参数mCompatible配置为true或者配置包含pstatement | ||
| Types.BOOLEAN | ORA/MYSQL | - | |
| Types.BINARY | ORA/MYSQL | - | 请根据Object x数据类型,对照表3寻找对应发送到数据库的类型。 |
| Types.VARBINARY | ORA/MYSQL | - | 请根据Object x数据类型,对照表3寻找对应发送到数据库的类型。 |
| Types.LONGVARBINARY | ORA/MYSQL | - | 请根据Object x数据类型,对照表3寻找对应发送到数据库的类型。 |
| Types.BLOB | ORA/MYSQL | 参数Object x类型为Blob | |
| ORA/MYSQL | 参数Object x类型为InputStream | ||
| Types.CLOB | ORA/MYSQL | 参数Object x类型为Clob | |
| Types.ARRAY | ORA/MYSQL | 参数Object x类型为Array | |
| Types.DISTINCT | ORA/MYSQL | - | UNSPECIFIED |
| Types.ROWID | ORA/MYSQL | 参数Object x类型为RowId | |
| ORA/MYSQL | 参数Object x类型为String | ROWID | |
| Types.OTHER | ORA/MYSQL | 参数Object x类型为UUID 并且服务端参数SERVER_VERSION值大于8.3.0 | UUID |
| ORA/MYSQL | 参数Object x类型不为PGobject或MAP | UNSPECIFIED |
| 方法(Method) | 处理逻辑 | 备注 |
|---|---|---|
| getString(int columnIndex) | 结合列OID、数据库类型及连接参数,获取对应的JDBC类型并进行转换。若需转为String类型,会对特定数据库的特殊数据(如十六进制数据)进行针对性解析和处理。 | - |
| getString(String columnLabel) | - | |
| getBoolean(int columnIndex) | 若列OID为BOOL,数据长度为1且值为ASCII码值116(小写字母t),则返回true,否则返回false。其他场景下,基于列OID及设置的连接参数将byte数据转换为对应的字符串后,再解析该字符串是否符合boolean语义(如 "true"、"t"、"0"、"1" 等)并返回对应结果。 | - |
| getBoolean(String columnLabel) | - | |
| getByte(int columnIndex) | 基于列OID及设置的连接参数获取对应的JDBC类型,依据该类型将数据先转换为String或long类型,最终强制转换为byte类型返回。若为高精度数值对象,会截断其小数部分。 | - |
| getByte(String columnLabel) | - | |
| getShort(int columnIndex) | 基于列OID及设置的连接参数,将数据先转换为String(转换时去除 $、(、) 等特殊字符)或long类型,最终强制转换为short类型返回。若为高精度数值对象,会截断其小数部分。 | - |
| getShort(String columnLabel) | - | |
| getInt(int columnIndex) | 若列OID为INT4,则直接转换为int类型返回。其他场景下,将数据先转换为String(去除特殊字符)或long类型,最终强制转换为int类型返回。若为高精度数值,截断小数部分。 | - |
| getInt(String columnLabel) | - | |
| getLong(int columnIndex) | 若列OID为INT8,则直接转换为long类型返回。其他场景下,将数据先转换为String(去除特殊字符),再解析并转换为long类型返回。若为高精度数值,截断小数部分。 | - |
| getLong(String columnLabel) | - | |
| getFloat(int columnIndex) | 若列OID为FLOAT4,则直接转换为float类型返回。其他场景下,将数据先转换为String(去除特殊字符)或double类型,最终强制转换为float类型返回。 | - |
| getFloat(String columnLabel) | - | |
| getDouble(int columnIndex) | 若列OID为FLOAT8,则直接转换为double类型返回。其他场景下,将数据先转换为String(去除特殊字符),最终解析并转换为double类型返回。 | - |
| getDouble(String columnLabel) | - | |
| getBigDecimal(int columnIndex, int scale) | 基于列OID及设置的连接参数获取对应的JDBC类型,依据该类型将数据先转换为String、Number或long类型,最终构造并返回BigDecimal对象。 | 四个接口底层调用同一个函数getBigDecimal(int columnIndex, int scale),其中 getBigDecimal(int columnIndex)和getBigDecimal(String columnLabel)调用时scale为-1。 |
| getBigDecimal(String columnLabel, int scale) | ||
| getBigDecimal(int columnIndex) | ||
| getBigDecimal(String columnLabel) | ||
| getBytes(int columnIndex) | 基于列OID及设置的连接参数,部分场景直接保留并返回byte数组;其他场景先将数据转为JDBC类型对应的String,再提取为byte数组。最终会根据Statement.setMaxFieldSize的限制,截取数组长度后返回。 | - |
| getBytes(String columnLabel) | - | |
| getDate(int columnIndex) | 基于列OID及设置的连接参数,部分场景直接转换为Timestamp或天数,再结合时区换算为Date返回;其他场景先转换为String,再结合时区解析构造为Date对象返回。 | 四个接口底层调用同一个函数getDate(int columnIndex, java.util.Calendar cal),其中 getDate(int columnIndex)和getDate(String columnLabel)调用时cal为null。 |
| getDate(String columnLabel) | ||
| getDate(int columnIndex, Calendar cal) | ||
| getDate(String columnLabel, Calendar cal) | ||
| getTime(int columnIndex) | 基于列OID及设置的连接参数,部分场景直接转换对应底层数据并结合时区计算Time值;其他场景先转换为String,再结合时区解析构造为Time对象返回。 | 四个接口底层调用同一个函数getTime(int columnIndex, java.util.Calendar cal),其中 getTime(int columnIndex)和getTime(String columnLabel)调用时cal为null。 |
| getTime(String columnLabel) | ||
| getTime(int columnIndex, Calendar cal) | ||
| getTime(String columnLabel, Calendar cal) | ||
| getTimestamp(int columnIndex) | 基于列OID及设置的连接参数,部分场景直接转换对应底层数据并结合时区计算Timestamp值;其他场景先转换为String,再结合时区解析构造为Timestamp对象返回。 | 四个接口底层调用同一个函数getTimestamp(int columnIndex, java.util.Calendar cal),其中 getTimestamp(int columnIndex)和getTimestamp(String columnLabel)调用时cal为null。 |
| getTimestamp(String columnLabel) | ||
| getTimestamp(int columnIndex, Calendar cal) | ||
| getTimestamp(String columnLabel, Calendar cal) | ||
| getAsciiStream(int columnIndex) | 基于列OID及设置的连接参数,将数据转为String后,按ASCII编码将其转换为字节数组,并封装为ByteArrayInputStream对象作为InputStream返回。 | - |
| getAsciiStream(String columnLabel) | - | |
| getBinaryStream(int columnIndex) | 逻辑参考getBytes。获取符合Statement.setMaxFieldSize长度限制的byte数组后,将其封装为ByteArrayInputStream对象作为InputStream返回。 | - |
| getBinaryStream(String columnLabel) | - | |
| getObject(int columnIndex) | 基于列OID及设置的连接参数,获取对应的JDBC类型并进行转换返回。在涉及String类型转换的过程中,会对部分特殊数据进行针对性处理。 | - |
| getObject(String columnLabel) | - | |
| getCharacterStream(int columnIndex) | 内部调用getString获取字符串,通过toCharArray()将其转换为字符数组,并以此数组构造CharArrayReader作为Reader返回。 | - |
| getCharacterStreamt(String columnLabel) | - | |
| getRow() | 获取当前结果集游标所在的行号。行号从1开始递增(第一行为1,第二行为2,以此类推)。 | - |
| getObject(int columnIndex, java.util.Map<String,Class<?>> map) | JDBC驱动暂不支持自定义类型映射。当传入的map为空时,默认降级调用getObject(int columnIndex)接口返回数据。 | - |
| getObject(String columnLabel, java.util.Map<String,Class<?>> map) | - | |
| getRef(int columnIndex) | 暂不支持。 | - |
| getRef(String columnLabel) | - | |
| getBlob(int columnIndex) | 基于列OID及设置的连接参数获取处理后的byte数组,以此底层数据构造并返回基于java.sql.Blob接口实现的实例对象。 | - |
| getBlob(String columnLabel) | - | |
| getClob(int columnIndex) | 基于列OID及设置的连接参数获取处理后的byte数组,以此底层数据构造并返回基于java.sql.Clob接口实现的实例对象。 | - |
| getClob(String columnLabel) | - | |
| getArray(int columnIndex) | 基于列OID及设置的连接参数获取处理后的byte数组,以此底层数据构造并返回基于java.sql.Array接口实现的实例对象。 | - |
| getArray(String columnLabel) | - | |
| getURL(int columnIndex) | 内部调用getString获取字符串,并利用该字符串构造java.net.URL对象返回。 | - |
| getURL(String columnLabel) | - | |
| getRowId(int columnIndex) | 内部调用getBytes获取byte数组,以此底层数据构造并返回基于java.sql.RowId接口实现的实例对象。 | - |
| getRowId(String columnLabel) | - | |
| getHoldability() | 暂不支持。 | - |
| getNClob(int columnIndex) | 暂不支持。 | - |
| getNClob(String columnLabel) | - | |
| getSQLXML(int columnIndex) | 内部调用getString获取字符串,并利用该字符串构造并返回基于java.sql.SQLXML接口实现的实例对象。 | - |
| getSQLXML(String columnLabel) | - | |
| getNString(int columnIndex) | 处理逻辑同getString。 | - |
| getNString(String columnLabel) | - | |
| getNCharacterStream(int columnIndex) | 暂不支持。 | - |
| getNCharacterStream(String columnLabel) | - | |
| getObject(int columnIndex, Class<T> type) | 根据传入的type参数(Class类型),决定数据库返回byte数据的转换方法,并按指定的类型返回(部分特定类型包含特殊处理逻辑)。 | - |
| getObject(String columnLabel, Class<T> type) | - | |
| getCursorName() | 返回null。 | - |
| getMetaData() | 返回包含当前结果集所有列的元数据描述。 | - |
| getFetchDirection() | 返回当前ResultSet的数据抓取方向(fetch direction)。 | - |
| getFetchSize() | 返回当前ResultSet的抓取大小(fetch size),即JDBC驱动每次从数据库批量获取的行数提示值。 | - |
| getType() | 返回当前ResultSet的类型(游标类型)。 | - |
| getConcurrency() | 返回当前ResultSet的并发模式。 | - |
| getStatement() | 返回当前ResultSet的Statement对象。 | - |
GaussDB JDBC调用ResultSet类中的get接口时, 具体的数据解码与类型映射逻辑在部分场景与Oracle存在差异。
这种底层驱动的切换,通常会在以下几个维度引发Java应用层面上数据表现的差异:
- 类型映射策略的不同:不同驱动对于数据库原生类型(如通用的NUMBER)的理解不同。部分驱动倾向于强类型的严格映射(如强制映射为BigDecimal),而定制驱动可能为了兼容特定的历史系统,将其泛化映射为Double或String。
- 精度与舍入边界的把控:在处理带有高精度小数或极端大数时,不同驱动的“容忍度”不同。有些驱动在遇到精度溢出时会静默截断或补零,而严谨的驱动则可能直接抛出边界异常。
- 环境与上下文的依赖:对于时间戳等敏感数据,不同驱动在解析纯数字时,引入本地服务器时区偏移补偿的算法和基准可能存在细微出入。
- 空值与脏数据的兜底策略:当数据库底层为NULL或非标数据格式时,不同驱动的异常阻断机制和默认值填充策略(Fallback逻辑)一般会相差很大。
- 隐式类型转换的宽容度与规则:当调用的ResultSet类get接口与数据库底层列类型不严格匹配时(例如对数值/日期列调用getString(),或对字符串列调用getInt()),不同驱动的隐式转换机制存在差异。部分驱动极其宽容,会在底层自动完成跨类型的强制转换;而更严格的驱动可能会直接抛出类型不匹配异常,或在将其隐式转换为字符串时,采用截然不同的默认序列化格式(如时间的默认输出样式不同)。