`
huajunhu
  • 浏览: 8673 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

hibernate 写入 clob 问题

阅读更多
   哎,今天辛苦了一天,就是为了使用hibernate实现clob字段的插入,我使用的环境是hibernate 3.0和class12的开发包,当执行到
。。。。。
            ssSession.save(cMail);
           ssSession.flush();
           szTypeID = cMail.getTypeId();
         ssSession.refresh(cMail, LockMode.UPGRADE);
  SerializableClob clob=(SerializableClob)cMail.getContent();
oracle.sql.CLOB tmpClob = (oracle.sql.CLOB) clob.getWrappedClob();
           java.io.Writer pw = tmpClob.getCharacterOutputStream();
           pw.write(strContent);
           pw.flush();
           pw.close();
           ssSession.flush();
           tx.commit();
时候总报出类型转化错误,但是我看实际取出来就是tmpClob oracle.sql.CLOB但是就是造型错误,真的要人命啊,在网上找了好久没有看到这个解决方法,有人说换最新的oracle驱动就可以了,但是我们现在工程已经做的差不多了,更新驱动可能会有很多问题,没有办法,只能找可有什么好点的方案,原来问题是
在我的netbeans bulid下面lib 中有class12.jar tomcat中的lib中也有class12.jar,两个重复的jar会造成造型错误,真的很郁闷,把工程中的依赖包删除就可以了,呵呵,希望以后朋友遇到这样的问题不要象我这样又重复了一天的工作,真的很不爽
分享到:
评论
3 楼 zzxplayful 2006-10-15  
import java.io.FileInputStream;
import java.io.OutputStream;

import org.hibernate.Hibernate;
import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.lob.SerializableBlob;
import org.hibernate.lob.SerializableClob;

import t_user.Testuser;

public class ReadOracleDemo {

/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
Testuser user=new Testuser();
user.setAge((long)24);
user.setId((long)5);
user.setName("xiaoxin");
user.setUsertype((long)2);
user.setVersion((long)1);
user.setPhoto(Hibernate.createBlob(new byte[1]));
user.setResume(Hibernate.createClob(" "));
session.save(user);
session.flush();

session.refresh(user, LockMode.UPGRADE);

SerializableBlob sb = (SerializableBlob)user.getPhoto();
java.sql.Blob wrapblob = sb.getWrappedBlob();
oracle.sql.BLOB blob = (oracle.sql.BLOB) wrapblob;
OutputStream output = blob.getBinaryOutputStream();
FileInputStream input=new FileInputStream("E:/PHOTO/baby/c0.jpg");
byte b []=new byte[80*1024];
input.read(b);

output.write(b);
input.close();
output.close();

SerializableClob sc=(SerializableClob)user.getResume();
java.sql.Clob wrapclob=sc.getWrappedClob();
oracle.sql.CLOB clob=(oracle.sql.CLOB)wrapclob;
java.io.Writer writer=clob.getCharacterOutputStream();
writer.write("This is the second clob");
session.save(user);
tx.commit();
}

}
这是我写的一个测试的方法,我用的就是classes12.jar  没有问题啊
2 楼 YuLimin 2006-10-10  
netbeans bulid下面lib 中有class12.jar tomcat中的lib中也有class12.jar不什么不同吗?

如果用WebLogic里的Oracle连接池,你的程序还有问题的,要进行判断tmpClob类型,并进行分别处理。
1 楼 gumpgz 2006-09-29  
没这么复杂

1.clob直接对应string,在hbm.xml设置。
2.oracle8 9的驱动有问题,请用10g的驱动,他兼容8 9
3.使用的时候就像普通的字符串那样控制即可

最后,有一个问题,我一直没有解决:
当插入oracle clob字段的字符串长度在1000-2000之间,
写入肯定报错,如果小于1000或者大于2000都没有问题

你可以试试,按照如上的方法应该可以解决。

相关推荐

    Hibernate对BLOB CLOB操作

    在Java的持久化框架Hibernate中,BLOB(Binary Large Object)和CLOB(Character Large Object)是用来处理大数据类型的,如图像、音频、大型文本等。本文将深入探讨Hibernate如何进行BLOB和CLOB的操作,以及相关的...

    关于Oracle的 Clob数据类型在Hibernate中的应用小结

    Oracle的Clob数据类型...此外,对于非常大的Clob数据,可能需要分段读取和写入,以避免一次性处理大量数据带来的性能问题。理解并熟练掌握Clob在Hibernate中的处理方式,对于开发高效且稳定的数据库应用程序至关重要。

    关于Clob类型在Hibernate中 的应用小结

    在写入时,先将字符串转换为Clob对象,再由Hibernate处理;读取时,将Clob内容转化为字符串。这种方式适用于数据量不是特别大的情况,因为所有数据都需要在内存中进行转换。 3. **直接使用Clob类型**: Hibernate...

    hibernate动态映射表处理oracle的clob类型

    6. **示例代码**:在Hibernate中,读取和写入CLOB的代码可能如下: ```java // 读取 Clob clob = entity.getLongText(); String content = clob.getSubString(1, (int) clob.length()); // 写入 Session ...

    Hibernate对Blob,Clob的操作

    本文将详细介绍如何在Hibernate中操作Blob和Clob字段,实现数据的存储与读取。 首先,我们需要在Hibernate映射文件(.hbm.xml)中定义Blob和Clob字段。对于Blob,可以这样声明: ```xml ``` 这里的`name`属性...

    Hibernate操作Oarcle中Clob、Blob字段小结

    - 分块读写:对于大数据,可以使用`lobCreator.createClob()`创建可写Clob,然后分块写入,读取时也按块读取,减少内存占用。 - 使用`lobLocator`:Oracle支持`LOB LOCATOR`,允许只在需要时才加载数据,提高效率...

    解析使用jdbc,hibernate处理clob/blob字段的详解

    这是因为Oracle的`CLOB`需要先创建空间,然后再写入数据。 - 插入示例: ```java conn.setAutoCommit(false); String sql = "insert into file(name,file_content) values('jack',EMPTY_CLOB())"; ...

    关于在Hibernate中对于Clob,Blob字段的处理方法

    在Java的持久化框架Hibernate中,处理大数据类型如Clob(Character Large Object)和Blob(Binary Large Object)是常见的需求,这些数据类型通常用于存储大量的文本或二进制数据。Oracle数据库提供了支持Clob和Blob...

    java中(注解符)处理Clob(blob)类型

    在 Java 中,处理 Clob 和 Blob 类型需要使用特殊的注解配置来确保正确地读取和写入数据。 一、Clob 类型的注解配置 在 Java 中,处理 Clob 类型需要使用 @Lob 注解来指定该字段为大规模字符数据类型。@Lob 注解...

    jdbc_blob_clob.rar

    7. **写入Clob数据**:将字符数据流或字符串设置到Clob对象,然后在SQL语句中使用。例如,`PreparedStatement.setClob(int index, Reader reader)`。 8. **事务管理**:处理Blob和Clob数据通常涉及大量I/O操作,...

    关于Clob类型在Hibernate中 的应用小结.rar

    通常,要解决超过4000字节的数据,一种做法是将数据写入文件,xml或plain file都可以,数据表中保存文件的路径即可。这种做法不必处理clob(Character Large Object), blob(Binary Large Object)等格式的字段类型,但...

    java将图片写入数据库,并读出来(blob clob)

    以上就是使用Java将图片写入数据库(使用Blob类型)并读出来的基本流程。在实际应用中,你可能需要处理异常、事务管理、性能优化等方面的问题。同时,为了提高效率,可以考虑将数据分块读写,特别是处理大文件时。...

    weblogic解决clob添加失败 classcastexception

    2. **代码实现**:在将数据写入CLOB字段时,可能直接使用了String对象,而没有将其转换为InputStream或Reader。例如,应使用`setClob(int, Reader)`或`setClob(int, InputStream, long)`方法,而不是`setClob(int, ...

    详解jdbc实现对CLOB和BLOB数据类型的操作

    写入CLOB数据主要通过Java.sql.Clob接口实现。下面是一个基本的写入CLOB数据的示例代码: ```java Connection con = ConnectionFactory.getConnection(); con.setAutoCommit(false); Statement st = con....

    oracle+hibernate 处理blob +uploadify实例

    `DiskFileItemFactory`用于设置内存缓冲区大小,超过这个大小后,文件将被写入临时文件。 ```java public void uploadImg(HttpServletRequest request, HttpServletResponse response) throws ServletException, ...

    hibernate-annotations-3.4.0.GA架包和slf4j-1.5.8架包

    @Temporal用于日期时间类型的映射,@Lob用于大对象(BLOB或CLOB)的映射。 3. **关系映射**:@OneToOne、@OneToMany、@ManyToOne、@ManyToMany注解分别用于一对一、一对多、多对一和多对多的关系映射,它们可以通过...

    动态添加hibernate domain的属性的例子

    2. **实现UserType接口**:为每个动态属性创建一个UserType实现,覆盖`nullSafeGet`和`nullSafeSet`等方法,处理数据的读取和写入。 3. **注册UserType**:在Hibernate的配置文件中,或者在SessionFactory创建时,...

    ssh(structs,spring,hibernate)框架中的上传下载

     需要指定的是Spring 1.2.5提供了两套Hibernate的支持包,其中Hibernate 2相关的封装类位于org.springframework.orm.hibernate2.*包中,而Hibernate 3.0的封装类位于org.springframework.orm.hibernate3.*包中,...

    数据库的各种连接技巧

    通过`PreparedStatement`中的`setObject()`、`setBinaryStream()`和`setCharacterStream()`等方法,可以方便地读取和写入LOB数据。例如: ```java PreparedStatement pstmt = connection.prepareStatement("INSERT ...

Global site tag (gtag.js) - Google Analytics