前段时间再做net learning platform时,由于使用了oracle clob字段,导致tomcat线程不退出 ,以为是写入代码有问题,如下 java.io.Writer pw=null;
try {
Long id = (Long)o.getClass().getMethod("getId",null)
.invoke(o,null);
if(id==null)
{
//调用setXXX(预设空clob)
o.getClass().getMethod("set"+getsetXXX,new Class[]{java.sql.Clob.class})
.invoke(o,new Object[]{Hibernate.createClob(" ")});
session.saveOrUpdate(o);
}
else
{
//调用清空原来的clob
o.getClass().getMethod("set"+getsetXXX,new Class[]{java.sql.Clob.class})
.invoke(o,new Object[]{Hibernate.createClob(" ")});
}
session.flush();
//锁表
session.refresh(o, LockMode.UPGRADE);
//得到oracle中的clob
java.sql.Clob clob= (java.sql.Clob) o.getClass().getMethod("get"+getsetXXX,null)
.invoke(o,null);
//hibernate3以后改了,Clob->CLOB需要SerializableClob
org.hibernate.lob.SerializableClob sb = (org.hibernate.lob.SerializableClob)clob;
java.sql.Clob wrapClob = sb.getWrappedClob();
// if(wrapClob instanceof oracle.sql.CLOB){
oracle.sql.CLOB clob2 = (oracle.sql.CLOB) wrapClob;
pw = clob2.getCharacterOutputStream();
/* }
else {
System.out.println("fdfdf"+wrapClob.getClass().getName());
pw = clob.setCharacterStream(0);
}*/
pw.write(data);
pw.close();
pw=null;
if(autoCommit)
tx.commit();
}
为什么连读取都有问题?
好像oracle10g直接映射String