项目中遇到要对Oralce数据库的CLOB字段进行处理的问题,即实现对CLOB值的插入,更新,查询。 Clob的的操作一般有三种方法:1。JDBC的方法。2:把clob当作String来处理。3.直接使用Clob。这里我介绍的是第三种方法。使用 Hibernate3 来管理数据库的连接session。
这里用第三种方法。
1.在实体类里 定义一个CLOB 类型 和一个对它辅助用的字符串类型属性。如下:
private Clob clobnewscontent;
private String newscontent;
对应的映射文件由于newscontent只是辅助作用在数据库表里没有对应的列。所以不用配置。clobnewscontent属性配置如下:
<property name="clobnewscontent" type="clob" update="true" insert="true" >
<column name="NEWSCONTENT" />
</property>
newscontent用于接收页面传来的字符串信息。
下面说具体写入数据处理
插入: Session session= null;
Transaction tx =null;
try{
session =this.getHibernateTemplate().getSessionFactory().openSession();
news.setClobnewscontent(Hibernate.createClob(" "));
tx=session.beginTransaction();
session.save(news);
session.flush();
session.refresh(news, LockMode.UPGRADE);
org.hibernate.lob.SerializableClob cb = (org.hibernate.lob.SerializableClob)news.getClobnewscontent();
java.sql.Clob wrapClob = (java.sql.Clob) cb.getWrappedClob();
if(wrapClob instanceof oracle.sql.CLOB){
oracle.sql.CLOB clob = (oracle.sql.CLOB) wrapClob;
java.io.Writer writer = clob.getCharacterOutputStream();
String contentStr = news.getNewscontent();
writer.write(news.getNewscontent());
writer.close();
}
tx.commit();
session.close();
读取查询:
News news = new News();
news = newsDao.findNewsByID(id);
Clob clob = news.getClobnewscontent();
String contentStr = "";
if(clob != null)
contentStr = clob.getSubString(1, (int)clob.length());
news.setNewscontent(contentStr);
//news.setNewscontent(HtmlUtils.htmlUnescape(news.getNewscontent()));
return news;
修改:Session session= null;
Transaction tx =null;
try{
session =this.getHibernateTemplate().getSessionFactory().openSession();
news.setClobnewscontent(Hibernate.createClob(" "));
tx=session.beginTransaction();
session.saveOrUpdate(news);
session.flush();
session.refresh(news, LockMode.UPGRADE);
org.hibernate.lob.SerializableClob cb = (org.hibernate.lob.SerializableClob)news.getClobnewscontent();
java.sql.Clob wrapClob = (java.sql.Clob) cb.getWrappedClob();
if(wrapClob instanceof oracle.sql.CLOB){
oracle.sql.CLOB clob = (oracle.sql.CLOB) wrapClob;
java.io.Writer writer = clob.getCharacterOutputStream();
writer.write(news.getNewscontent());
writer.close();
}
tx.commit();
session.close();
这里用第三种方法。
1.在实体类里 定义一个CLOB 类型 和一个对它辅助用的字符串类型属性。如下:
private Clob clobnewscontent;
private String newscontent;
对应的映射文件由于newscontent只是辅助作用在数据库表里没有对应的列。所以不用配置。clobnewscontent属性配置如下:
<property name="clobnewscontent" type="clob" update="true" insert="true" >
<column name="NEWSCONTENT" />
</property>
newscontent用于接收页面传来的字符串信息。
下面说具体写入数据处理
插入: Session session= null;
Transaction tx =null;
try{
session =this.getHibernateTemplate().getSessionFactory().openSession();
news.setClobnewscontent(Hibernate.createClob(" "));
tx=session.beginTransaction();
session.save(news);
session.flush();
session.refresh(news, LockMode.UPGRADE);
org.hibernate.lob.SerializableClob cb = (org.hibernate.lob.SerializableClob)news.getClobnewscontent();
java.sql.Clob wrapClob = (java.sql.Clob) cb.getWrappedClob();
if(wrapClob instanceof oracle.sql.CLOB){
oracle.sql.CLOB clob = (oracle.sql.CLOB) wrapClob;
java.io.Writer writer = clob.getCharacterOutputStream();
String contentStr = news.getNewscontent();
writer.write(news.getNewscontent());
writer.close();
}
tx.commit();
session.close();
读取查询:
News news = new News();
news = newsDao.findNewsByID(id);
Clob clob = news.getClobnewscontent();
String contentStr = "";
if(clob != null)
contentStr = clob.getSubString(1, (int)clob.length());
news.setNewscontent(contentStr);
//news.setNewscontent(HtmlUtils.htmlUnescape(news.getNewscontent()));
return news;
修改:Session session= null;
Transaction tx =null;
try{
session =this.getHibernateTemplate().getSessionFactory().openSession();
news.setClobnewscontent(Hibernate.createClob(" "));
tx=session.beginTransaction();
session.saveOrUpdate(news);
session.flush();
session.refresh(news, LockMode.UPGRADE);
org.hibernate.lob.SerializableClob cb = (org.hibernate.lob.SerializableClob)news.getClobnewscontent();
java.sql.Clob wrapClob = (java.sql.Clob) cb.getWrappedClob();
if(wrapClob instanceof oracle.sql.CLOB){
oracle.sql.CLOB clob = (oracle.sql.CLOB) wrapClob;
java.io.Writer writer = clob.getCharacterOutputStream();
writer.write(news.getNewscontent());
writer.close();
}
tx.commit();
session.close();