1. <var id="fe6gj"></var>

    <rp id="fe6gj"><nav id="fe6gj"></nav></rp>

    <noframes id="fe6gj"><cite id="fe6gj"></cite>

    <ins id="fe6gj"><button id="fe6gj"><p id="fe6gj"></p></button></ins>
    1. <tt id="fe6gj"><i id="fe6gj"><sub id="fe6gj"></sub></i></tt>
        始創于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業
        • 60秒人工響應
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補償
        您的位置: 網站首頁 > 幫助中心>文章內容

        Oracle讀取Blob數據-通過hibernate

        發布時間:  2012/8/26 16:10:28

        通過hibernate向Oracle存儲字節類型的數據(如byte[]等),在定義實體對象的時候不能用"private byte[] content", 這樣定義我試過,在存儲數據的時候(session.save(user))是沒有問題的,但是在讀取Blob字段(Oracle中存儲byte[]使用的是"BLOB"類型)時就會出現問題,讀出來的東西就成了亂碼.
        -
         

        使用hibernate讀取Blob字段時,實體對象(對應的byte[]類型字段)應該這樣定義:

        1.import java.io.Serializable; 
        2.import java.sql.Blob;  3. 
        4.public class User implements Serializable {                  5.    // Fields                     6.    private long id;             7.    private String name;             8.    private String email;             9.    private String addr;             10.    // 定義Blob的pthto              11.    private Blob photo;  12.     
        13.    // getter and setters   14.    ...... 
        15.} 
        對應的hibernate文件配置:

        1.<?xml version="1.0" encoding="UTF-8"?> 
        2.<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
        3."http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  4.<Hibernate-mapping>           5.    <class name="com.xxx.xxx.User" table="user">               6.        <id name="id" type="java.lang.Long">                   7.            <column name="id" />                   8.            <generator class="increment" />               9.        </id>               10.        <property name="name" type="java.lang.String">                   11.            <column name="name" length="45" not-null="true" />               12.        </property>               13.        <property name="email" type="java.lang.String">                   14.            <column name="email" length="45" />               15.        </property>               16.        <property name="addr" type="java.lang.String">                   17.            <column name="addr" length="45" />               18.        </property>               19.        <!-- 映射blob類型 -->               20.        <property name="photo" type="java.sql.Blob">                   21.            <column name="photo" />               22.        </property>           23.    </class>       24.</Hibernate-mapping>    讀取Blob數據方法:

        1.// 寫方法  
        2.public void testCreate(){                        3.    User user = new User();            4.    user.setName("linweiyang");            5.    user.setAddr("beijing");            6.    user.setEmail("linweiyang@163.com");            7.    Blob photo = null;                    8.    try {                9.        //將圖片讀進輸入流                 10.        FileInputStream fis = new FileInputStream("c:\\a.jpg");                11.        //轉成Blob類型                 12.        photo = Hibernate.createBlob(fis);                           
        13.    } catch (FileNotFoundException e) {                14.        e.printStackTrace();           
        15.    } catch (IOException e) {                16.        e.printStackTrace();           
        17.    }                           
        18.    user.setPhoto(photo);                      
        19.    Session session = factory.openSession();           
        20.    Transaction tr = session.beginTransaction();           
        21.    session.save(user);           
        22.    tr.commit();           
        23.    session.close();          
        24.}               
        25. 
        26.// 讀方法   27.public void testRerieve(){                        28.    Session session = factory.openSession();           
        29.    User user = (User)session.load(User.class, new Long(3));            30.    try {                31.        //從數據庫中要讀取出來                 32.        InputStream is = user.getPhoto().getBinaryStream();               
        33.        //在把寫到一個圖片格式的文件里                 34.        FileOutputStream fos = new FileOutputStream("c:\\linweihan.jpg");                            35.        byte[] buffer = new byte[1024];                36.        int len = 0;                37.        //從數據庫中讀取到指定的字節數組中                 38.        while((len = is.read(buffer) )!= -1){                    39.            //從指定的數組中讀取,然后輸出來,所以這里buffer好象是連接inputStream和outputStream的一個東西                     40.            fos.write(buffer,0,len);                41.        }           
        42.    } catch (FileNotFoundException e) {                43.        e.printStackTrace();           
        44.    } catch (SQLException e) {                45.        e.printStackTrace();           
        46.    } catch (IOException  e) {                47.        e.printStackTrace();           
        48.    }                      
        49.    session.close();       
        50.}    
        關于輸入輸出流

        讀入流自然要有讀入的源頭,輸出也要輸出到某個地方,輸出一般是先要輸讀入,這里連接輸入和輸出的是一個在內存中的字節數組buffer.這樣從數據庫中讀到這個數組里,輸出流在從這個數組中輸出到特定的文件格式里。


         


        本文出自:億恩科技【www.endtimedelusion.com】

        服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

      1. 您可能在找
      2. 億恩北京公司:
      3. 經營性ICP/ISP證:京B2-20150015
      4. 億恩鄭州公司:
      5. 經營性ICP/ISP/IDC證:豫B1.B2-20060070
      6. 億恩南昌公司:
      7. 經營性ICP/ISP證:贛B2-20080012
      8. 服務器/云主機 24小時售后服務電話:0371-60135900
      9. 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
      10. 專注服務器托管17年
        掃掃關注-微信公眾號
        0371-60135900
        Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
          0
         
         
         
         

        0371-60135900
        7*24小時客服服務熱線

         
         
        av不卡不卡在线观看_最近2018年中文字幕_亚洲欧美一区二区三区_一级A爱做片免费观看国产_日韩在线中文天天更新_伊人中文无码在线