`
yonglongwang
  • 浏览: 7083 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

转:java String和Clob转换

    博客分类:
  • java
阅读更多
第一时间想到spring,因为spring对orm工具有封装, 像ibatis,hibernate等,在spring.jar中大概翻了一下包,根据包名和类名发现如下可疑类org.springframework.orm.ibatis.support.ClobStringTypeHandler 根据源码跟踪到了 org.springframework.jdbc.support.lob.OracleLobHandler 这个类才是内有乾坤,有我想要的一切东西,嘿嘿,不好意思了,统统抄来.

在spring包中有个org.springframework.jdbc.support.lob.AbstractLobHandler这里面定义了基本的Clob和Blog处理方法

org.springframework.jdbc.support.lob.DefaultLobHandler是默认的实现,除了Oracle其他数据库使用此实现

org.springframework.jdbc.support.lob.OracleLobHandler是专门用于Oracle的实现,可见Oracle的BT,为了不造成直接包依赖,相关的调用都是利用反射完成的.有兴趣的朋友可以去阅读下这两个类,以便了解Oracle的特殊性.

经过分析,将Clob的创建,以及与String的互转代码放出来供大家使用.当然不可能完全copy了,我做了些简化处理,不过已经测试了,没用问题.更多细节请查阅spring的org.springframework.jdbc.support.lob包源码.

SqlUtil类是我为了方便测试写的,大家靠代码就能够猜出来其内容了,所以就不全贴了,只贴本文的主题部分.



    /**
     *
     * Description:创建Clob或者Blob
     *
     * @param conn数据库连接对象
     * @param lobClassName
     *            oracle.sql.CLOB或者oracle.sql.BLOB
     * @return oracle.sql.CLOB或者oracle.sql.BLOB对象
     * @throws Exception
     * @blog blog.csdn.ne t/sunyujia/
     * @mail sunyujia@yahoo.cn
     * @since:Oct 1, 2008 6:42:08 PM
     */
    public static Object createOracleLob(Connection conn, String lobClassName)
            throws Exception {
        Class lobClass = conn.getClass().getClassLoader().loadClass(
                lobClassName);
        final Integer DURATION_SESSION = new Integer(lobClass.getField(
                "DURATION_SESSION").getInt(null));
        final Integer MODE_READWRITE = new Integer(lobClass.getField(
                "MODE_READWRITE").getInt(null));
        Method createTemporary = lobClass.getMethod("createTemporary",
                new Class[] { Connection.class, boolean.class, int.class });
        Object lob = createTemporary.invoke(null, new Object[] { conn, false,
                DURATION_SESSION });
        Method open = lobClass.getMethod("open", new Class[] { int.class });
        open.invoke(lob, new Object[] { MODE_READWRITE });
        return lob;
    }

    /**
     *
     * Description:将Clob对象转换为String对象,Blob处理方式与此相同
     *
     * @param clob
     * @return
     * @throws Exception
     * @mail sunyujia@yahoo.cn
     * @blog blog.csdn.ne t/sunyujia/
     * @since:Oct 1, 2008 7:19:57 PM
     */
    public static String oracleClob2Str(Clob clob) throws Exception {
        return (clob != null ? clob.getSubString(1, (int) clob.length()) : null);
    }

    /**
     *
     * Description:将string对象转换为Clob对象,Blob处理方式与此相同
     *
     * @param str
     * @param lob
     * @return
     * @throws Exception
     * @mail sunyujia@yahoo.cn
     * @blog blog.csdn.ne t/sunyujia/
     * @since:Oct 1, 2008 7:20:31 PM
     */
    public static Clob oracleStr2Clob(String str, Clob lob) throws Exception {
        Method methodToInvoke = lob.getClass().getMethod(
                "getCharacterOutputStream", (Class[]) null);
        Writer writer = (Writer) methodToInvoke.invoke(lob, (Object[]) null);
        writer.write(str);
        writer.close();
       &n-

bsp;return lob;
    }

    /**
     *
     * Description: 全部源码查考自
     * org.springframework.jdbc.support.lob.OracleLobHandler
     *
     * @param args
     * @throws Exception
     * @mail sunyujia@yahoo.cn
     * @blog blog.csdn.ne t/sunyujia/
     * @since:Oct 1, 2008 7:26:16 PM
     */
    public static void main(String[] args) throws Exception {
        //创建数据源略
        Connection conn = SqlUtil.getConnection();
        Clob clob = (Clob) createOracleLob(conn, "oracle.sql.CLOB");// BLOB的话传oracle.sql.BLOB
        // create table testTb (TheClob Clob);
        PreparedStatement pstmt = conn
                .prepareStatement("insert into testTb (TheClob) values (?)");
        pstmt.setClob(1, oracleStr2Clob("test", clob));
        pstmt.execute();
        SqlUtil.closeStmt(pstmt);
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("select * from testTb");
        while (rs.next()) {
            String str = oracleClob2Str(rs.getClob(1));
            System.out.println(str);
        }
        SqlUtil.closeRs(rs);
        SqlUtil.closeStmt(stmt);
        SqlUtil.closeConn(conn);
    }
分享到:
评论

相关推荐

    mybatis 对clob类型转换

    在处理CLOB类型时,MyBatis需要将Java对象中的String或Reader类型数据转换为CLOB,以便存储到数据库中。 1. **CLOB类型数据的插入** 当你需要将一个字符串或者Reader对象插入到CLOB字段时,MyBatis默认可能无法...

    jdbc连接例子 Oracle CLOB转换为String java调用存储过程之输出游标

    标题中的“jdbc连接例子 Oracle CLOB转换为String java调用存储过程之输出游标”涉及到三个主要的Java数据库编程知识点:JDBC连接、Oracle数据库中的CLOB类型处理以及通过Java调用存储过程处理输出游标。 1. JDBC...

    java读写oracle clob字段

    本教程将介绍如何使用Java来读取和写入Oracle数据库中的CLOB字段。 首先,我们需要引入相关的Java和Oracle JDBC驱动库。在上述代码中,我们看到`import oracle.jdbc.driver.OracleDriver;`,这表示我们将使用Oracle...

    String_clob.zip_oracle

    在Java应用程序与Oracle数据库交互时,通常需要在两者之间进行`String`与CLOB类型的转换。以下是对这个主题的详细讨论。 1. **CLOB数据类型**: Oracle的CLOB类型可以存储最大为4GB的单个字符数据,这使得它成为...

    java存储oracle中的clob类型

    ### Java存储Oracle中的CLOB类型知识点详解 #### 一、CLOB类型简介及Java操作方法 CLOB(Character Large Object)是一种用于存储大量文本数据的数据类型,在Oracle数据库中被广泛使用,可以支持最大4GB的数据量。...

    weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB 类型转换解决办法

    以下是一个示例代码片段,展示了如何使用反射机制来完成类型转换: ```java package com.sumavision.ecommerce.admin.util; import java.io.InputStream; import java.lang.reflect.Method; public class ...

    JDBC中操作Blob、Clob等对象 实例详细 非常详细

    然后可以通过`getClob`和`getBlob`方法分别获取Clob和Blob数据,接着利用`getCharacterStream`和`getBinaryStream`方法将数据转换为适合处理的流形式。 #### 七、总结 本文详细介绍了如何在JDBC中操作Blob和Clob...

    clob 的读存问题

    在Oracle数据库中,通过正确使用CLOB对象和相关的数据库连接API,可以高效地进行CLOB数据的读取和写入。需要注意的是,由于CLOB数据量庞大,读取时应考虑性能优化,如分块读取等策略;写入时则需确保数据的完整性和...

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

    - 使用Blob/Clob接口:直接操作Clob接口进行读写,而不是将其转换为字符串或其他数据类型,以减少转换开销。 通过以上内容,你应该对在Hibernate中动态映射Oracle 10g的CLOB类型有了深入理解,这将帮助你在实际...

    clob的保存和修改

    例如,在Oracle中,你可以创建一个包含CLOB列的表,然后使用`TO_CLOB`函数将字符串转换为CLOB类型进行插入。 ```sql CREATE TABLE my_table (id NUMBER, content CLOB); INSERT INTO my_table (id, content) ...

    Java开发详解.zip

    031708_【第17章:Java数据库编程】_处理大数据对象(1)—处理CLOB数据笔记.pdf 031709_【第17章:Java数据库编程】_处理大数据对象(2)—处理BLOB数据笔记.pdf 031710_【第17章:Java数据库编程】_...

    Hibernate存储Clob字段的方式总结

    首先,要操作数据库中的Clob字段,需要关注的是如何在Java对象与Clob字段之间进行转换。由于Clob字段通常用于存储大量文本数据,如果使用传统的JDBC方式处理,代码将会相当复杂。但随着数据库技术的发展,越来越多的...

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

    在Hibernate中,如果Clob字段的值是字符串,可以通过将Clob字段映射为String类型,让Hibernate自动处理转换。这种方式简单易用,但可能不适合非常大的文本,因为可能会导致内存溢出。 3.3 直接使用Clob类型: 对于...

    CLOB字段处理

    在 Java 中,通过使用 oracle.sql.CLOB 类来处理 CLOB 类型字段的存储和读取。 在 Java 中,连接 Oracle 数据库需要使用 Oracle 的 JDBC 驱动程序。首先,需要使用 Class.forName() 方法加载驱动程序,然后使用 ...

    CLOB与BLOB

    CLOB与BLOB的存储与读取,String与CLOB的想换转换,字节码文件的存储与读取等等

    JDBC中操作Blob、Clob等对象

    在JDBC(Java Database Connectivity)编程中,Blob和Clob是非常重要的数据类型。Blob(Binary Large Object)主要用于存储二进制大对象,如图像、音频文件等;而Clob(Character Large Object)则用于存储大量的文本...

    oracle数据库的clob大字段在jdbc中的处理方式

    这篇文档将详细阐述如何在JDBC中有效地读取和操作Oracle数据库的CLOB字段,并将其转换为String类型。 首先,理解CLOB对象的特性是关键。CLOB是一种BLOB(Binary Large Object)的变种,专用于存储字符数据。在JDBC...

    hibernate保存blob,clob对象

    在Java的持久化框架Hibernate中,处理大数据类型如BLOB(Binary Large Object)和CLOB(Character Large Object)是一项常见的任务。BLOB用于存储二进制数据,如图片、视频或文档,而CLOB则用于存储大文本数据,如...

    ActiveXObject和Clob字段的插入更新

    在IT领域,ActiveXObject和Clob字段是两个重要的概念,主要与Web开发和数据库操作相关。ActiveXObject是Microsoft的一种技术,允许在Internet Explorer浏览器中创建和使用COM对象,而Clob是数据库中用于存储大量字符...

    iBATIS操作Oracle CLOB数据

    5. **类型处理器**:iBATIS提供了一个`OracleClobHandler`,它可以自动处理CLOB到String的转换。确保在SqlMapConfig.xml中配置好这个处理器: ```xml ``` 6. **性能优化**:处理CLOB数据时,注意避免一次性...

Global site tag (gtag.js) - Google Analytics