<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 用于存儲大型字符串或二進(jìn)制數(shù)據(jù)(如圖片)。

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

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

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

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

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

    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
    );

    // ?將二進(jìn)制數(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帛羅閣 閱讀(5403) 評論(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)

    隨筆分類

    隨筆檔案

    相冊

    收藏夾

    博客

    文檔

    站點

    論壇

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久九九兔免费精品6| 免费h黄肉动漫在线观看| 四虎www免费人成| 亚洲av无码av制服另类专区| 杨幂最新免费特级毛片| 卡1卡2卡3卡4卡5免费视频| 国产精品高清免费网站| 亚洲福利精品一区二区三区| 亚洲色欲色欲www在线播放 | 色视频色露露永久免费观看| 久久亚洲美女精品国产精品| 特黄aa级毛片免费视频播放| 国产美女精品视频免费观看| 最好2018中文免费视频| 国产成人人综合亚洲欧美丁香花 | 18女人腿打开无遮掩免费| 国产亚洲3p无码一区二区| 中文字幕无码一区二区免费| 亚洲精品国产福利片| 成年人免费网站在线观看| 蜜桃传媒一区二区亚洲AV| 亚洲色欲色欲www在线丝| 亚洲免费精彩视频在线观看| 亚洲国产夜色在线观看| 全部免费a级毛片| 亚洲天堂中文字幕在线| 2019中文字幕在线电影免费| 最近免费中文字幕大全免费| 国产偷国产偷亚洲清高APP| 国产精品亚洲一区二区三区| 亚洲级αV无码毛片久久精品| 亚洲av永久无码精品网站| 亚洲视频日韩视频| 亚洲人成影院在线无码观看| 久久久久亚洲AV无码专区桃色| 久久久久久国产精品免费免费| 好紧我太爽了视频免费国产| www免费插插视频| 精品成人一区二区三区免费视频| 人体大胆做受免费视频| 亚洲AV网一区二区三区 |