Spring提供了org.springframework.jdbc.core.JdbcTemplate模板类,封装了一些sql常用方法使代码人员更加方便操作,更是引入了回调函数凸显了对面向对象的支持。这里主要介绍一下对Blob、Clob的解决。
1、就像普通的类声明一样,在applicationContext.xml中定义dataSource、jdbcTemplate类:
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate" abstract="false"
lazy-init="false" autowire="default" dependency-check="default">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="org.logicalcobwebs.proxool.ProxoolDriver" />
<property name="url" value="proxool.proxpoolssh2" />
</bean>
2、针对Blob、Clob定义一个lobHander(此处名为oracleLobHandler)
<!-- 使用spring+hibernate处理大字段 -->
<!-- 处理oracle BLOB/CLOB-->
<bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />
<bean id="oracleLobHandler"
class="org.springframework.jdbc.support.lob.OracleLobHandler"
lazy-init="true">
<property name="nativeJdbcExtractor">
<ref bean="nativeJdbcExtractor" />
</property>
</bean>
<!-- 如果底层数据库是 DB2、MySQL 等非 Oracle 的其它数据库,则只要简单配置一个 DefaultLobHandler 就可以了.
<bean id="defaultLobHandler"
class="org.springframework.jdbc.support.lob.DefaultLobHandler"
lazy-init="true" /> -->
对于sqlserver等不必配置。
3、撰写业务代码:
public class PostJdbcDao2 {
private LobHandler lobHandler;
private JdbcTemplate jdbcTemplate;
//getter、setter
...
public void addPost() {
String sql = " INSERT INTO t_post(oid,post_text,post_attach)"
+ " VALUES(?,?,?)";
this.getJdbcTemplate().execute(sql,
new AbstractLobCreatingPreparedStatementCallback(lobHandler)
{
protected void setValues(PreparedStatement ps,
LobCreator lobCreator) throws SQLException {
ps.setString(1, "123123");
try {
FileInputStream fin = null;
//非lob方式,如sql server
//lobCreator.setClobAsString(ps, 2, "setClobAsString");
//lob方式,如oracle db2 mysql
fin = new FileInputStream(new File("c:\\WFM_Ecode.log"));
lobCreator.setClobAsAsciiStream(ps, 2, fin, fin.available());
fin.close();
//非lob方式,如sql server
//lobCreator.setBlobAsBytes(ps, 3, "setBlobAsBytes sdfafasf".getBytes());
//lob方式,如oracle db2 mysql
fin = new FileInputStream(new File("C:\\tomcat5.0.28_免安装.rar"));
lobCreator.setBlobAsBinaryStream(ps, 3, fin, fin.available());
fin.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
public List getAttachs(String userId) {
String sql = "SELECT oid,post_text,post_attach FROM t_post where oid =?";
List list = null;
list = getJdbcTemplate().query(sql, new Object[] { userId },
new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum)
throws SQLException {
Student stu = new Student();
String postId = rs.getString(1);
stu.setId(postId);
stu.setDescript(lobHandler.getClobAsString(rs,
"post_text"));
stu.setImage(lobHandler.getBlobAsBytes(rs,
"post_attach"));
return stu;
}
});
showList(list);
return list;
}
}
4、在jsp调用:
JdbcTemplate jdbcTemplate = (JdbcTemplate) WebApplicationContextUtils
.getWebApplicationContext(session.getServletContext())
.getBean("jdbcTemplate");
LobHandler lobHandler = (LobHandler) WebApplicationContextUtils
.getWebApplicationContext(session.getServletContext())
.getBean("oracleLobHandler");
PostJdbcDao2 d2 = new PostJdbcDao2();
d2.setLobHandler(lobHandler);
d2.setJdbcTemplate(jdbcTemplate);
d2.addPost();
////List list = d2.getAttachs("123123");
ok,查看一下吧!
分享到:
相关推荐
Oracle LOB字段处理工具是一款简单的lob字段处理工具
NULL 博文链接:https://liubing1883.iteye.com/blog/405679
测试oracle数据库中,lob字段在不同参数条件下,删除数据后占用空间的情况。 测试1 测试disable storage in row下的lob字段 测试2 测试非disable storage in row模式下 该模式为默认模式,既小于4k的数据不会存在lob...
本文档主要介绍如何对LOB字段进行处理本文档主要介绍如何对LOB字段进行处理
Oracle数据库中LOB的调优.pdf
Oracle中LOB字段的存储管理和优化.pdf
Oracle的LOB(CLOB)大字段以及(SYS_LOB$$)清理.txt
包含了官方权威说明。而且有LOB字段的日常维护总结,方便大家交流学习。
详细解释lob字段在DB2中的存储及处理过程, 主要基于IBM Z平台。
第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生和获取等难点知识。 第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM...
Glob:Google Docs 的 Lob 插件 将当前文档转换为 PDF 并将其作为作业发送到 Lob。 安装说明 注意:您可以将脚本发布为官方插件以避免这些步骤。 有关发布 Docs 插件的更多信息,请参阅。 打开任何 Google 文档。 ...
通过spring存blob和clob数据到sybase数据库中,压缩包里包含了三种方式,(1)spring+hibernate,切面事务(aop),存lob数据,(2)spring+hibernate存lob数据,(3)spring+jdbc存lob数据。
分享一个来自官方的对Oracle LOB字段的性能调优。
第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生和获取等难点知识。 第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到...
这是Hibernate3引入的新特性,对于包含重量级大数据的表字段,这种抽取方式提高了对大字段操作的灵活性,否则加载Tfile对象的结果集时如果总是返回fileContent,这种批量的数据抽取将可以引起数据库的"洪泛效应"。...
NULL 博文链接:https://hackpro.iteye.com/blog/1845366
Oracle中对LOB对象的操作.pdf
oracle dbms_lob
LOB语料库 创建时间: 1970年代初 创建单位:英国Lancaster大学和挪威Oslo大学以及Bergen大学 规模层级: 100万词次 基本情况:研究当代英国英语,与美国英语对比,使用了TAGIT系统,以统计方式建立换算几率矩阵,提高标注...