谈谈在spring(hibernate)中如何处理oracle大字段
===============================================
在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





