`

DB2\Oracle数据库对clob的处理

阅读更多
spring定义了一个以统一的方式操作各种数据库的Lob类型数据的LobCreator(保存的时候用),同时提供了一个LobHandler为操作二进制字段和大文本字段提供统一接口访问。
举例,例子里面的t_post表中post_text字段是CLOB类型,而post_attach是BLOG类型:

//db2数据库
public class PostJdbcDao extends JdbcDaoSupport implements PostDao {
private LobHandler lobHandler;
private DataFieldMaxValueIncrementer incre;
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, incre.nextIntValue()); 
       ps.setInt(2, post.getUserId()); 
       lobCreator.setClobAsString(ps, 3, post.getPostText());
       lobCreator.setBlobAsBytes(ps, 4, post.getPostAttach());
      }
     });
}
}

设置相对应的配置文件(Oracle 9i版本),Oracle的数据库最喜欢搞搞特别的东西啦:

<bean id="nativeJdbcExtractor"
   class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
   lazy-init="true" />
<bean id="oracleLobHandler"
   class="org.springframework.jdbc.support.lob.OracleLobHandler"
   lazy-init="true">
   <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor" />
</bean>
<bean id="dao" abstract="true">
   <property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
<bean id="postDao" parent="dao"
   class="com.baobaotao.dao.jdbc.PostJdbcDao">
   <property name="lobHandler" ref="oracleLobHandler" />
</bean>

Oracle 10g或其他数据库如下设置:

<bean id="defaultLobHandler"
   class="org.springframework.jdbc.support.lob.DefaultLobHandler"
   lazy-init="true" />
<bean id="dao" abstract="true">
   <property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
<bean id="postDao" parent="dao"
   class="com.baobaotao.dao.jdbc.PostJdbcDao">
   <property name="lobHandler" ref="defaultLobHandler" />
</bean>

读取BLOB/CLOB块,举例:

public List getAttachs(final int userId){
   String sql = "SELECT post_id,post_attach FROM t_post where user_id =? and post_attach is not null";
   return getJdbcTemplate().query(
       sql,new Object[] {userId},
       new RowMapper() {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
        Post post = new Post();
        int postId = rs.getInt(1);
         byte[] attach = lobHandler.getBlobAsBytes(rs, 2);
         post.setPostId(postId);
         post.setPostAttach(attach);
         return post;
        }
       });
}
 

分享到:
评论

相关推荐

    如何将DB2数据库中的大对象(BLOB,CLOB)数据类型复制到Oracle数据库中

    Oracle数据库同样支持BLOB和CLOB数据类型,但需要特殊配置来处理来自其他数据库的大对象数据。 3. **特殊配置策略**: - **联邦能力**:利用WII的联邦功能,先将DB2中的非BLOB字段复制到Oracle目标表中。 - **...

    将长于4000字符的字符串转化为CLOB类型存入数据库

    在C#中操作Oracle数据库通常会用到Oracle.NET接口,其中包括了对CLOB类型的直接支持。 - **创建OracleConnection对象**:首先需要创建一个连接到Oracle数据库的对象。 - **创建OracleCommand对象**:接着创建一...

    Oracle数据库学习指南

    27.如何对CLOB行字段执行全文检索 28.如何让你的SQL运行得更快 29.如何使‘CREATE TABLE AS SELECT’能支持ORDER BY 30.删除表内重复记录的方法 31.数据库安全性策略 32.数据库的查询优化技术. 33.提高...

    Oracle和DB2的数据类型比较

    Oracle的BLOB/CLOB类型可以直接对应到DB2/400中的BLOB/CLOB类型,但在处理大数据量时需要注意容量限制。此外,Oracle还支持BFILE类型用于管理外部文件,而DB2/400提供了DATALINK类型作为对应。 #### 六、特殊类型 ...

    Oracle与DB2数据类型分类对应说明

    Oracle 和 DB2 是两个广泛应用的关系数据库管理系统,它们都具有丰富的数据类型,用于存储和管理各种类型的数据。然而,在实际应用中,我们经常需要在 Oracle 和 DB2 之间进行数据类型的转换和对应,这就需要我们对 ...

    DB2和ORACLE 应用开发差异比较

    - Oracle的`LONG`类型在DB2中可以用`LONG VARCHAR(n)`或`CLOB(2GB)`替代。 - `NUMBER(p)`在Oracle中表示精度p的数值,DB2则使用`DECIMAL(p,s)`、`DEC(p,s)`、`NUMERIC(p,s)`或`NUM(p,s)`,其中s为小数位数。 - ...

    ODI LOB知识模块

    总之,"ODI LOB知识模块"是一个专门处理CLOB数据的ODI组件,用于高效地将SQL源的CLOB字段迁移到Oracle数据库。正确理解和使用这个LKM,能够确保大文本数据的无缝迁移,对于需要处理大量非结构化数据的项目至关重要。

    Oracle与DB2数据类型的分类对应说明

    然而,这两种数据库管理系统之间的数据类型并不完全相同,本文将对 Oracle 和 DB2 数据类型进行分类对应说明,以便更好地理解和应用这两种数据库管理系统。 一、日期和时间类型 Oracle 中的 DATE 类型包含年、月、...

    Oracle与DB2数据类型的对应说明书

    DB2/400中的BLOB和CLOB只能存放2GB的数据,而Oracle中的BLOB和CLOB可以提供4GB的空间。 五、ROWID类型 Oracle中的ROWID虚拟列用于对表中的某一列进行唯一标示,DB2/400中也有类似的数据类型ROWID,它与Oracle中的...

    面试:如果在现在开发时使用的数据库是DB2(IBM的数据库产品),可能要使用Oracle。在这种背景下,如何开发?

    - 根据新的数据库环境调整应用程序的连接池配置,如C3P0、HikariCP或Apache DBCP,确保连接Oracle数据库的参数正确。 6. **性能调优**: - Oracle和DB2的性能优化策略有所不同。例如,Oracle的索引组织表(IOT)...

    oracle数据库学习笔记

    ### Oracle数据库学习笔记知识点 #### 一、Oracle的用户管理 **Oracle认证体系:** - **OCAR (Oracle Certified Associate):** Oracle初级工程师认证,入门级别认证,为后续更高级别的认证打下基础。 - **OCP ...

    oracle-DB2.rar_oracle

    在将Oracle数据库迁移到DB2或者反之的过程中,了解这些数据类型的对应关系至关重要,因为不同的数据类型可能需要不同的转换策略。例如,Oracle的NUMBER在DB2中可能需要转化为DECIMAL,而VARCHAR2则可能需要转化为...

    Oracle 表定义到 DB2 数据类型

    本主题将详细探讨如何将Oracle数据库中的表定义映射到DB2数据库的数据类型。Oracle和DB2作为两种广泛使用的数据库管理系统,它们各自拥有独特的数据类型体系。理解这些映射关系有助于确保数据的一致性和兼容性。 1....

    oracle 与db2比较

    - **Svrmgrl**:服务器管理语言,用于管理Oracle数据库服务。 - **Control Center**:图形界面工具集,包含Command Center、Command line processor、Command window、Script center、Visual Explain等功能。 #####...

    Python如何应用cx_Oracle获取oracle中的clob字段问题

    最近在用Python编写连接数据库获取记录的脚本,其中用到了cx_Oracle模块。它的语法主要如下: cx_Oracle.connect('username','pwd','IP/HOSTNAME:PORT/TNSNAME') import cx_Oracle db1=cx_Oracle.connect('yang','...

    DB2_vs_Oracle

    ### DB2与Oracle数据库系统架构差异对比分析 #### 基本组件与术语 在讨论DB2与Oracle之前,我们先来了解这两种数据库管理系统的基本组件和术语。 **Oracle:** - **实例(Instance):** 包括SGA内存结构和后台...

    数据库中多媒体数据处理的方法研究.pdf

    常用的数据库有DB2、Oracle、Informix、Sybase和SQL Server等。数据库是存储在一起的相关数据的集合,这些数据是结构化的,无害的或不必要的冗余,并为多种应用服务,数据的存储独立于使用它的程序。 多媒体数据库...

    Oracle学习文档

    Oracle数据库因其强大的性能、安全性以及可扩展性而备受赞誉,适用于处理海量数据和高并发的业务场景。 Oracle提供了多种版本以适应不同的需求,如小型数据库适合于简单应用,如Access用于不超过100人的小规模应用...

Global site tag (gtag.js) - Google Analytics