`

简单易行:Spring中操作LOB字段案例

阅读更多

 

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,查看一下吧!

 

 

 

  • src.rar (3.9 KB)
  • 下载次数: 25
分享到:
评论

相关推荐

    Oracle LOB字段处理工具

    在数据库操作中,LOB字段的处理往往比常规的行数据更为复杂,因为它涉及到大块的数据读取、写入和管理。"Oracle LOB字段处理工具"就是为了简化这些操作而设计的软件。 这款工具主要针对Oracle数据库中的BLOB...

    Spring+Hibernate处理Oracle lob字段(一)

    在本文中,我们将深入探讨如何在Java环境下,利用Spring和Hibernate框架处理Oracle数据库中的LOB(Large Object)字段。LOB字段通常用于存储大体积的数据,如文本、图片或视频。在实际开发中,处理这类数据时可能会...

    Oracle数据库中LOB的调优.pdf

    2. In-Line与Out-Of-Line存储:如果LOB字段与行中的其他列的数据存储在一起,则称为In-Line存储。此时,LOB字段的长度小于3964个字节,存储在该表的段内,其对应的LOBINDEX和LOBSEGMENT为空。反之,如果LOB字段与行...

    Oracle中LOB字段的存储管理和优化.pdf

    Oracle 中 LOB 字段的存储管理和优化 Oracle 中 LOB(Large OBjects)字段是一种特殊的数据类型,用于存储非结构化数据,如图像、音频、视频等。LOB 字段的存储管理和优化是数据库管理中一个重要的方面。本文将...

    本文档主要介绍如何对LOB字段进行处理

    以上代码首先通过查询获取了目标行的`document`字段的LOB定位器,然后准备了要写入的文本数据,并通过`DBMS_LOB.WRITE()`过程将文本写入CLOB字段。 #### 结论 本文详细介绍了在Oracle数据库中如何使用和维护LOB...

    lob字段数据删除空间测试.txt

    测试oracle数据库中,lob字段在不同参数条件下,删除数据后占用空间的情况。 测试1 测试disable storage in row下的lob字段 测试2 测试非disable storage in row模式下 该模式为默认模式,既小于4k的数据不会存在lob...

    Oracle LOB 详解

    * 初始化persistent LOB:可以将persistent LOB 设置为 NULL 或 empty。 * 设置persistent LOB 到 NULL:LOB 设置为 NULL 时,没有locator指针。 * 设置persistent LOB 到 empty:LOB 设置为 empty 时,有locator...

    OCI_LOB样例程序

    - 示例1:创建和插入LOB:展示如何在表中创建带有LOB列的表,并插入数据。 - 示例2:读取LOB:演示如何从数据库中检索LOB数据并显示出来。 - 示例3:更新LOB:说明如何修改已存在于数据库中的LOB数据。 - 示例4...

    Oracle如何对CLOB行字段来执行全文检索

    Oracle CLOB 行字段全文检索实现方法 Oracle 数据库中,CLOB 行字段是一种常用的数据类型,用于存储大...这些过程函数可以帮助开发者更好地操作 LOB 数据类型,实现对 CLOB 字段中的内容进行 Like 查找和其他操作。

    Oracle的LOB(CLOB)大字段以及(SYS_LOB$$)清理.txt

    Oracle的LOB(CLOB)大字段以及(SYS_LOB$$)清理.txt

    DB2 LOB 详解

    DB2 LOB详解涉及的知识点非常丰富,下面将从DB2中LOB字段的存储及处理过程、如何创建LOB数据对象、维护LOB数据的注意事项、使用工具进行维护等方面进行详细说明。 首先,DB2中LOB字段的存储和处理过程是一门深奥的...

    oracle dbms_lob

    在实际应用中,`DBMS_LOB`包通常与SQL DML语句结合使用,以处理LOB字段。例如,可以使用`DBMS_LOB.WRITE`在INSERT或UPDATE语句中修改LOB值,或者使用`DBMS_LOB.APPEND`在已有的LOB后面添加新内容。 学习`DBMS_LOB`...

    Oracle Lob Performance Guidelines

    3. **创建索引组织表**:如果表中除了 LOB 字段外还有其他频繁查询的列,可以考虑使用索引组织表来进一步提高查询速度。 4. **并行加载数据**:在批量加载大量 LOB 数据时,使用并行查询选项,例如通过 SQL*Loader...

    ORACLE LOB大对象处理

    Oracle数据库中的LOB(Large Object)类型是用来存储大量数据的,如文本、图像、音频或视频等。LOBs分为四种类型:BLOB(Binary Large Object)用于二进制数据,CLOB(Character Large Object)用于字符数据,NCLOB...

    spring+hibernate操作oracle的clob字段

    在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB...通过以上配置和操作,你可以在Spring和Hibernate的环境中顺利地对Oracle数据库的CLOB字段进行读写,满足J2EE应用中的大数据存储需求。

    记录一次EXPDP导出BLOB字段 遇到ORA-01555报错

    oracle expdp导出blob字段遇到ora-01555报错的解决方案

    用PHP操纵Oracle的LOB类型的数据

    - 删除LOB字段的数据通常伴随着记录的删除,因为单独删除LOB字段的值在Oracle中并不常见。 总之,PHP在处理Oracle的LOB类型时需要特别注意操作流程,通过OCI函数进行更复杂的处理以适应Oracle对LOB类型的特殊要求...

    Spring+3.x企业应用开发实战光盘源码(全)

     第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生和获取等难点知识。  第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM...

Global site tag (gtag.js) - Google Analytics