`

BLOB和CLOB的区别以及在ORALCE中的插入和查询操作-zhai

 
阅读更多
http://blog.csdn.net/jojoy_828/article/details/4231165

ORACLE中的大对象:
LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列
LONG RAW: 可变长二进制数据,最长2G
CLOB:  字符大对象Clob 用来存储单字节的字符数据
NCLOB: 用来存储多字节的字符数据
BLOB: 用于存储二进制数据
BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内。bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复.   
CLOB,NCLOB,BLOB都是内部的LOB(Large Object)类型,最长4G,没有LONG只能有一列的限制。

要保存图片、文本文件、Word文件各自最好用哪种数据类型?
--BLOB最好,LONG RAW也不错,但Long是oracle将要废弃的类型,因此建议用BLOB。
对CLOB与BLOB对象的操作
    1.  查询(GET) 

     查询CLOB     

    //获得数据库连接  
    Connection con = ConnectionFactory.getConnection();  
    con.setAutoCommit(false);  
    Statement st = con.createStatement();  
    //不需要“for update”  
    ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");  
    if (rs.next())  
    {  
        java.sql.Clob clob = rs.getClob("CLOBATTR");  
        Reader inStream = clob.getCharacterStream();  
        char[] c = new char[(int) clob.length()];  
        inStream.read(c);  
        //data是读出并需要返回的数据,类型是String  
        data = new String(c);  
        inStream.close();  
    }  
    inStream.close();  
    con.commit();  
    con.close();
    
    查询BLOB
    Connection con = ConnectionFactory.getConnection(); 
    con.setAutoCommit(false);  
    Statement st = con.createStatement();  
    //不需要“for update”  
    ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");  
    if (rs.next())  
    {  
        java.sql.Blob blob = rs.getBlob("BLOBATTR");  
        InputStream inStream = blob.getBinaryStream();  
        //data是读出并需要返回的数据,类型是byte[]  
        data = new byte[input.available()];  
        inStream.read(data);  
        inStream.close();  
    }  
    inStream.close();  
    con.commit();  
    con.close();  

    2.  插入(INSERT)

       
     插入CLOB

    //获得数据库连接  
    Connection con = ConnectionFactory.getConnection();  
    con.setAutoCommit(false);  
    Statement st = con.createStatement();  
    //插入一个空对象empty_clob()  
    st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");  
    //锁定数据行进行更新,注意“for update”语句  
    ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");  
    if (rs.next())  
    {  
        //得到java.sql.Clob对象后强制转换为oracle.sql.CLOB  
        oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");  
        Writer outStream = clob.getCharacterOutputStream();  
        //data是传入的字符串,定义:String data  
        char[] c = data.toCharArray();  
        outStream.write(c, 0, c.length);  
    }  
    outStream.flush();  
    outStream.close();  
    con.commit();  
    con.close();       


    插入BLOB 
    //获得数据库连接  
    Connection con = ConnectionFactory.getConnection();  
    con.setAutoCommit(false);  
    Statement st = con.createStatement();  
    //插入一个空对象empty_blob()  
    st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");  
    //锁定数据行进行更新,注意“for update”语句  
    ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");  
    if (rs.next())  
    {  
        //得到java.sql.Blob对象后强制转换为oracle.sql.BLOB  
        oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("BLOBATTR");  
        OutputStream outStream = blob.getBinaryOutputStream();  
        //data是传入的byte数组,定义:byte[] data  
        outStream.write(data, 0, data.length);  
    }  
    outStream.flush();  
    outStream.close();  
    con.commit();  
    con.close(); 
    Hibernate保存BLOB对象

    public void addMessage(Messages message,String content_str) {
        Session session = this.getSession();
        message.setContent(Hibernate.createBlob(new byte[1]));
        session.save(message);
        session.flush();
        session.refresh(message, LockMode.UPGRADE);
        SerializableBlob sb = (SerializableBlob)message.getContent(); 
        BLOB blob = (BLOB)sb.getWrappedBlob();
        try {
                OutputStream out = blob.getBinaryOutputStream();
                out.write(content_str.getBytes());
                out.close();
                session.save(message);
         } catch (Exception e) {
           e.printStackTrace();
       }
    }
分享到:
评论

相关推荐

    BLOB和CLOB的区别以及在ORALCE中的插入和查询操作

    了解BLOB和CLOB的区别以及如何在Oracle中进行插入和查询操作对于数据库开发者和管理员来说至关重要。 首先,我们来看BLOB和CLOB的主要区别: 1. 数据类型:BLOB用于存储二进制大对象,如图片、视频、音频文件或者...

    oracle中的Blob和Clob区别

    ### Oracle中的BLOB和CLOB的区别 在Oracle数据库中,`BLOB`(Binary Large Object)和`CLOB`(Character Large Object)是用于存储大量数据的两种特殊数据类型。这两种类型都属于`LOB`(Large Object)类别,主要...

    oracle(blob转换为clob)

    在Oracle数据库环境中,数据类型BLOB(Binary Large Object)用于存储大量的二进制数据,如图像、音频或视频文件,而CLOB(Character Large Object)则用于存储大量文本数据。在某些情况下,可能需要将BLOB类型的...

    JDBC中操作Blob、Clob等对象

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

    oracle Blob转换Clob

    ### Oracle Blob转换Clob ...通过以上内容的学习,可以了解到如何在Oracle数据库中实现Blob到Clob的转换过程,以及相关的注意事项和技术细节。这对于处理大数据量下的不同类型数据转换具有重要意义。

    图片存入Oracle中,用clob和blob两种方式

    在数据库管理中,存储非结构化数据如图片、音频或视频文件时,通常会使用`CLOB`(Character Large Object)和`BLOB`(Binary Large Object)这两种数据类型。Oracle数据库系统支持这两种数据类型,用于存储大量文本...

    CLOB、BLOB___CLOB与BLOB的区别

    在插入 CLOB 数据时,可以使用 PreparedStatement 的 setString 方法来插入数据;在更新 CLOB 数据时,可以使用 ResultSet 的 updateClob 方法来更新数据。 CLOB 和 BLOB 是两种不同的数据库类型,用于存储不同的...

    如何将DB2数据库中的大对象(BLOB,CLOB)数据类型复制到Oracle数据库中

    在数据库迁移或数据同步的过程中,有时需要将含有大对象(LOB,包括BLOB和CLOB)的数据从一个数据库系统复制到另一个不完全支持LOB的数据库系统。本例中,我们讨论如何将DB2数据库中的BLOB数据类型复制到Oracle...

    Oracle8i对Blob和Clob类型的操作

    在Oracle8i版本中,数据库支持了大型对象(LOB)类型,包括BLOB(Binary Large Object)和CLOB(Character Large Object)。这两种数据类型用于存储大量二进制数据(如图片、视频或文档)和文本数据(如长篇文章或...

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

    本文详细介绍了如何在JDBC中操作Blob和Clob数据,包括创建包含Blob和Clob字段的表、插入和读取Blob/Clob数据的过程。通过这种方式,我们可以有效地管理和处理大量的二进制和文本数据,这对于构建复杂的应用程序来说...

    clob-blob.rar_blob and clob_clob_java CLOB_java oracle cl_oracle

    在Oracle数据库中,CLOB(Character Large Object)和BLOB(Binary Large Object)是用来存储大量文本数据和二进制数据的特殊数据类型。CLOB用于存储大文本数据,如长篇文章或XML文档,而BLOB则用于存储图像、音频、...

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

    - 存储机制:MySQL的`TEXT`和`BINARY`系列数据类型通常存储在数据页中,而Oracle的`CLOB`和`BLOB`可以存储在表空间中,允许更大的数据量。 - 索引支持:Oracle支持对`CLOB`和`BLOB`字段建立索引,而MySQL的索引...

    Oracle导出Clob,Blob工具

    2. **Oracle.ManagedDataAccess.dll**:这是Oracle官方提供的Managed Driver,它是一个.NET Framework库,允许开发者在.NET环境中直接访问Oracle数据库,支持Clob和Blob操作。 3. **SqlSugar.dll**:这是一个流行的...

    Mybatis 处理 CLOB、BLOB 类型数据

    在 Oracle 数据库中,BLOB 类型对应的数据库类型是 BLOB,在 MySQL 中对应的类型是 BLOB。 MyBatis 提供了对 CLOB 和 BLOB 类型的内置支持,通过将 CLOB 类型映射到 Java 的 String 类型,BLOB 类型映射到 byte[] ...

    oracle中的BLOB(照片)转换到mysql中

    在IT行业中,数据库管理系统(DBMS)如Oracle和MySQL在数据存储方面扮演着至关重要的角色。Oracle数据库系统支持多种复杂的数据类型,其中包括BLOB(Binary Large Object),用于存储非结构化的大数据,如图片、音频...

    Oracle导出Clob,Blob工具版本2

    Oracle数据库在存储大对象(BLOB和CLOB)时提供了强大的功能,但处理这些类型的数据进行导入导出可能会带来挑战。"Oracle导出Clob,Blob工具版本2" 是一个专为解决这个问题而设计的应用程序,它改进了对CLOB...

    ORACLE中CLOB字段转String类型

    本文将详细介绍如何在Oracle中实现CLOB字段到字符串类型的转换,并探讨其中的关键技术和注意事项。 #### 一、CLOB概述 1. **定义**: - `CLOB`是Oracle数据库提供的一种特殊的数据类型,用于存储大文本数据。 - ...

    oracle对大对象类型操作:blob,clob,nclob,bfile

    Oracle数据库系统支持对大型数据对象(LOBs,Large Objects)的操作,这包括BLOB、CLOB、NCLOB和BFILE四种类型。每种类型都有其特定的用途和特性,适用于存储不同类型的大数据。 1. BLOB(Binary Large Object): ...

    Blob和Clob使用例子

    下面将详细介绍Blob和Clob的使用方法以及在Hibernate中的应用。 首先,我们需要在实体类中定义对应的Blob或Clob属性。例如,如果有一个User实体,其中包含一张头像图片,我们可以这样定义: ```java public class ...

Global site tag (gtag.js) - Google Analytics