`
phoenix007
  • 浏览: 436113 次
  • 性别: 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。

分享到:
评论

相关推荐

    ORACLE中CLOB字段转String类型

    - Oracle提供了强大的包`DBMS_LOB`来处理CLOB数据。 - 常用函数包括`DBMS_LOB.SUBSTR`和`DBMS_LOB.LENGTH`等。 ```sql DECLARE l_clob CLOB; l_length PLS_INTEGER; l_substring VARCHAR2(32767); BEGIN ...

    向Oracle数据库插入Clob大段文本解决方法

    - 在处理CLOB数据时,必须确保参数类型正确设置为`OracleType.Clob`,否则可能导致数据转换错误或数据丢失。 - 当CLOB数据量非常大时,应考虑使用流式操作,避免一次性加载整个CLOB数据到内存中,以减少对系统资源的...

    Oracle导出Clob,Blob工具

    Oracle数据库在处理大对象(LOB)类型,如Clob(Character Large Object)和Blob(Binary Large Object)时,有时需要专门的工具来进行高效且安全的数据导出。这些字段通常存储大量的文本或二进制数据,比如长篇文档...

    Mybatis 处理 CLOB、BLOB 类型数据

    Mybatis 处理 CLOB、BLOB 类型数据 MyBatis 处理 CLOB、BLOB 类型数据是指在使用 MyBatis 框架时,如何正确地处理大字段类型的数据。CLOB(Character Large OBject)和 BLOB(Binary Large OBject)都是大字段类型...

    Oracle导出Clob,Blob工具版本2

    CLOB数据类型用于存储大量的文本数据,如XML文档或长篇文章,而BLOB则用于存储二进制大对象,如图片、音频或视频文件。在Oracle中,对这类数据的操作通常需要特定的策略和工具,因为它们的大小和性质不同于常规的...

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

    在没有使用ORM框架之前,我们通常直接通过JDBC来处理Clob数据。这涉及到Clob对象的创建、读取和更新操作。创建时,需要调用PreparedStatement的setClob方法;读取时,通过ResultSet的getClob方法获取;更新时,先...

    读取oracle数据库中clob字段的值

    ### 读取Oracle数据库中CLOB字段的值 ...通过上述步骤,我们可以有效地读取Oracle数据库中的CLOB字段,并根据具体需求进行相应的数据处理。这对于处理大量文本数据的场景非常重要,有助于提高应用程序的性能和稳定性。

    Oracle中CLOB类型文字处理代码

    1. CLOB数据类型介绍: - CLOB类型是用来存储最大容量为4GB的单个字符数据,可以是Unicode字符集,支持多种语言。 - 它不同于VARCHAR2,后者限制在4000个字符内,对于超过这个限制的数据,CLOB是理想的选择。 2. ...

    java中操作oracle的CLOB字段精解

    Java 中操作 Oracle 的 CLOB 字段是一种常见的操作,在实际开发中,我们经常需要在 Oracle 数据库中存储和读取大型文本数据,这时就需要使用 CLOB(Character Large OBject)类型的字段来存储这些数据。下面我们将...

    iBATIS操作Oracle CLOB数据

    6. **性能优化**:处理CLOB数据时,注意避免一次性加载整个CLOB内容到内存中,可以分块读取或延迟加载。 7. **事务管理**:由于CLOB操作可能会涉及到较大的数据量,确保正确设置事务的隔离级别和回滚规则,以防止...

    hibernate存取oracle的clob

    其中,处理 Oracle 数据库中的 CLOB 类型数据是一项重要的技能。CLOB(Character Large Object)是一种用于存储大量文本数据的数据类型,在 Oracle 数据库中广泛使用。下面我们将详细介绍如何使用 Hibernate 来存取 ...

    mysql和Oracle在对clob和blob字段的处理

    在数据库管理领域,MySQL和Oracle都是广泛使用的数据库系统,它们在处理特定数据类型时有各自的特点和策略。本文将深入探讨这两个数据库系统如何处理`CLOB`(Character Large Object)和`BLOB`(Binary Large Object...

    hibernate动态映射表处理oracle的clob类型

    在Oracle 10g中,CLOB数据类型的处理有时会遇到一些挑战,尤其是在与ORM框架结合使用时。以下将详细介绍相关知识点: 1. **CLOB类型**:CLOB是一种非二进制大对象,用于存储大量字符数据,最大可达到4GB。Oracle 10...

    java读写oracle clob字段

    3. **处理CLOB数据**: - 当需要将字符串数据插入CLOB字段时,可以将字符串转换为`Reader`对象。这里使用`StringReader`: ```java Reader clobReader = new StringReader(text); ``` 4. **设置参数**: - `...

    Oracle,Clob,Blob数据存取的Java代码

    System.out.println("存储过程返回的CLOB数据: " + outClob.getSubString(1, (int) outClob.length())); } catch (SQLException e) { e.printStackTrace(); } ``` **BLOB数据存取** 对于BLOB数据,我们可以使用...

    java存储oracle中的clob类型

    - **getCharacterStream()**:返回一个`java.io.Reader`对象,按照Unicode编码读取CLOB数据。 - **getAsciiStream()**:返回一个`java.io.InputStream`对象,按照ASCII编码读取CLOB数据。 当数据库中可能包含中文等...

    运用Java如何存取Oracle中的CLOB类型字段

    在处理CLOB数据时,通常会涉及到以下几种常见操作: - 插入CLOB数据 - 更新CLOB数据 - 查询CLOB数据 - 删除CLOB数据 #### Java访问CLOB示例 以下是一个使用Java访问Oracle数据库中CLOB类型的示例代码: ```java ...

    oracle Blob Clob 大数处理 代码

    更新Blob和Clob数据通常涉及先清除现有数据(`DBMS_LOB.CLEAR`),然后重新插入。也可以直接使用`DBMS_LOB.WRITE`或`DBMS_LOB.CHANGE_LENGTH`进行修改。 5. **删除数据**: 删除表中的LOB字段时,数据库会自动...

    oracle Blob转换Clob

    而Clob数据可以直接用文本编辑器打开。 #### 知识点三:创建函数实现Blob到Clob的转换 在给定的部分内容中,提供了一个名为`BlobToClob`的函数实现示例,该函数将Blob类型的数据转换为Clob类型。 ```sql CREATE ...

    oracle(blob转换为clob)

    最后返回转换后的CLOB数据。 #### 4. 更新表中的数据 在实际应用中,一旦有了`blob_to_clob`函数,就可以轻松地在SQL语句中调用它,更新表中的数据。例如,`update gs_gift set p.description = blob_to_clob(p....

Global site tag (gtag.js) - Google Analytics