java.sql.CallableStatement
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)方法仅用于注册复合数据类型,其它类型不支持。
| 方法名 | 返回值类型 | 支持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所示。
| 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 |