久久精品国产亚洲怮怮_奇米网777色在线精品_亚洲色中文字幕制服丝袜_久久精品人人做人人看

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應(yīng)
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補(bǔ)償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

Oracle讀取Blob數(shù)據(jù)-通過hibernate

發(fā)布時間:  2012/8/26 16:10:28

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

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

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.} 
對應(yīng)的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數(shù)據(jù)方法:

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.        //將圖片讀進(jìn)輸入流                 10.        FileInputStream fis = new FileInputStream("c:\\a.jpg");                11.        //轉(zhuǎn)成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.        //從數(shù)據(jù)庫中要讀取出來                 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.        //從數(shù)據(jù)庫中讀取到指定的字節(jié)數(shù)組中                 38.        while((len = is.read(buffer) )!= -1){                    39.            //從指定的數(shù)組中讀取,然后輸出來,所以這里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.}    
關(guān)于輸入輸出流

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


 


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

服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

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

    0371-60135900
    7*24小時客服服務(wù)熱線