且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Oracle 如何处理CLOB字段

更新时间:2022-10-02 19:24:40

  1. 1.       必须保证在一个事务内处理:JDBC connection autocommit conn.setAutoCommit(false);

  2. 2.       插入记录用empty_clob()函数带入空CLOB字段:Insert into table with CLOB column as empty_clob();

  3. 3.       select把空CLOB对象查出,注意必须带for update子句来告知数据库接下来要修改该记录,否则SQL语句会返回错误告诉你没有for update子句:Select clob column with “for update” option like “select clob_field from clob_table where rowid=1 for update”;

  4. 4.       将返回的CLOB字段对象由JDKClob转换成Oracle 库的CLOB对象:Turn the return from java.sql.Clob to Oracle.sql.CLOB: 
    Clob clob = (Clob)rs.getClob("clob_field");
    oracle.sql.CLOB tmpclob = (oracle.sql.CLOB)clob;

  5. 5.  用字符串填充该CLOB对象:
  6.       BufferedWriter bw = new BufferedWriter(tmpclob.getCharacterOutputStream()); 
  7.       bw.write(clobClValueArray.get(i).toString()); 
  8.       bw.flush();
  9.       bw.close();

  1. 6.  用结构化语句对象PreparedStatement实现DML操作:
    PreparedStatement pstmt1 = conn.prepareStatement(“update clob_table set clob_field=? Where rowid=1”);
    pstmt1.setClob(1, tmpclob);
    pstmt1.execute();

  2. 7.  把事务提交实现CLOB字段操作。Commit the update: conn.commit();

  3. 8.读取CLOB内容也很简单: 
      PreparedStatement pstmt = conn.prepareStatement("select  clob_field from clob_table   where rowid=1");
       ResultSet rs = pstmt.executeQuery();
       Clob clob = (Clob)rs.getClob("clob_field");
       String str; 

        if(null != clob){

             str = clob.getSubString((long)1, clob.length());

    }

本文转自 dannyy1026 51CTO博客,原文链接:
http://blog.51cto.com/dannyyuan/550861