zoukankan      html  css  js  c++  java
  • oracle中Blob和Clob类型的区别


    一、oracle中Blob和Clob类型的区别
    BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的。其实两个是可以互换的的,或者可以直接用LOB字段代替这两个。但是为了更好的管理ORACLE数据库,通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便。
    BLOB全称为二进制大型对象(Binary Large Object)。它用于存储数据库中的大型二进制对象。可存储的最大大小为4G字节 
    CLOB全称为字符大型对象(Character Large Object)。它与LONG数据类型类似,只不过CLOB用于存储数据库中的大型单字节字符数据块,不支持宽度不等的字符集
    可存储的最大大小为4G字节,Clob可以存储单字节字符数据,Blob可以存储无结构的二进制数据
    二、empty_clob()和empty_blob()的使用:
    在向带有Lob类型的字段加入数据时,使用EMPTY_CLOB()初始化CLOB字段,然后再使用输出流向字段中写数据(这些数据往往都是字节流量相对较大的). 如果是直接在oracle客户端向表中写数据,就不用这么麻烦了.好了,具体的操作:

     

    CREATE TABLE article(

     

    subject VARCHAR2(50 char),

     

    content CLOB ,

     

    tstamp TIMESTAMP DEFAULT SYSDATE

     

    );

     

     

    --使用EMPTY_CLOB()来初始化CLOB字段

     

    String strSql = "INSERT INTO article(subject,content) VALUES('文章标题:Empty_clob()的使用方法',EMPTY_CLOB())";

     

    Connection conn = db.getConnection();

     

    conn.setAutoCommit(false);

     

     

    PreparedStatement ptmt = conn.prepareStatement(sqlBuffer.toString());

     

    ptmt.executeUpdate();

     

    strSql = "select content from article where subject = "+subject+" for update ";

     

    ResultSet rs = ptmt.executeQuery(strSql);

     

    if (rs.next()) {

     

    /**//* 取出此CLOB对象 */

     

    oracle.sql.CLOB clob = null;

     

    clob = (oracle.sql.CLOB) rs.getClob("content");

     

    /**//* 向CLOB对象中写入数据 */

     

    BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());

     

    out.write(content);

     

    out.close();

     

    out = null;

     

    conn.commit();

     

    }

    在平台中使用的原理:

    1、通过select语句获得需要修改的行+for update

    2、遍历resultset 同rs.next()获得blob列字段对象

    3、同blob列字段对象创建输出流

    4、数据流中写入msg

    5、commit提交到db

    代码如下:

    BLOB pBlob = (BLOB)RS.getBlob(strFName);
    OutputStream out = pBlob.getBinaryOutputStream();
    byte[] pBytes = (byte[])(byte[])pImageFieldValues.get(i);
    out.write(pBytes);
    out.close();

     

  • 相关阅读:
    time模块
    Python进程模块
    Django面试题
    基本命令行语句
    scrapy中的配置与中间件
    JSON编码于解码对应dump于load
    python操作数据库
    Python里的方法
    正则表达式
    Python常用模块
  • 原文地址:https://www.cnblogs.com/moonfans/p/3855358.html
Copyright © 2011-2022 走看看