Natural

           

          Oracle中插入Clob大字段時的處理

          最近一次開發中涉及clob字段的存儲。以前沒使用過,結果發現它不能像普通的varchar2、date等字段那樣存儲。上網查詢了一下,結果發現有些資料不太準確。最后找了個能用的解決。特此寫個demo與大家分享。(PS:測試時用的是Oracle9i)

          import java.io.Writer;
          import java.sql.Clob;
          import java.sql.Connection;
          import java.sql.PreparedStatement;
          import java.sql.ResultSet;
          import java.sql.Statement;

          import oracle.jdbc.driver.OracleResultSet;
          import oracle.sql.CLOB;

          public class Test {

              
          /**
               * 更新Clob字段
               * 
          @param sourceConn Connection 源數據庫的連接詞
               * 
          @param targetConn Connection 目標數據庫的連接詞
               
          */
              
          public void updateClob(Connection sourceConn, Connection targetConn)
              {
                  ResultSet rsSource 
          = null;
                  ResultSet oracleRS 
          = null;
                  Connection connTarget 
          = null;    // 目標數據庫的連接
                  Connection connSource = null;    // 源數據庫的連接
                  PreparedStatement psmtInsert = null;
                  PreparedStatement psmtSelect 
          = null;
                  Statement oracleStmt 
          = null;
                  
                  String sInsertSQL 
          = "INSERT INTO tableTarget(id,context) VALUES (?,empty_clob())";
                  String sSelectSQL 
          = "SELECT context FROM tableSource WHERE id = ? ";
                  String sID 
          = "1";
                  
                  connTarget 
          = targetConn; // 獲取數據庫連接
                  connSource = sourceConn; // 
                  
                  
          // 查詢源數據庫中表tableSource的clob字段context
                  psmtSelect = connSource.prepareStatement(sSelectSQL);
                  psmtSelect.setString(
          1, sID);
                  psmtSelect.executeQuery();
                  rsSource 
          = psmtSelect.getResultSet();
                  
                  
          // 將clob字段插入目標數據庫中的表tableTarget
                  psmtInsert = connTarget.prepareStatement(sInsertSQL);
                  connTarget.setAutoCommit(
          false);    // 設置為不即時提交,待會后面一起提交
                  psmtInsert.setString(1, sID);
                  psmtInsert.executeUpdate();
                  
                  
          // 更新CLOB字段
                  Clob clobSource = rsSource.getClob("context");    // 源數據庫的Clob字段
                  String sClob = clobSource.getSubString((long)1, (int)clobSource.length());
                  CLOB clobTarget 
          = null;            // 目標數據庫的字段
                  oracleStmt = connTarget.createStatement();
                  oracleRS 
          = oracleStmt.executeQuery("SELECT context FROM tableTarget  WHERE id = '"+sID+"'");
                  
                  
          // 寫入Clob字段
                  if(oracleRS.next() && sClob != null)
                  {
                      clobTarget 
          = ((OracleResultSet)oracleRS).getCLOB("context");
                      Writer writer 
          = clobTarget.getCharacterOutputStream() ;
                      writer.write(sClob);
                      writer.flush();
                      writer.close();
                      
                      connTarget.commit();    
          // 事務提交
                  }
              }
              
          }


          posted on 2009-10-20 10:13 此號已被刪 閱讀(2860) 評論(0)  編輯  收藏 所屬分類: Oracle


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(8)

          隨筆分類(83)

          隨筆檔案(78)

          文章檔案(2)

          相冊

          收藏夾(7)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 二连浩特市| 忻州市| 兴业县| 长泰县| 旅游| 马尔康县| 理塘县| 嘉黎县| 库车县| 凤翔县| 北川| 永寿县| 罗甸县| 固镇县| 康平县| 琼结县| 长乐市| 鸡泽县| 红河县| 响水县| 西吉县| 京山县| 开化县| 金阳县| 怀安县| 奉化市| 陆丰市| 大同市| 洛宁县| 砚山县| 太保市| 徐州市| 成武县| 永善县| 雷山县| 高唐县| 太康县| 黑龙江省| 修水县| 永城市| 涿鹿县|