用Hibernate操作Oracle Clob字段(转)
1.在HBM里对应CLOB型的字段为:java.sql.Clob,用MyEclipse DataExplorer生成后手动改一下即可,当然POJO也一样啊,如:
POJO:
import java.sql.Clob;
public class test {
private Clob content;

}
2.首先要给Clob里写一个值,如:注意看一下有底色的地方就明白了吧
package com.chinacars.filterdata.modidata;

import java.lang.reflect.InvocationTargetException;
import java.sql.Clob;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Hibernate;

import com.chinacars.filterdata.beans.TblWapNews1;
import com.chinacars.filterdata.beans.TblWapNews2;
import com.chinacars.filterdata.dao.WapNews1DAO;
import com.chinacars.filterdata.dao.WapNews2DAO;
import com.chinacars.filterdata.util.StringProcess;

public class ModiData2 {
private static final Log logger = LogFactory.getLog(ModiData2.class);

public static void main(String[] args) {

WapNews1DAO wapNews1DAO = new WapNews1DAO();
WapNews2DAO wapNews2DAO = new WapNews2DAO();

TblWapNews1 news1 = new TblWapNews1();
TblWapNews2 news2 = new TblWapNews2();

List list = wapNews1DAO.getWapNews();
Clob contentClob = null;
String cStr = "1";
String title;
for (int i = 0; i < list.size(); i++) {
logger.info("============The number : " + i);
news1 = (TblWapNews1) list.get(i);
contentClob = news1.getContent();
try {
PropertyUtils.copyProperties(news2, news1);
} catch (IllegalAccessException e) {
logger.error(e);
e.printStackTrace();
} catch (InvocationTargetException e) {
logger.error(e);
e.printStackTrace();
} catch (NoSuchMethodException e) {
logger.error(e);
e.printStackTrace();
}
title = news1.getTitle();
if(title != null) {
title = title.replaceAll("?", "");
news2.setTitle(title);
}
news2.setContent(Hibernate.createClob(cStr));
try {
wapNews2DAO.saveWapNews(news2, StringProcess
.delInvalidChar(contentClob.getSubString(1,
(int) contentClob.length())));
} catch (SQLException e) {
logger.error(e);
e.printStackTrace();
}
}

}

}
3.开始写入这内容,最主要的是这里,我在这里卡了好久……
主是下面红色的部分,其它的有色部分都能搜到:看下面的代码吧:^_^
package com.chinacars.filterdata.dao;

import java.io.Writer;
import java.sql.Clob;

import oracle.sql.CLOB;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.lob.SerializableClob;

import com.chinacars.filterdata.beans.TblWapNews2;

public class WapNews2DAO {
private static final Log logger = LogFactory.getLog(WapNews2DAO.class);

private Session oraSession;

private Transaction tx;

public boolean saveWapNews(TblWapNews2 news, String content) {
try {
oraSession = SessionFactory.currentORASession();
tx = oraSession.beginTransaction();
oraSession.save(news);
oraSession.flush();
oraSession.refresh(news, LockMode.UPGRADE);
SerializableClob clob = (SerializableClob) news.getContent();
Clob jClob = clob.getWrappedClob();
CLOB oClob = (CLOB)jClob;
Writer wt = oClob.getCharacterOutputStream();
//byte[] bData = content.getBytes();
wt.write(content);
wt.close();
oraSession.flush();
tx.commit();
logger.info("=================== INSERT OK ");
} catch (Exception e) {
if (tx != null)
tx.rollback();
logger.info("=================== NOT INSERT ");
logger.info(e);
e.printStackTrace();
} finally {
oraSession.close();
}
return true;
}

}
HBM:
<hibernate-mapping>
<class name="com.chinacars.filterdata.beans.TblWapNews2" table="TBL_WAP_NEWS2">
<id name="id" type="java.lang.Long">
<column name="ID" precision="22" scale="0" />
</id>
<property name="content" type="java.sql.Clob">
<column name="CONTENT" />
</property>

</class>
</hibernate-mapping>

<hibernate-mapping>









</hibernate-mapping>








2.首先要给Clob里写一个值,如:注意看一下有底色的地方就明白了吧







































































主是下面红色的部分,其它的有色部分都能搜到:看下面的代码吧:^_^
























































【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!