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,查看一下吧!
分享到:
相关推荐
在数据库操作中,LOB字段的处理往往比常规的行数据更为复杂,因为它涉及到大块的数据读取、写入和管理。"Oracle LOB字段处理工具"就是为了简化这些操作而设计的软件。 这款工具主要针对Oracle数据库中的BLOB...
在本文中,我们将深入探讨如何在Java环境下,利用Spring和Hibernate框架处理Oracle数据库中的LOB(Large Object)字段。LOB字段通常用于存储大体积的数据,如文本、图片或视频。在实际开发中,处理这类数据时可能会...
2. In-Line与Out-Of-Line存储:如果LOB字段与行中的其他列的数据存储在一起,则称为In-Line存储。此时,LOB字段的长度小于3964个字节,存储在该表的段内,其对应的LOBINDEX和LOBSEGMENT为空。反之,如果LOB字段与行...
Oracle 中 LOB 字段的存储管理和优化 Oracle 中 LOB(Large OBjects)字段是一种特殊的数据类型,用于存储非结构化数据,如图像、音频、视频等。LOB 字段的存储管理和优化是数据库管理中一个重要的方面。本文将...
以上代码首先通过查询获取了目标行的`document`字段的LOB定位器,然后准备了要写入的文本数据,并通过`DBMS_LOB.WRITE()`过程将文本写入CLOB字段。 #### 结论 本文详细介绍了在Oracle数据库中如何使用和维护LOB...
测试oracle数据库中,lob字段在不同参数条件下,删除数据后占用空间的情况。 测试1 测试disable storage in row下的lob字段 测试2 测试非disable storage in row模式下 该模式为默认模式,既小于4k的数据不会存在lob...
* 初始化persistent LOB:可以将persistent LOB 设置为 NULL 或 empty。 * 设置persistent LOB 到 NULL:LOB 设置为 NULL 时,没有locator指针。 * 设置persistent LOB 到 empty:LOB 设置为 empty 时,有locator...
- 示例1:创建和插入LOB:展示如何在表中创建带有LOB列的表,并插入数据。 - 示例2:读取LOB:演示如何从数据库中检索LOB数据并显示出来。 - 示例3:更新LOB:说明如何修改已存在于数据库中的LOB数据。 - 示例4...
Oracle CLOB 行字段全文检索实现方法 Oracle 数据库中,CLOB 行字段是一种常用的数据类型,用于存储大...这些过程函数可以帮助开发者更好地操作 LOB 数据类型,实现对 CLOB 字段中的内容进行 Like 查找和其他操作。
Oracle的LOB(CLOB)大字段以及(SYS_LOB$$)清理.txt
DB2 LOB详解涉及的知识点非常丰富,下面将从DB2中LOB字段的存储及处理过程、如何创建LOB数据对象、维护LOB数据的注意事项、使用工具进行维护等方面进行详细说明。 首先,DB2中LOB字段的存储和处理过程是一门深奥的...
在实际应用中,`DBMS_LOB`包通常与SQL DML语句结合使用,以处理LOB字段。例如,可以使用`DBMS_LOB.WRITE`在INSERT或UPDATE语句中修改LOB值,或者使用`DBMS_LOB.APPEND`在已有的LOB后面添加新内容。 学习`DBMS_LOB`...
3. **创建索引组织表**:如果表中除了 LOB 字段外还有其他频繁查询的列,可以考虑使用索引组织表来进一步提高查询速度。 4. **并行加载数据**:在批量加载大量 LOB 数据时,使用并行查询选项,例如通过 SQL*Loader...
Oracle数据库中的LOB(Large Object)类型是用来存储大量数据的,如文本、图像、音频或视频等。LOBs分为四种类型:BLOB(Binary Large Object)用于二进制数据,CLOB(Character Large Object)用于字符数据,NCLOB...
在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB...通过以上配置和操作,你可以在Spring和Hibernate的环境中顺利地对Oracle数据库的CLOB字段进行读写,满足J2EE应用中的大数据存储需求。
oracle expdp导出blob字段遇到ora-01555报错的解决方案
- 删除LOB字段的数据通常伴随着记录的删除,因为单独删除LOB字段的值在Oracle中并不常见。 总之,PHP在处理Oracle的LOB类型时需要特别注意操作流程,通过OCI函数进行更复杂的处理以适应Oracle对LOB类型的特殊要求...
第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生和获取等难点知识。 第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM...