<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dev@Free

    zJun's Tech Weblog

    [深入淺出Hibernate筆記] Oracle中的大字段 Blob/Clob

    數(shù)據(jù)庫中提供了兩種字段類型 Blob??和 Clob 用于存儲大型字符串或二進制數(shù)據(jù)(如圖片)。

    Blob 采用單字節(jié)存儲,適合保存二進制數(shù)據(jù),如圖片文件。
    Clob 采用多字節(jié)存儲,適合保存大型文本數(shù)據(jù)。

    Oracle中處理BLOB/CLOB字段的方式比較特別,所以需要特別注意下面兩點:

    1. 在Oracle JDBC中采用流機制對 BLOB/CLOB 進行讀寫操作,所以要注意不能在批處理中讀寫 BLOB/CLOB字段,否則將出現(xiàn)
    Stream type cannot be used in batching 異常。

    2. Oracle BLOB/CLOB 字段本身擁有一個游標(cursor),JDBC通過游標對Blob/Clob字段進行操作,在Blob/Clob字段創(chuàng)建之前,無法獲取其游標句柄,會出現(xiàn)
    Connection reset by peer: socket write error 異常。

    正確的做法是:首先創(chuàng)建一個空 Blob/Clob 字段,再從這個空 Blob/Clob字段獲取游標,例如下面的代碼:

    PreparedStatement?ps? = ?conn.prepareStatement( " insert?into?PICTURE(image,resume)?values(?,?) " );
    // ?通過oralce.sql.BLOB/CLOB.empty_lob()構(gòu)造空Blob/Clob對象

    ps.setBlob( 1 ,oracle.sql.BLOB.empty_lob());
    ps.setClob(
    2
    ,oracle.sql.CLOB.empty_lob());

    ps.excuteUpdate();
    ps.close();

    // ?再次對讀出Blob/Clob句柄

    ps? = ?conn.prepareStatement( " select?image,resume?from?PICTURE?where?id=??for?update " );
    ps.setInt(
    1 , 100
    );

    ResultSet?rs?
    =
    ?ps.executeQuery();
    rs.next();

    oracle.sql.BLOB?imgBlob?
    = ?(oracle.sql.BLOB)rs.getBlob( 1
    );
    oracle.sql.CLOB?resClob?
    = ?(oracle.sql.CLOB)rs.getClob( 2
    );

    // ?將二進制數(shù)據(jù)寫入Blob

    FileInputStream?inStream? = ? new ?FileInputStream( " c://image.jpg " );
    OutputStream?outStream?
    =
    ?imgBlob.getBinaryOutputStream();

    byte []?buf? = ? new ? byte [ 10240
    ];
    int
    ?len;
    while (len = inStream.read(buf) > 0 )
    {
    ??outStream.write(buf,
    0
    ,len);
    }

    inStream.close();
    outStream.cloese();

    // ?將字符串寫入Clob
    resClob.putString( 1 , " this?is?a?clob " );

    // ?再將Blob/Clob字段更新到數(shù)據(jù)庫

    ps? = ?conn.prepareStatement( " update?PICTURE?set?image=??and?resume=??where?id=? " );
    ps.setBlob(
    1
    ,imgBlob);
    ps.setClob(
    2
    ,resClob);
    ps.setInt(
    3 , 100
    );

    ps.executeUpdate();
    ps.close();


    posted on 2006-08-15 16:39 zJun's帛羅閣 閱讀(5401) 評論(1)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

    評論

    # re: [深入淺出Hibernate筆記] Oracle中的大字段 Blob/Clob 2010-01-14 13:53

    http://iceland1986.blog128.fc2.com/blog-entry-3.html
    作者文不對題。。用上面就可以做到。不過只有讀取。  回復(fù)  更多評論   

    導(dǎo)航

    <2006年8月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    統(tǒng)計

    常用鏈接

    留言簿(15)

    隨筆分類

    隨筆檔案

    相冊

    收藏夾

    博客

    文檔

    站點

    論壇

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久国产免费福利永久| 亚洲码欧美码一区二区三区| 曰韩无码AV片免费播放不卡| 日韩免费观看的一级毛片| 亚洲一区二区三区在线观看网站| 99久久久国产精品免费无卡顿| 亚洲精品不卡视频| 114一级毛片免费| 亚洲制服丝袜中文字幕| 成人免费视频软件网站| 国产成人亚洲精品91专区高清| 免费一级毛片不卡在线播放| jizz日本免费| 亚洲无线观看国产精品| 国产情侣久久久久aⅴ免费| 亚洲av综合avav中文| 中文字幕视频免费| 77777午夜亚洲| 免费在线观看亚洲| 成在线人免费无码高潮喷水| 亚洲91av视频| 最近中文字幕免费mv视频7| 亚洲aⅴ无码专区在线观看| 亚洲精品无码AV中文字幕电影网站| 一级看片免费视频囗交| 亚洲精品成人av在线| 波多野结衣免费在线| 在线精品自拍亚洲第一区| 国产AV无码专区亚洲AWWW| 免费精品无码AV片在线观看| 亚洲乱人伦中文字幕无码| 亚洲第一永久AV网站久久精品男人的天堂AV | 特色特黄a毛片高清免费观看 | 亚洲人成在线播放网站岛国| 成人免费黄色网址| 黄页视频在线观看免费| 久久久久亚洲av无码专区导航 | 免费va在线观看| 57pao一国产成永久免费| 亚洲AV日韩AV一区二区三曲| 亚洲国产精品一区第二页 |