更新时间:2026-07-28 GMT+08:00
分享

数据类型转换规则

数据类型、JAVA变量类型以及JDBC类型索引关系如表1所示。

  • 非透明多写特性下,兼容ORA/MYSQL。
  • 发送到服务端的类型非最终存储到数据库表中的类型,下表中发送到数据库的类型对应到数据库表中的类型请参见《参考》中“SQL参考 > 类型转换 > 值存储”章节,其中的类型转换规则同样适用于MYSQL兼容模式。
  • JDBC连接参数详情请参见连接参数参考
表1 PrepareStatement类set接口数据转换规则

JDBC接口

兼容模式

目标参数名

目标参数JAVA变量类型

条件

发送到数据库的类型

备注

setNull(int parameterIndex, int sqlType)

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

-

void setBoolean(int parameterIndex, boolean x)

ORA/MYSQL

boolean x

java.lang.Boolean

连接参数use_boolean=true

BOOL

-

ORA/MYSQL

boolean x

java.lang.Boolean

连接参数use_boolean=false(默认)

INT2

-

void setByte(int parameterIndex, byte x)

ORA/MYSQL

byte x

byte

-

INT2

-

void setShort(int parameterIndex, short x)

ORA/MYSQL

short x

java.lang.Short

-

INT2

-

void setInt(int parameterIndex, int x)

ORA/MYSQL

int x

java.lang.Integer

-

INT4

-

void setLong(int parameterIndex, long x)

ORA/MYSQL

long x

java.lang.Long

-

INT8

-

void setFloat(int parameterIndex, float x)

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

-

void setDouble(int parameterIndex, double x)

ORA/MYSQL

double x

java.lang.Double

-

FLOAT8

-

void setBigDecimal(int parameterIndex, BigDecimal x)

ORA/MYSQL

BigDecimal x

java.math.BigDecimal

-

NUMERIC

-

void setString(int parameterIndex, String x)

ORA/MYSQL

String x

java.lang.String

连接参数stringtype=varchar(默认)

VARCHAR

-

ORA/MYSQL

String x

java.lang.String

连接参数stringtype=unspecified

UNSPECIFIED

-

void setBytes(int parameterIndex, byte x[])

ORA/MYSQL

byte x[]

[]byte

-

BYTEA

-

void setDate(int parameterIndex, java.sql.Date x, Calendar cal)

ORA/MYSQL

-

-

-

-

void setDate(int parameterIndex, java.sql.Date x)一致。

void setDate(int parameterIndex, java.sql.Date x)

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

-

-

-

-

void setTime(int parameterIndex, java.sql.Time x)一致。

void setTime(int parameterIndex, java.sql.Time x)

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)一致。

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

-

void setBlob(int parameterIndex, Blob x)

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

-

void setClob(int parameterIndex, Clob x)

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

-

void setArray(int parameterIndex, Array x)

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

-

void setRowId(int parameterIndex, RowId x)

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

-

void setSQLXML(int parameterIndex, SQLXML xmlObject)

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

请参见void setSQLXML(int parameterIndex, SQLXML xmlObject)接口。

-

ORA/MYSQL

int targetSqlType

java.lang.Integer

参数Object x不为null

并且参数int targetSqlType=Types.INTEGER

请参见void setInt(int parameterIndex, int x)接口。

-

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

请参见void setFloat(int parameterIndex, float x)接口。

-

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

请参见void setTime(int parameterIndex, java.sql.Time x)接口。

-

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

请参见void setBlob(int parameterIndex, Blob x)接口。

-

ORA/MYSQL

int targetSqlType

java.lang.Integer

参数Object x不为null

并且参数int targetSqlType=Types.BLOB

并且参数Object x类型是InputStream

请参见void setLong(int parameterIndex, long x)接口。

-

ORA/MYSQL

int targetSqlType

java.lang.Integer

参数Object x不为null

并且参数int targetSqlType=Types.CLOB

并且参数Object x类型是Clob

请参见void setClob(int parameterIndex, Clob x)接口。

-

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寻找对应类型。

表2 setNull接口java类型对应数据库类型

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

表3 setObject接口参数object x类型对应执行接口

类型

兼容模式

条件

发送到数据库的类型

null

ORA/MYSQL

-

请参见表1setNull(int parameterIndex, int sqlType)接口。

UUID

ORA/MYSQL

-

UUID

SQLXML

ORA/MYSQL

-

请参见表1void setSQLXML(int parameterIndex, SQLXML xmlObject)接口。

String

ORA/MYSQL

-

请参见表1void setString(int parameterIndex, String x)接口。

Character

ORA/MYSQL

-

请参见表1void setString(int parameterIndex, String x)接口。

RowId

ORA/MYSQL

-

请参见表1void setRowId(int parameterIndex, RowId x)接口。

BigDecimal

ORA/MYSQL

-

请参见表1void setBigDecimal(int parameterIndex, BigDecimal x)接口。

Short

ORA/MYSQL

-

请参见表1void setShort(int parameterIndex, short x)接口。

Integer

ORA/MYSQL

-

请参见表1void setInt(int parameterIndex, int x)接口。

Long

ORA/MYSQL

-

请参见表1void setLong(int parameterIndex, long x)接口。

Float

ORA/MYSQL

-

请参见表1void setFloat(int parameterIndex, float x)接口。

Double

ORA/MYSQL

-

请参见表1void setDouble(int parameterIndex, double x)接口。

byte[]

ORA/MYSQL

-

请参见表1void setBytes(int parameterIndex, byte x[])接口。

Byte

ORA/MYSQL

-

请参见表1void setByte(int parameterIndex, byte x)接口。

java.sql.Date

ORA/MYSQL

-

请参见表1void setDate(int parameterIndex, java.sql.Date x)接口。

Time

ORA/MYSQL

-

请参见表1void setTime(int parameterIndex, java.sql.Time x)接口。

Timestamp

ORA/MYSQL

-

请参见表1void 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

-

请参见表1void setTimestamp(int parameterIndex, java.sql.Timestamp x)接口。

Boolean

ORA/MYSQL

-

请参见表1void setBoolean(int parameterIndex, boolean x)接口。

Blob

ORA/MYSQL

-

请参见表1void setBlob(int parameterIndex, Blob x)接口。

Clob

ORA/MYSQL

-

请参见表1void setClob(int parameterIndex, Clob x)接口。

Number

ORA/MYSQL

-

NUMERIC

表4 setObject接口参数targetSqlType对应执行接口

targetSqlType参数值

兼容模式

条件

发送到数据库的类型

Types.SQLXML

ORA/MYSQL

-

请参见表1void setSQLXML(int parameterIndex, SQLXML xmlObject)接口。

Types.INTEGER

ORA/MYSQL

-

请参见表1void setInt(int parameterIndex, int x)接口。

Types.TINYINT

ORA/MYSQL

-

INT1

Types.SMALLINT

ORA/MYSQL

-

请参见表1void setShort(int parameterIndex, short x)接口。

Types.BIGINT

ORA/MYSQL

-

请参见表1void setLong(int parameterIndex, long x)接口。

Types.REAL

ORA/MYSQL

-

请参见表1void setFloat(int parameterIndex, float x)接口。

Types.FLOAT

ORA/MYSQL

连接参数setFloat=true

请参见表1void setFloat(int parameterIndex, float x)接口。

MYSQL

连接参数setFloat=false(默认)

并且连接参数mCompatible不包含pstatement

请参见表1void setFloat(int parameterIndex, float x)接口。

ORA

连接参数setFloat=false(默认)

请参见表1void setDouble(int parameterIndex, double x)接口

MYSQL

连接参数setFloat=false(默认)

并且连接参数mCompatible为true或者包含pstatement

请参见表1void setDouble(int parameterIndex, double x)接口

Types.DOUBLE

ORA/MYSQL

-

请参见表1void setDouble(int parameterIndex, double x)接口

Types.DECIMAL

ORA/MYSQL

-

请参见表1void setBigDecimal(int parameterIndex, BigDecimal x)接口。

Types.NUMERIC

ORA/MYSQL

-

请参见表1void 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

-

请参见表1void setDate(int parameterIndex, java.sql.Date x)接口。

Types.TIME

ORA/MYSQL

-

请参见表1void setTime(int parameterIndex, java.sql.Time x)接口。

Types.TIMESTAMP

ORA/MYSQL

-

请参见表1void setTimestamp(int parameterIndex, java.sql.Timestamp x)接口。

Types.TIMESTAMP_WITH_TIMEZONE

ORA/MYSQL

参数Object x类型为OffsetDateTime或者PGTimestamp

请参见表1void setTimestamp(int parameterIndex, java.sql.Timestamp x)接口。

Types.BIT

ORA/MYSQL

连接参数mCompatible不配置为true并且配置不包含pstatement

请参见表1void setBoolean(int parameterIndex, boolean x)接口。

MYSQL

连接参数mCompatible配置为true或者配置包含pstatement

请参见表1void setInt(int parameterIndex, int x)接口。

Types.BOOLEAN

ORA/MYSQL

-

请参见表1void setBoolean(int parameterIndex, boolean x)接口。

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

请参见表1void setBlob(int parameterIndex, Blob x)接口。

ORA/MYSQL

参数Object x类型为InputStream

请参见表1void setLong(int parameterIndex, long x)接口。

Types.CLOB

ORA/MYSQL

参数Object x类型为Clob

请参见表1void setClob(int parameterIndex, Clob x)接口。

Types.ARRAY

ORA/MYSQL

参数Object x类型为Array

请参见表1void setArray(int parameterIndex, Array x)接口。

Types.DISTINCT

ORA/MYSQL

-

UNSPECIFIED

Types.ROWID

ORA/MYSQL

参数Object x类型为RowId

请参见表1void setRowId(int parameterIndex, RowId x)接口。

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

表5 ResultSet类get接口

方法(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()),不同驱动的隐式转换机制存在差异。部分驱动极其宽容,会在底层自动完成跨类型的强制转换;而更严格的驱动可能会直接抛出类型不匹配异常,或在将其隐式转换为字符串时,采用截然不同的默认序列化格式(如时间的默认输出样式不同)。

相关文档