CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
(图)邪恶的韩国UMPC 使用 Java 编写数据库应用新规范
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  架构、设计

谈谈在spring(hibernate)中如何处理oracle大字段

楼主yanglilibaobao()2006-12-01 13:47:58 在 Java / 架构、设计 提问

===============================================    
  在spring中如何处理oracle大字段    
  在spring中采用OracleLobHandler来处理oracle大字段(包括clob和blob),则在程序中不需要引用oracle的特殊类,从而能够保证支持我们的代码支持多数据库。  
   
  1、首先数据表中的clob类型对应java持久化类的String类型;而blob类型对应byte[]类型    
  2、定义hibernate标签时,持久化类中对应clob类型的属性的hibernate   type应为org.springframework.orm.hibernate.support.ClobStringType;而对应blob类型的属性的hibernate   type应为org.springframework.orm.hibernate.support.BlobByteArrayType。    
  3、以后访问这些对应clob和blob类型的属性时,按普通属性处理,不需要特别编码。    
  ===============================================    
  请问大家有没有试上面方法在spring中处理Oracle的blob?有这方面经验的朋友说一下怎么实现!   现在用hibernate操作oracle的blog存取基本是按传统的jdbc方式处理的,如下例子所示。如果用spring提供的org.springframework.jdbc.support.lob.OracleLobHandler类,应该怎么修改!    
   
  例:   Customer.hbm.xml    
   
   
  代码  
    <?xml   version="1.0"?>      
       
  <hibernate-mapping   package="com.jandar.bo">      
            <class   name="Customer"   table="CUSTOMER">      
          <id      
                          column="ID"      
                          name="Id"      
                          type="integer"      
            >      
          <generator   class="vm"   />      
          </id>      
          <property      
                  column="NAME"      
                  length="25"      
                  name="Name"      
                  not-null="false"      
                  type="string"      
          />      
          <property      
                  column="IMAGES"      
                  name="Images"      
                  not-null="false"      
                  type="blob"      
          />      
  </class>      
  </hibernate-mapping>      
   
   
  ===============================================  
   
   
   
   
  代码  
  import   java.io.File;        
  import   java.io.FileInputStream;        
  import   java.io.IOException;        
  import   java.io.InputStream;        
  import   java.io.OutputStream;        
  import   java.sql.SQLException;        
  import   java.util.List;        
  import   net.sf.hibernate.Hibernate;        
  import   net.sf.hibernate.LockMode;        
  import   org.springframework.orm.hibernate.support.HibernateDaoSupport;        
  import   weblogic.jdbc.vendor.oracle.OracleThinBlob;        
  import   com.jandar.bean.ImageBean;        
  import   com.jandar.bo.Customer;        
  import   com.jandar.services.dao.ImageDAO;        
       
  public   class   ImageDAOImpl   extends   HibernateDaoSupport              
                                                                                        implements   ImageDAO{        
       
                      byte[]   buffer   =   new   byte[10];        
                 
                      public   Customer   findImage(Customer   customer)   {        
                      String   getId   =   "select   max(cu.id)   from   Customer   as   cu";        
                      List   list   =   (List)getHibernateTemplate().find(getId);        
            Customer   customerBean   =        
                                          (Customer)getHibernateTemplate().load          
                                          (Customer.class,Integer.valueOf(list.get(0).toString()));        
                  return   customerBean;          
              }        
       
                public   void   saveImages(Object   object){        
                              Customer   customer   =   new   Customer();        
                              ImageBean   imageBean   =   (ImageBean)object;        
                              OutputStream   out   =   null;        
                              InputStream   fin   =   null;        
                              try{        
                                                  //Session   session   =   getSession();        
                        //session.connection().prepareStatement("insert   into   ");        
                                              //Connection   connection   =   null;        
                    //connection   =   (Connection)session.connection();        
                    //PreparedStatement   ps   =   connection.createStatement();        
                          customer.setName("jack");        
                          customer.setImages(Hibernate.createBlob(buffer));        
                          getHibernateTemplate().save(customer);        
                          getHibernateTemplate().flush();          
  getHibernateTemplate().refresh(customer,   LockMode.UPGRADE);          
                                  //since:   weblogic8.2   lib          
                          OracleThinBlob   blob   =   (OracleThinBlob)customer.getImages();        
                          out   =   blob.getBinaryOutputStream();        
                          String   fileName   =   imageBean.getImageName();          
                          File   f   =   new   File(fileName);          
                          fin   =   new   FileInputStream(f);          
                          //int   count   =   -1,   total   =   0;          
                        //fin.read(data);        
                          byte[]   data   =   new   byte[   (int)   fin.available()];          
                          int   bytesReaded   =   0;        
                              while((bytesReaded=fin.read(data,0,data.length))   !=   -1)   {        
                              out.write(data,   0,   bytesReaded);        
          }        
                            //out.write(data);        
                                                        customer.setName(imageBean.getName());        
                                out.flush();        
                                                        getHibernateTemplate().flush();        
                                  }catch(SQLException   sqlError){        
                                    System.out.println("sql   error:     "+   sqlError.getMessage());        
          }catch(Exception   notFound){        
                              System.out.println("sql   error:     "+   notFound.getMessage());        
          }finally{        
                                  try{                
                                out.close();        
                                  fin.close();        
                                  }catch(IOException   error){        
                                                 
                                  }        
                          }        
              }        
       
  }      
   
   
  请指点一二!    
   
   
   
   
   
  本文选自:http://www.javaeye.com/article/16392 问题点数:0、回复次数:0Top

相关问题

关键词

得分解答快速导航

  • 帖主:yanglilibaobao

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo