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 此號已被刪 閱讀(2859) 評論(0)  編輯  收藏 所屬分類: Oracle


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


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(8)

          隨筆分類(83)

          隨筆檔案(78)

          文章檔案(2)

          相冊

          收藏夾(7)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 苍南县| 尚义县| 密云县| 桦川县| 浮山县| 巨野县| 清徐县| 澎湖县| 新平| 资中县| 尉氏县| 金坛市| 余干县| 临汾市| 五河县| 共和县| 沅陵县| 高平市| 丁青县| 临湘市| 台北市| 泸溪县| 梁河县| 赣州市| 广宁县| 石楼县| 伊春市| 隆安县| 梁平县| 定边县| 孟津县| 台北市| 明光市| 信丰县| 张掖市| 五莲县| 神农架林区| 黄石市| 郎溪县| 修武县| 东源县|