AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > JAVA编程

Spring让LOB数据操作变得简单易行

51自学网 2015-09-03 http://www.wanshiok.com

 

  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不保证资料的完整性。
 

上一篇:Java技术在多数据库系统中的应用研究  下一篇:Hibernate3.x过滤器的高级应用