就可以了。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 对象 |
在 Spring JDBC 中操作 LOB 数据
插入 LOB 数据
假设我们有一个用于保存论坛帖子的 t_post 表,拥有两个 LOB 字段,其中 post_text 是 CLOB 类型,而 post_attach 是 BLOB 类型。下面,我们来编写插入一个帖子记录的代码:
清单 3. 添加 LOB 字段数据
package com.baobaotao.dao.jdbc;
…
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback;
import org.springframework.jdbc.support.lob.LobCreator;
import org.springframework.jdbc.support.lob.LobHandler;
public class PostJdbcDao extends JdbcDaoSupport implements PostDao {
private LobHandler lobHandler; ① 定义 LobHandler 属性
public LobHandler getLobHandler() {
return lobHandler;
}
public void setLobHandler(LobHandler lobHandler) {
this.lobHandler = lobHandler;
}
public void addPost(final Post post) {
String sql = " INSERT INTO t_post(post_id,user_id,post_text,post_attach)"
+ " VALUES(?,?,?,?)";
getJdbcTemplate().execute(sql,
new AbstractLobCreatingPreparedStatementCallback(this.lobHandler) { ②
protected void setValues(PreparedStatement ps,LobCreator lobCreator)
throws SQLException {
ps.setInt(1, 1);
ps.setInt(2, post.getUserId());
③ 设置 CLOB 字段
lobCreator.setClobAsString(ps, 3, post.getPostText());
④ 设置 BLOB 字段
lobCreator.setBlobAsBytes(ps, 4, post.getPostAttach());
}
});
}
…
}
Spring让LOB数据操作变得简单易行(4)
时间:2011-02-14 IBM 陈雄华
首先,我们在 PostJdbcDao 中引入了一个 LobHandler 属性,如 ① 所示,并通过 JdbcTemplate#execute(String sql,AbstractLobCreatingPreparedStatementCallback lcpsc) 方法完成插入 LOB 数据的操作。我们通过匿名内部类的方式定义 LobCreatingPrepare |