LobCreator
虽然 JDBC 定义了两个操作 LOB 类型的接口:java.sql.Blob 和 java.sql.Clob,但有些厂商的 JDBC 驱动程序并不支持这两个接口。为此,Spring 定义了一个独立于 java.sql.Blob/Clob 的 LobCreator 接口,以统一的方式操作各种数据库的 LOB 类型数据。因为 LobCreator 本身持有 LOB 所对应的数据库资源,所以它不是线程安全的,一个 LobCreator 只能操作一个 LOB 数据。
为了方便在 PreparedStatement 中使用 LobCreator,您可以直接使用 JdbcTemplate#execute(String sql,AbstractLobCreatingPreparedStatementCallback lcpsc) 方法。下面对 LobCreator 接口中的方法进行简要说明:
方法 | 说明 |
---|
void close() | 关闭会话,并释放 LOB 资源 | void setBlobAsBinaryStream(PreparedStatement ps, int paramIndex, InputStream contentStream, int contentLength) | 通过流填充 BLOB 数据 | void setBlobAsBytes(PreparedStatement ps, int paramIndex, byte[] content) | 通过二进制数据填充 BLOB 数据 | void setClobAsAsciiStream(PreparedStatement ps, int paramIndex, InputStream asciiStream, int contentLength) | 通过 Ascii 字符流填充 CLOB 数据 | void setClobAsCharacterStream(PreparedStatement ps, int paramIndex, Reader characterStream, int contentLength) | 通过 Unicode 字符流填充 CLOB 数据 | void setClobAsString(PreparedStatement ps, int paramIndex, String content) | 通过字符串填充 CLOB 数据 |
LobHandler
LobHandler 接口为操作 BLOB/CLOB 提供了统一访问接口,而不管底层数据库究竟是以大对象的方式还是以一般数据类型的方式进行操作。此外,LobHandler 还充当了 LobCreator 的工厂类。
大部分数据库厂商的 JDBC 驱动程序(如 DB2)都以 JDBC 标准的 API 操作 LOB 数据,但 Oracle 9i 及以前的 JDBC 驱动程序采用了自己的 API 操作 LOB 数据,Oracle 9i 直接使用自己的 API 操作 LOB 数据,且不允许通过 PreparedStatement 的 setAsciiStream()、setBinaryStream()、setCharacterStream() 等方法填充流数据。Spring 提供 LobHandler 接口主要是为了迁就 Oracle 特立独行的作风。所以 Oracle 必须使用 OracleLobHandler 实现类,而其它的数据库统一使用 DefaultLobHandler 就可以了。Oracle 10g 改正了 Oracle 9i 这个异化的风格,终于天下归一了,所以 Oracle 10g 也可以使用 DefaultLobHandler。 下面,我们来看一下 LobHandler 接口的几个重要方法:
方法 | 说明 |
---|
InputStream getBlobAsBinaryStream(ResultSet rs, int columnIndex) | 从结果集中返回 InputStream,通过 InputStream 读取 BLOB 数据 | byte[] getBlobAsBytes(ResultSet rs, int columnIndex) | 以二进制数据的方式获取结果集中的 BLOB 数据; | InputStream getClobAsAsciiStream(ResultSet rs, int columnIndex) | 从结果集中返回 InputStream,通过 InputStreamn 以 Ascii 字符流方式读取 BLOB 数据 | Reader getClobAsCharacterStream(ResultSet rs, int columnIndex) | 从结果集中获取 Unicode 字符流 Reader,并通过 Reader以Unicode 字符流方式读取 CLOB 数据 | String getClobAsString(ResultSet rs, int columnIndex) | 从结果集中以字符串的方式获取 CLOB 数据 | LobCreator getLobCreator() | 生成一个会话相关的 LobCreator 对象 |
 
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |