<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

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

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

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

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

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

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

    PreparedStatement?ps? = ?conn.prepareStatement( " insert?into?PICTURE(image,resume)?values(?,?) " );
    // ?通過oralce.sql.BLOB/CLOB.empty_lob()構造空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
    );

    // ?將二進制數據寫入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字段更新到數據庫

    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帛羅閣 閱讀(5391) 評論(1)  編輯  收藏 所屬分類: 數據庫

    評論

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

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

    導航

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

    統計

    常用鏈接

    留言簿(15)

    隨筆分類

    隨筆檔案

    相冊

    收藏夾

    博客

    文檔

    站點

    論壇

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产免费不卡v片在线观看| 国产黄在线观看免费观看不卡| 国产在线精品免费aaa片| 亚洲国产天堂久久综合| 色吊丝最新永久免费观看网站| 亚洲另类视频在线观看| 97在线观看永久免费视频| 成人国产mv免费视频| 精品亚洲A∨无码一区二区三区| 日韩免费人妻AV无码专区蜜桃| 西西人体44rt高清亚洲| 99在线免费观看视频| 亚洲国产成人资源在线软件| 美女视频黄免费亚洲| 久久国产亚洲精品麻豆| 暖暖免费在线中文日本| 一本色道久久88综合亚洲精品高清| 亚洲精品人成在线观看| 污污免费在线观看| 伊人久久亚洲综合| 免费无码毛片一区二区APP| 亚洲精品国产精品国自产网站| 免费精品久久天干天干| 免费播放春色aⅴ视频| 亚洲一区二区三区久久| 女人18毛片a级毛片免费视频| 亚洲AV一区二区三区四区| 日本三级2019在线观看免费| 亚洲欧美国产日韩av野草社区| 2020因为爱你带字幕免费观看全集| 亚洲一区欧洲一区| 亚洲av午夜精品一区二区三区| 亚洲无码一区二区三区| 亚洲国产成人a精品不卡在线| 久久免费区一区二区三波多野| 亚洲ts人妖网站| 狠狠综合久久综合88亚洲| 久久久久久精品免费看SSS| 亚洲国产一区二区三区青草影视| 4455永久在线观免费看| 理论秋霞在线看免费|