spring+hibernate+oracle9i用clob

本文介绍如何在Hibernate中正确配置CLOB和BLOB字段,并提供了一个示例代码来演示如何插入这些大型对象到数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


修改hibernate的配置如下
代码
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>

<bean id="oracleLobHandle" class="org.springframework.jdbc.support.lob.OracleLobHandler" Lazy-init="true">
 
<property name="nativeJdbcExtractor">
   
<ref local="nativejdbcExtractor"/>
 
</property>
</bean>


在有clob类型sessionFactory(org.springframework.com.hibernate.LocalSessionFractoryBean)中加入
<property name="lobHandler"><ref bean="oracleLobHandle"/></property>

在需要clob的JavaBean对应的hbm.xml中,改对应的clob类型的字段

代码
<property
 
name=""
 type
="org.springframework.orm.hibernate.support.ClobStringType"
 clumn
=""
 length
="XXXXXX" <!--定义clob字段大小(以字节为单位,最大2GB)-->
>

JavaBean的对应的属性类型为String

------------------------------------------------------------------------------
----hibernate3 使用blob 和 clob 演例代码-----

hibernate3 使用blob 和 clob 演例代码:

 1import java.io.File;
 2import java.io.FileInputStream;
 3import java.io.OutputStream;
 4import java.io.Writer;
 5import java.sql.Clob;
 6import oracle.sql.CLOB;
 7import org.hibernate.LockMode;
 8import org.hibernate.Transaction;
 9import org.hibernate.Session;
10import org.hibernate.Hibernate;
11import org.hibernate.lob.SerializableBlob;
12import org.hibernate.lob.SerializableClob;
13
14
15public class test1 {
16
17        /**
18         * @param args
19         */

20        static Session session = HibernateSessionFactory.currentSession();
21        
22        public boolean inserted(TStu obj){
23                
24                Transaction tran = session.beginTransaction();
25                session.save(obj);
26                session.flush();
27                session.refresh(obj,LockMode.UPGRADE);
28                try
29                {
30                SerializableBlob sb = (SerializableBlob)obj.getImg();
31                java.sql.Blob wrapblob = sb.getWrappedBlob();
32                if(wrapblob instanceof oracle.sql.BLOB){
33                         oracle.sql.BLOB blob = (oracle.sql.BLOB) wrapblob;
34                OutputStream bout = blob.getBinaryOutputStream();
35                FileInputStream fin = new FileInputStream("d://a.jpg");//修改你要存入的图片
36                byte [] buf = new byte[10240];//做为10K的缓存写入
37                int len;
38                while((len = fin.read(buf))>0){
39                        bout.write(buf,0,len);
40                }

41                bout.close();
42                fin.close();
43                }

44                
45                SerializableClob  sc = (SerializableClob)obj.getResu();
46                Clob wrapclob = sc.getWrappedClob();
47                if(wrapclob instanceof CLOB){
48                        CLOB clob = (CLOB)wrapclob; 
49                        Writer cout = clob.getCharacterOutputStream();
50                        File file = new File("C://log_2005_8.txt");//修改你要存如的文本
51                        FileInputStream fin = new FileInputStream(file);
52                        int read;
53                        while((read = fin.read())!= -1){
54                                cout.write(read);
55                        }

56                        fin.close();
57                        cout.close();
58                }

59                
60                tran.commit();
61                return true;
62                }
catch(Exception ex){
63                        ex.printStackTrace();
64                        tran.rollback();
65                        return false;
66                }

67        }

68        
69        public static void main(String[] args) {
70                // TODO Auto-generated method stub         
71                test1 t = new test1();
72                 TStu stu = new TStu();
73                 stu.setAge(new Integer("23"));
74                 stu.setName("lilei");
75                 stu.setImg(Hibernate.createBlob(new byte[1]));
76                 stu.setResu(Hibernate.createClob(" "));
77                 t.inserted(stu);        
78        }

79}

80
81
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值