浏览 8053 次
锁定老帖子 主题:hibernate 写入 clob 问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-09-28
。。。。。 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会造成造型错误,真的很郁闷,把工程中的依赖包删除就可以了,呵呵,希望以后朋友遇到这样的问题不要象我这样又重复了一天的工作,真的很不爽 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-09-29
没这么复杂
1.clob直接对应string,在hbm.xml设置。 2.oracle8 9的驱动有问题,请用10g的驱动,他兼容8 9 3.使用的时候就像普通的字符串那样控制即可 最后,有一个问题,我一直没有解决: 当插入oracle clob字段的字符串长度在1000-2000之间, 写入肯定报错,如果小于1000或者大于2000都没有问题 你可以试试,按照如上的方法应该可以解决。 |
|
返回顶楼 | |
发表时间:2006-10-10
netbeans bulid下面lib 中有class12.jar tomcat中的lib中也有class12.jar不什么不同吗?
如果用WebLogic里的Oracle连接池,你的程序还有问题的,要进行判断tmpClob类型,并进行分别处理。 |
|
返回顶楼 | |
发表时间: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 没有问题啊 |
|
返回顶楼 | |