大对象

/*
     * 将对象转化成java.sql.Blob
     * 要求 对象是序列化的
      */
     public java.sql.Blob ObjectToBlob(Object obj) throws IOException{
         try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ObjectOutputStream outputStream = new ObjectOutputStream(out);
            outputStream.writeObject(obj);
             byte [] bytes = out.toByteArray();
            outputStream.close();
             return Hibernate.createBlob(bytes);
        } catch (Exception e) {
             // TODO: handle exception

            System.out.println( " ObjectToBlob " );
             return null ;
        }
    }
   
   
     /*
     * 将java.sql.Blob 转化成 对象 相应对象
     * 要求 对象是序列化的
      */
     public Object BlobToObject(java.sql.Blob desblob,Object obj) throws IOException{
         try {
            ObjectInputStream in = new ObjectInputStream(desblob.getBinaryStream());
            obj = in.readObject();
            in.close();
             return obj;
        } catch (Exception e) {
             // TODO: handle exception

            System.out.println( " BlobToObject " );
            e.printStackTrace()

 

 

 

 

 

 

 

Hibernate Blob:Java 代码:

 
 
  1. public class User  implements   
  2. Java.io.Serializable {         
  3.        // Fields             
  4.      private long id;      
  5.      private String name;      
  6.      private String email;      
  7.      private String addr;      
  8.      //定义Blob的pthto      
  9.      private Blob photo;   

Hibernate Blob:xml 代码:

 
 
  1. <Hibernate-mapping>     
  2.     <class name="org.tie.User" table="user" catalog="tie">     
  3.         <id name="id" type="long">     
  4.             <column name="id" />     
  5.             <generator class="identity" />     
  6.         </id>     
  7.         <property name="name" type="string">     
  8.             <column name="name" length="45" not-null="true" />     
  9.         </property>     
  10.         <property name="email" type="string">     
  11.             <column name="email" length="45" />     
  12.         </property>     
  13.         <property name="addr" type="string">     
  14.             <column name="addr" length="45" />     
  15.         </property>     
  16.         <!-- 映射blob类型 -->     
  17.         <property name="photo" type="blob">     
  18.             <column name="photo" />     
  19.         </property>     
  20.     </class>     
  21. </Hibernate-mapping>  

两个测试方法:

Java 代码:

 
 
  1.     public void testCreate(){                  
  2.     User user = new User();      
  3.     user.setName("linweiyang");      
  4.     user.setAddr("beijing");      
  5.     user.setEmail("linweiyang@163.com");      
  6.     Blob photo = null;              
  7.     try {      
  8.         //将图片读进输入流      
  9.         FileInputStream fis = new FileInputStream("c://a.jpg");      
  10.         //转成Blob类型      
  11.         photo = Hibernate.createBlob(fis);                      
  12.     } catch (FileNotFoundException e) {      
  13.         e.printStackTrace();      
  14.     } catch (IOException e) {      
  15.         e.printStackTrace();      
  16.     }                      
  17.     user.setPhoto(photo);                 
  18.     Session session = factory.openSession();      
  19.     Transaction tr = session.beginTransaction();      
  20.     session.save(user);      
  21.     tr.commit();      
  22.     session.close();         
  23. }              
  24. public void testRerieve(){                  
  25.     Session session = factory.openSession();      
  26.     User user = (User)session.load(User.classnew Long(3));      
  27.     try {      
  28.         //从数据库中要读取出来      
  29.         InputStream is = user.getPhoto().getBinaryStream();      
  30.         //在把写到一个图片格式的文件里      
  31.         FileOutputStream fos = new FileOutputStream("c://linweihan.jpg");                  
  32.         byte[] buffer = new byte[1024];      
  33.         int len = 0;      
  34.         //从数据库中读取到指定的字节数组中      
  35.         while((len = is.read(buffer) )!= -1){      
  36.             //从指定的数组中读取,然后输出来,  
  37.            所以这里buffer好象是连接inputStream和outputStream的一个东西      
  38.             fos.write(buffer,0,len);      
  39.         }      
  40.     } catch (FileNotFoundException e) {      
  41.         e.printStackTrace();      
  42.     } catch (SQLException e) {      
  43.         e.printStackTrace();      
  44.     } catch (IOException  e){      
  45.         e.printStackTrace();      
  46.     }                 
  47.     session.close();      
  48. }    

这么理解输入输出流,读入流自然要有读入的源头,输出也要输出到某个地方,输出一般是先要输读入,这里连接输入和输出的是一个在内存中的字节数组buffer.这样从数据库中读到这个数组里,输出流在从这个数组中输出到特定的文件格式里。以上便是Hibernate Blob数据类型映射的一个例子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值