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

java.sql.CallableStatement

java.sql.CallableStatement是存储过程执行接口。

表1 对java.sql.CallableStatement的支持情况

方法名

返回值类型

支持JDBC4

getArray(int parameterIndex)

Array

Yes

getBigDecimal(int parameterIndex)

BigDecimal

Yes

getBlob(int parameterIndex)

Blob

Yes

getBoolean(int parameterIndex)

boolean

Yes

getByte(int parameterIndex)

byte

Yes

getBytes(int parameterIndex)

byte[]

Yes

getClob(int parameterIndex)

Clob

Yes

getDate(int parameterIndex)

Date

Yes

getDate(int parameterIndex, Calendar cal)

Date

Yes

getDouble(int parameterIndex)

double

Yes

getFloat(int parameterIndex)

float

Yes

getInt(int parameterIndex)

int

Yes

getLong(int parameterIndex)

long

Yes

getObject(int parameterIndex)

Object

Yes

getObject(int parameterIndex, Class<T> type)

Object

Yes

getRowId(int parameterIndex)

RowId

Yes

getShort(int parameterIndex)

short

Yes

getSQLXML(int parameterIndex)

SQLXML

Yes

getString(int parameterIndex)

String

Yes

getNString(int parameterIndex)

String

Yes

getTime(int parameterIndex)

Time

Yes

getTime(int parameterIndex, Calendar cal)

Time

Yes

getTimestamp(int parameterIndex)

Timestamp

Yes

getTimestamp(int parameterIndex, Calendar cal)

Timestamp

Yes

registerOutParameter(int parameterIndex, int type)

void

Yes

registerOutParameter(int parameterIndex, int sqlType, int type)

void

Yes

wasNull()

boolean

Yes

  • 不允许含有OUT参数的语句执行批量操作。
  • 以下方法是从java.sql.Statement继承而来:close、execute、executeQuery、executeUpdate、getConnection、getResultSet、getUpdateCount、isClosed、setMaxRows、setFetchSize。
  • 以下方法是从java.sql.PreparedStatement继承而来:addBatch、clearParameters、execute、executeQuery、executeUpdate、getMetaData、setBigDecimal、setBoolean、setByte、setBytes、setDate、setDouble、setFloat、setInt、setLong、setNull、setObject、setString、setTime、setTimestamp。
  • registerOutParameter(int parameterIndex, int sqlType, int type)方法仅用于注册复合数据类型,其它类型不支持。
表2 java.sql.CallableStatement可支持的接口(仅在ORA兼容的模式支持,需要设置连接参数oracleCompatible=functionsCompatible)

方法名

返回值类型

支持JDBC4

setNString(String parameterName, String value)

void

Yes

setClob(String parameterName, Reader reader, long length)

void

Yes

setClob(String parameterName, Reader reader)

void

Yes

setBlob(String parameterName, InputStream inputStream, long length)

void

Yes

setBlob(String parameterName, InputStream inputStream)

void

Yes

setBlob(String parameterName, Blob x)

void

Yes

setClob(String parameterName, Clob x)

void

Yes

setSQLXML(String parameterName, SQLXML xmlObject)

void

Yes

setNull(String parameterName, int sqlType)

void

Yes

setBoolean(String parameterName, boolean x)

void

Yes

setByte(String parameterName, byte x)

void

Yes

setShort(String parameterName, short x)

void

Yes

setInt(String parameterName, int x)

void

Yes

setLong(String parameterName, long x)

void

Yes

setFloat(String parameterName, float x)

void

Yes

setDouble(String parameterName, double x)

void

Yes

setBigDecimal(String parameterName, BigDecimal x)

void

Yes

setString(String parameterName, String x)

void

Yes

setBytes(String parameterName, byte[] x)

void

Yes

setDate(String parameterName, java.sql.Date x)

void

Yes

setTime(String parameterName, Time x)

void

Yes

setTimestamp(String parameterName, Timestamp x)

void

Yes

setObject(String parameterName, Object x, int targetSqlType, int scale)

void

Yes

setObject(String parameterName, Object x, int targetSqlType)

void

Yes

setObject(String parameterName, Object x)

void

Yes

setDate(String parameterName, java.sql.Date x, Calendar cal)

void

Yes

setTime(String parameterName, Time x, Calendar cal)

void

Yes

setTimestamp(String parameterName, Timestamp x, Calendar cal)

void

Yes

setNull(String parameterName, int sqlType, String typeName)

void

Yes

setRowId(String parameterName, RowId x)

void

Yes

getObject(String parameterName)

Object

Yes

getBoolean(String parameterName)

boolean

Yes

getByte(String parameterName)

byte

Yes

getShort(String parameterName)

short

Yes

getInt(String parameterName)

int

Yes

getLong(String parameterName)

long

Yes

getFloat(String parameterName)

float

Yes

getDouble(String parameterName)

double

Yes

getBytes(String parameterName)

byte[]

Yes

getArray(String parameterName)

Array

Yes

getDate(String parameterName)

java.sql.Date

Yes

getDate(String parameterName, Calendar cal)

java.sql.Date

Yes

getString(String parameterName)

String

Yes

getClob(String parameterName)

Clob

Yes

getSQLXML(String parameterName)

java.sql.SQLXML

Yes

getNString(String parameterName)

String

Yes

getBigDecimal(String parameterName)

BigDecimal

Yes

getBlob(String parameterName)

Blob

Yes

getTimestamp(String parameterName)

Timestamp

Yes

getTimestamp(String parameterName, Calendar cal)

Timestamp

Yes

getRowId(String parameterName)

RowId

Yes

execute()

boolean

Yes

wasNull()

boolean

Yes

registerOutParameter(String parameterName, int sqlType)

void

Yes

registerOutParameter(String parameterName, int sqlType, int scale)

void

Yes

registerOutParameter(String parameterName, int sqlType, String typeName)

void

Yes

  • 需要设置连接参数oracleCompatible=functionsCompatible。
  • 不支持对于出参(包含返回值)有且仅有一个且类型是record的存储过程。
  • 不支持注册为Types.NULL、Types.OTHER、Types.JAVA_OBJECT、 Types.DISTINCT。
  • 仅支持call语法,推荐使用索引的方式。
  • CallableStatement的get方法类型转换能力与ResultSet相对应的get方法类型转换能力保持一致。
  • registerOutParameter接口支持注册与存过定义参数类型不一致的sqlType。
    • proc_outparam_override参数未开启时,理论上所有sqlType都能注册(除了不支持的sqlType);
    • proc_outparam_override参数开启时,注册sqlType会绑定类型oid,数据库内核会判断该类型是否支持隐式转换到定义的类型,若不支持隐式转换会报错。

getObject(Int parameterIndex)和getObject(String parameterName)获取的类型与返回值类型无关,与注册的sqlType有关。注册sqlType对应返回值类型,如表3所示。

表3 注册sqlType对应返回值类型

sqlType

实际返回值类型

Types.BIT

boolean

Types.BOOLEAN

boolean

Types.TINYINT

byte

Types.SMALLINT

short

Types.INTEGER

int

Types.BIGINT

long

Types.REAL

float

Types.FLOAT

double

Types.DOUBLE

double

Types.DECIMAL

BigDecimal

Types.NUMERIC

BigDecimal

Types.CHAR

String

Types.VARCHAR

String

Types.LONGVARCHAR

String

Types.DATALINK

String

Types.NCHAR

String

Types.NVARCHAR

String

Types.LONGNVARCHAR

String

Types.NCLOB

NClob(暂不支持)

Types.DATE

Date

Types.TIME

Time

Types.TIME_WITH_TIMEZONE

Time

Types.TIMESTAMP

Timestamp

Types.TIMESTAMP_WITH_TIMEZONE

Timestamp

Types.CLOB

Clob

Types.BLOB

Blob

Types.BINARY

byte[]

Types.VARBINARY

byte[]

Types.LONGVARBINARY

byte[]

Types.ARRAY

Array

Types.STRUCT

Record

Types.REF

Ref(暂不支持)

Types.ROWID

RowId

Types.SQLXML

SQLXML

Types.REF_CURSOR

ResultSet

相关文档