`

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

阅读更多
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();
       }
    }

hibernate.xml设置

<property name="photo" type="java.sql.Blob">
            <column name="PHOTO"  />
        </property>
分享到:
评论

相关推荐

    oracle中的Blob和Clob区别

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

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

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

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

    在数据库管理中,存储非结构化数据...综上所述,`CLOB`和`BLOB`都是在Oracle中存储图片的有效方法,具体选择哪种方式取决于应用场景和需求。`ClobAndBlob`工具提供了一种便捷的方式来体验和比较这两种方式的使用效果。

    Oracle8i对Blob和Clob类型的操作

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

    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则用于存储图像、音频、...

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

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

    Mybatis 处理 CLOB、BLOB 类型数据

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

    Oracle clob和blob在jdbc的应用

    在Java编程中,Oracle数据库提供了对大型对象(Large Object)的支持,包括CLOB(Character Large Object)和BLOB(Binary Large Object)。这两种类型用于存储大量的文本数据(CLOB)和二进制数据(BLOB),例如...

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

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

    oracle Blob Clob 大数处理 代码

    在Oracle中,Blob和Clob的处理涉及到许多关键知识点,包括创建、读取、更新和删除大对象数据。以下是一些相关的详细说明: 1. **创建LOB字段**: 在创建表时,可以添加Blob或Clob字段来存储大对象。例如: ```sql...

    使用Jdbc4操作Blob,Clob

    在JDBC4中,处理LOB对象变得更为直接和高效,主要归功于新增的`java.sql.Blob`和`java.sql.Clob`接口的增强功能。 首先,我们需要在项目中引入JDBC驱动,以便与数据库进行通信。对于不同的数据库,如MySQL、Oracle...

    oracle blob 字段 读写 delphi

    本篇文章将深入探讨如何在Delphi中对Oracle数据库的BLOB字段进行读写操作。 首先,你需要在Delphi项目中引入Oracle数据库访问的相关组件,如DBExpress或ADO。DBExpress是Delphi内置的一个轻量级数据库访问框架,而...

    JAVA对clob的操作

    在JAVA中,操作Oracle数据库中的BLOB和CLOB类型字段是一种常见的需求。然而,网络上关于JAVA对Oracle中BLOB、CLOB类型字段的操作说明往往不够全面、不够准确,甚至有的简直就是胡说八道。因此,本文旨在总结JAVA对...

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

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

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

    - 包含在`bigstring_oracle_src`可能有示例代码,展示了如何在Java中创建Clob和Blob对象,以及如何通过Hibernate进行插入、更新和查询操作。 总之,理解并熟练掌握Hibernate对Oracle中的Clob和Blob字段的操作,是...

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

    本篇将详细介绍在Hibernate中如何处理Clob和Blob字段,以及使用特定Oracle JDBC驱动程序的优势。 首先,Hibernate通过`org.hibernate.type`包中的`ClobType`和`BlobType`来映射Clob和Blob。在实体类中,你需要定义...

    oracle中blob 字段类型的应用

    在Oracle数据库中,Blob与Clob(Character Large Object)、Bfile和Nclob一同构成了大对象类型。 Clob是用来存储字符数据,同样最大可达到4GB,适用于文本内容。Bfile则是一种外部LOB,它存储在数据库外部的文件...

    java将图片写入数据库,并读出来(blob clob)

    这个过程通常涉及到Blob和Clob数据类型,它们是Java中的两种特殊对象,用于存储大对象(LOB)。Blob用于存储二进制数据,如图片、音频或视频文件,而Clob则用于存储字符数据,比如长文本。以下是如何使用Java处理...

Global site tag (gtag.js) - Google Analytics