`
phoenix007
  • 浏览: 430589 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle处理clob数据

阅读更多

以下方法为 OracleDAOUtil中的方法。

1. 插入记录
    private static void insert(String id, Connection connection) {
        Connection conn = null;
        PreparedStatement stmt = null;
        String sql = "";
        try {

            sql = "insert into Test (ID,Value) values(?,empty_clob())"; //先插入空的CLOB对象
            conn = connection;
            stmt = conn.prepareStatement(sql);

            int count = 0;
            stmt.setString(++count, id);

            stmt.execute();

            OracleDAOUtil.updateField(conn, "Test", "ID", id, "Value", "abcd"); //写入数据
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                    stmt = null;
                }
            } catch (Exception ex) {

            }
            try {
                if (conn != null) {
                    conn = null;
                }
            } catch (Exception ex) {

            }
        }
    }

2. 向CLOB字段写入数据
    public static void updateField(Connection conn, String tableName, String keyName, String keyValue, String fieldName, String fieldValue) throws WorkflowException
    {
        PreparedStatement pstmt = null;
        PreparedStatement pstmt2 = null;
        ResultSet rset = null;
        try {
            String sql = "select " + fieldName + " from " + tableName + " where " + keyName + "=? for update";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, keyValue);
            rset = pstmt.executeQuery();
            Clob clob = null;
            if (rset.next())
                clob = (Clob) rset.getClob(1);

            String value = fieldValue;
            if (value == null)
                value = "";
            char[] valueChars = new char[value.length()];
            value.getChars(0,value.length(),valueChars,0);
            clob.truncate(0); //避免前一次的数据混在第二次的数据中(如果上次的数据比本次的数据多的话)
            Writer writer = clob.setCharacterStream(0);
            writer.write(valueChars);
            writer.close();

        } catch (Exception e) {
            throw e;
        } finally {
            if (rset != null) {
                try {
                    rset.close();
                    rset = null;
                } catch (SQLException e) {
                    throw e;
                }
            }
            if (pstmt != null) {
                try {
                    pstmt.close();
                    pstmt = null;
                } catch (SQLException e) {
                    throw e;
                }
            }
            if (pstmt2 != null) {
                try {
                    pstmt2.close();
                    pstmt2 = null;
                } catch (SQLException e) {
                    throw e;
                }
            }
        }
    }

3. 从CLOB字段读数据
    public static String readField(Connection conn, String tableName, String keyName, String keyValue, String fieldName)  throws WorkflowException
    {
        String value = "";
        PreparedStatement pstmt = null;
        ResultSet rset = null;
        try {
            String sql = "select " + fieldName + " from " + tableName + " where " + keyName + "=?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, keyValue);
            rset = pstmt.executeQuery();
            Clob clob = null;
            if (rset.next())
                clob = (Clob) rset.getClob(1);
            if (clob != null) {
                int len = (int) clob.length();
                char[] buffer = new char[len];
                Reader reader = clob.getCharacterStream();
                reader.read(buffer);
                reader.close();
                value = new String(buffer);
            }
            return value;
        } catch (Exception e) {
            throw e;
        } finally {
            if (rset != null) {
                try {
                    rset.close();
                    rset = null;
                } catch (SQLException e) {
                    throw e;
                }
            }
            if (pstmt != null) {
                try {
                    pstmt.close();
                    pstmt = null;
                } catch (SQLException e) {
                    throw e;
                }
            }
        }
    }

以上方法稍作改进就可用于处理BLOB字段。
如果使用Oracle提供的JDBC驱动来处理CLOB和BLOB字段,那么使用Oracle 10g的版本,Oracle 9i的版本对CLOB和BLOB的处理有问题。Oracle 10g JDBC的thin模式也可用于Oracle 9i。

分享到:
评论

相关推荐

    Mybatis 处理 CLOB、BLOB 类型数据

    Mybatis 处理 CLOB、BLOB 类型数据

    PHP处理Oracle的CLOB实例

    本文实例简述了PHP处理Oracle的CLOB的方法。分享给大家供大家参考。具体方法如下: 1. 写入数据   在使用PDO的预处理方法时,如果使用bindParam()等而不指定字段的数据类型或使用execute(),PDO都会默认为string...

    Oracle中Clob类型处理解析收藏

    最近利用NHibernate映射类型为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在2000-4000之间时报错(ORA-01461:仅可以插入LONG列的LONG值赋值)。经过不断查找资料和自己...

    向Oracle数据库的CLOB属性插入数据报字符串过长错误

    今天在项目中向数据库的CLOB属性插入一段篇文章(1000~2000)字就会报一个字符串过长的错误。 网上说用流来处理,没有这么做。这像是一个Bug,只要把插入的数据,默认扩充到2000以上就ok了。 下面是这段代码: if(...

    Oracle 插入超4000字节的CLOB字段的处理方法

    在通过拼组sql语句来实现... 下面就此问题的解决办法,做一下小结: 我们可以通过创建单独的OracleCommand来进行指定的插入,即可获得成功,这里仅介绍插入clob类型的数据,blob与此类似,这里就不介绍了,下面介绍两

    oracle数据库中如何处理clob字段方法介绍

    在知识库的建立的时候,用普通VARCHAR2存放文章是显然不够的,只有区区4000的字节,放不了多少字, 而CLOB数据类型,则能最多存放8G的数据。但是这个字段处理起来有比较多的特殊性,记录一下。 插入: 直接写在SQL...

    spring+hbernate对clob、blob字段的处理

    一个完整的工程,主要功能为:spring+hbernate对clob、blob字段的处理 包括:数据脚本、典型的SSH框架处理,以及spring、hibernate数据批量保存等功能源码、所用到的lib包 数据环境为:oracle 10G 开发:Mycelipse5.1...

    Oracle对于死锁的处理方法

    Oracle数据库出现死锁的时候可以按照以下处理步骤加以解决: 第一步:尝试在sqlplus中通过sql命令进行删除,如果能够删除成功,则万事大吉!但通常情况下,出现死锁时,想通过命令行或者通过Oracle的管理工具删除有...

    关于在Hibernate中对于Clob,Blob字段的处理方法

    oracle的jdbc驱动程序,用这个版本的操作Clob,blob类型的数据很方便。 博文链接:https://zhenjw.iteye.com/blog/173419

    Oracle数据库学习指南

    47. 在客户端处理Oracle的数据行加锁问题 48. 怎样查看init_ora文件 49. 怎样快速查出Oracle 数据库中的锁等待 50. 怎样在SQLPlus中使用 '&' 来实现自定义参数变量? 51. 怎样在查询记录时给记录加锁 52. 自动...

    北大青鸟Oracle教程集1

    北大青鸟Oracle教程集第一章 Oracle 入门 Version 3.0 目标 理解与 Oracle 相关的 RDBMS结构 结构 掌握Oracle 数据类型 掌握 掌握数据定义语言 掌握数据操纵语言 掌握事务处理和数据控制命令 Oracle 简介 对象关系...

    北大青鸟Oracle教程集2

    北大青鸟Oracle教程集第一章 Oracle 入门 Version 3.0 目标 理解与 Oracle 相关的 RDBMS结构 结构 掌握Oracle 数据类型 掌握 掌握数据定义语言 掌握数据操纵语言 掌握事务处理和数据控制命令 Oracle 简介 对象关系...

    Oracle Database 11g初学者指南--详细书签版

    他的关注方向包括Oracle产品集,以及其他前沿技术和这些技术在优化数据仓库设计和部署的应用。他还是各种技术会议的主讲人,包括COLLABORATE、Oracle OpenWorld和其他地方与区域会议。  Michael Abbey是公认的...

Global site tag (gtag.js) - Google Analytics