`
fengzl
  • 浏览: 216447 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

blob、clob字段小结(五)

阅读更多
最后一个问题就是更新了,对于blob没什么好讲的,但是clob倒是有点需要注意的,问题是这样的,如果clob原来插入的数据内容为: 123456789,现在你update为:ABC,等你查看数据库的插入结果时你会发现更新后的数据其实是:ABC456789,相信你已经知道原因了,那么看看以下的具体处理方法吧:

            int k = 0;
            for (int i=9; i >=0; i--) {
                // 选择并锁定该记录
                LargeObject large = (LargeObject)session.load(LargeObject.class, k+"", LockMode.UPGRADE);
                large.setName("第" + k + "个改动");

                // 插入图片数据
                String fileName = "E:/AAA/" + i + ".jpg";
                SerializableBlob sb = (SerializableBlob)large.getImage();
                java.sql.Blob wrapBlob = sb.getWrappedBlob();
                // 通过非weblogic容器中数据源获得连接的情况
                if(wrapBlob instanceof oracle.sql.BLOB){
                    oracle.sql.BLOB blob = (oracle.sql.BLOB) wrapBlob;
                    OutputStream out = blob.getBinaryOutputStream();
                    out.write(getData(fileName));
                    out.close();
                }
                // 使用weblogic的Oracle Thin driver类型连接池,驱动类名:oracle.jdbc.OracleDriver
                else if(wrapBlob instanceof weblogic.jdbc.vendor.oracle.OracleThinBlob){
                    OracleThinBlob blob = (OracleThinBlob)wrapBlob;
                    OutputStream out = blob.getBinaryOutputStream();
                    out.write(getData(fileName));
                    out.close();
                }


                // 插入文章数据
                fileName = "E:/AAA/" + i + ".java";
                SerializableClob cb = (SerializableClob)large.getArticle();
                java.sql.Clob wrapClob = cb.getWrappedClob();
                System.out.println(wrapClob.getClass());

                //调用存储过程截断Clob字段内容
                System.out.println("准备截断长度:" + wrapClob.length());
                Connection conn = session.connection();
                CallableStatement cstmt = conn.prepareCall("{call dbms_lob.trim(?,?)}");
                cstmt.setClob(1, wrapClob);
                cstmt.setLong(2, 0);
                cstmt.execute();
                cstmt.close();

                // 通过非weblogic容器中数据源获得连接的情况
                if(wrapClob instanceof oracle.sql.CLOB){
                    oracle.sql.CLOB clob = (oracle.sql.CLOB) wrapClob;
                    Writer writer = clob.getCharacterOutputStream();
                    String article = new String(getData(fileName));
                    writer.write(article);
                    writer.close();
                }
                // 使用weblogic的Oracle Thin driver类型连接池,驱动类名:oracle.jdbc.OracleDriver
                else if(wrapClob instanceof weblogic.jdbc.vendor.oracle.OracleThinClob){
                    OracleThinClob clob = (OracleThinClob)wrapClob;
                    Writer writer = clob.getCharacterOutputStream();
                    String article = new String(getData(fileName));
                    writer.write(article);
                    writer.close();
                }
                k++;
            }
分享到:
评论

相关推荐

    Hibernate操作Oarcle中Clob、Blob字段小结

    这篇博客文章“Hibernate操作Oracle中Clob、Blob字段小结”可能会探讨如何在Hibernate中有效地处理这两种类型的数据。 1. **Clob与Blob的理解**: - Clob:Clob是用于存储大量字符数据的类型,例如长篇文章、XML...

    关于Clob类型在Hibernate中 的应用小结

    在Hibernate的XML映射文件中,你需要为这个Clob字段指定映射规则,例如: ```xml <column name="SUMMARY_CLOB" /> ``` **CRUD操作**: 4.2.1 **创建(Create)**: 在创建新记录时,你需要将待存入的文本...

    关于Clob类型在Hibernate中 的应用小结.rar

    通常,要解决超过4000字节的数据,一种做法是将数据写入文件,xml或plain file都可以,数据...另一个做法是使用clob, blob等字段类型,主要有:采用传统的jbdc方式、把clob以string方式处理、直接使用clob类型三种方案

    关于Clob类型在Hibernate中 的应用小结-- 一篇使用心得.zip

    3. **插入与更新**:当向数据库中插入或更新包含Clob字段的记录时,Hibernate会自动处理这些数据。可以使用`session.save()`或`session.update()`方法,但在实际使用中,我们通常需要使用`session.merge()`,因为它...

    EJB3.0注释小结

    6. **@Lob** 和 **@Basic(fetch=FetchType.LAZY)**:结合使用表示字段是大对象(LOB,如Clob或Blob),并且以懒加载的方式获取。 7. **@PersistenceContext**:在SessionBean中注入EntityManager,以管理实体的生命...

    MySQL 建表的优化策略 小结

    - **BLOB和CLOB**:这些大对象类型不宜建立索引,因为它们对性能影响较大,且索引效果不佳。 6. **特殊优化策略**: - **表格分割**:通过分区或分表,将大表拆分成更小的部分,以分散I/O负载,提高查询效率。 -...

    Java数据库编程宝典2

    1.6 小结 第2章 设计数据库 2.1 数据库设计应考虑的事项 2.1.1 项目规范 2.1.2 设计表 2.1.3 生成发票 2.2 引用完整性 2.2.1 通用完整性规则 2.2.2 特定于数据库的完整性规则 2.3 小结 第3章 SQL基础 ...

    Java数据库编程宝典4

    1.6 小结 第2章 设计数据库 2.1 数据库设计应考虑的事项 2.1.1 项目规范 2.1.2 设计表 2.1.3 生成发票 2.2 引用完整性 2.2.1 通用完整性规则 2.2.2 特定于数据库的完整性规则 2.3 小结 第3章 SQL基础 ...

    Java数据库编程宝典1

    1.6 小结 第2章 设计数据库 2.1 数据库设计应考虑的事项 2.1.1 项目规范 2.1.2 设计表 2.1.3 生成发票 2.2 引用完整性 2.2.1 通用完整性规则 2.2.2 特定于数据库的完整性规则 2.3 小结 第3章 SQL基础 ...

    Java数据库编程宝典3

    1.6 小结 第2章 设计数据库 2.1 数据库设计应考虑的事项 2.1.1 项目规范 2.1.2 设计表 2.1.3 生成发票 2.2 引用完整性 2.2.1 通用完整性规则 2.2.2 特定于数据库的完整性规则 2.3 小结 第3章 SQL基础 ...

    数据库建表语句

    ### 五、小结 数据库建表语句是数据库设计与管理的基础,尤其是在Oracle这样的关系型数据库管理系统中。通过理解和掌握正确的建表语法,可以有效地创建满足业务需求的数据库表,进而提升数据处理的效率和准确性。在...

    ORACLE设计表时

    ### 小结 综上所述,在设计Oracle表时,针对不同数据类型,应根据实际需求选择合适的类型和长度。对于Integer类型,可以根据数据范围选择NUMBER或INTEGER;Long类型已被废弃,建议使用CLOB或BLOB替代;Date类型则...

    hibernate annotation学习文档

    #### 五、小结 通过上述示例,我们了解了如何使用 Hibernate 注解来快速实现 Java 对象与数据库表之间的映射。这些注解大大简化了实体类的定义,同时也提供了足够的灵活性来处理复杂的业务需求。对于初学者而言,...

    Spring中文帮助文档

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...

    Spring API

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...

Global site tag (gtag.js) - Google Analytics