java中对orcale的clob类型字段的增删改查

    我下面介绍下java中怎么实现对oracle数据库的clob字段增删改查的问题。我也本人也是首次接触那个类型,研究了一天,现在应该说是会用了,其实我看了别人的文章,实现同样的功能还有别的方法,这里我就不介绍了,因为我没有区试。我就介绍下我使用过的。经过了几天的测试没有发现什么错误。注意:标记了颜色的都是死的,没有什么“为什么”可言,就是要那么写,除非你用别的方法了   ^_^  。

 

 

import java.io.Reader;
import java.io.Writer;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.driver.OracleResultSet;
import oracle.sql.CLOB;

/**
 * 因为使用了oracle数据库,其中有个clob类型的字段操作相对困然。
 * 为此,这个类专门对大字段字符型的做操作,把大字符型数据保存到
 * text表中,其他表中使用了大字符串的地方,改成text表中内容相应
 * id。
 * @author Administrator
 *
 */
public class TextDao {
 private Connection conn;
 
 
 public TextDao(Connection conn) {
  this.conn=conn;
 }

 /**
  * 向text表中插入一条新的记录
  * @param context 插入的内容
  * @return 是否插入成功的,成功为true
  */
 public  int insertText(String context){
  if(context==null){
   return -1;
  }
  PreparedStatement stmt=null;
  ResultSet rs=null;
  CLOB clob=null;
  Writer write=null;
  if(conn==null){
   return -1;
  }
  int id=-1;
  try {
   String sql="insert into text (id,context) values(text_id.nextval,empty_clob())";
   conn.setAutoCommit(false);
   stmt=conn.prepareStatement(sql);
   stmt.executeUpdate();
   sql="select * from text where id=(select max(id) from text)";
   rs=stmt.executeQuery(sql);
   if(rs.next()){
    id=rs.getInt("id");
    clob=((OracleResultSet)rs).getCLOB("context");
    write=clob.getCharacterOutputStream();
    write.write(context);
    write.flush();
   }
   conn.commit();
   return id;
  } catch (Exception e) {
   e.printStackTrace();
  }
  finally{
   try {
    if(write!=null){
     write.close();
    }
    if(rs!=null){
     rs.close();
    }
    if(stmt!=null){
     stmt.close();
    }
    clob=null;//清空clob变量
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return -1;
 }

 /**
  * 查询由id指定的记录
  * @param id 指定的记录的id
  * @return 由id指定的内容
  */
 public  String selectText(int id){
  if(id<=0){
   return null;
  }
  PreparedStatement stmt=null;
  ResultSet rs=null;
  CLOB clob=null;
  Reader reader=null;
  if(conn==null){
   return null;
  }
  String context="";
  try {
   String sql="select * from text where id=?";
   conn.setAutoCommit(false);
   stmt=conn.prepareStatement(sql);
   stmt.setInt(1, id);
   rs=stmt.executeQuery();
   if(rs.next()){
    clob=((OracleResultSet)rs).getCLOB("context");
    reader=clob.getCharacterStream();
    char ch[]=new char[clob.getBufferSize()];
    while(reader.read(ch)!=-1){
     context+=String.valueOf(ch);
    }
   }
   conn.commit();
  } catch (Exception e) {
   e.printStackTrace();
  }finally{
   try {
    if(reader!=null){
     reader.close();
    }
    if(rs!=null){
     rs.close();
    }
    if(stmt!=null){
     stmt.close();
    }
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return context;
 }

 /**
  * 更新text表中由id指定的记录
  * @param id 需要被更新的记录的id
  * @param context 需要被更新的内容
  * @return 更新是否成功,成功为true
  */
 public  boolean updateText(int id,String context){
  if(id<=0){
   return false;
  }
  if(context==null){
   return false;
  }
  PreparedStatement stmt=null;
  ResultSet rs=null;
  CLOB clob=null;
  Writer write=null;
  if(conn==null){
   return false;
  }
  try {
   conn.setAutoCommit(false);
   String sql="update text set context=empty_clob() where id="+id;
   stmt=conn.prepareStatement(sql);
   stmt.executeUpdate();
   sql="select * from text where id="+id;
   rs=stmt.executeQuery(sql);
   if(rs.next()){
    clob=((OracleResultSet)rs).getCLOB("context");
    write = clob.getCharacterOutputStream();
    write.write(context);
    write.flush();
   }

   conn.commit();
   return true;
  } catch (Exception e) {
   e.printStackTrace();
  } 
  finally{
   try {
    if(rs!=null){
     rs.close();
    }
    if(stmt!=null){
     stmt.close();
    }
    if(write!=null){
     write.close();
    }
    clob=null;//清空clob变量
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return false;
 }
 
 /**
  * 删除text表中由id指定的记录
  * @param id 需要被删除的记录的id
  * @return 删除是否成功 删除成功为true
  */
 public  boolean deleteText(int id){
  if(id<=0){
   return false;
  }
  PreparedStatement stmt=null;
  if(conn==null){
   return false;
  }
  try {
   String sql="delete from text where id="+id;
   stmt=conn.prepareStatement(sql);
   int i=stmt.executeUpdate();
   if(i>0){
    return true;
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  finally{
   try {
    if(stmt!=null){
     stmt.close();
    }
    if(conn!=null){
     conn.commit();
     conn.close();
    }
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return false;
 }
 
 /**
  * 关闭数据库链接
  */
 public void close(){
  if(conn!=null){
   try {
    conn.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值