<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    重復容易,改變很難
    java,,,不錯的玩具
    posts - 21,  comments - 42,  trackbacks - 0

    當需要把插入多條數據的行為合并為一個事務時,可以考慮把一個list型數據作為參數傳入存儲過程,
    可以調用jdbc內部實現類來實現,這些類在classes12.zip(oracle 8,別的版本可能是其他名字的zip包)。
     如:
    (一)  需要將一個list傳入存儲過程。
     具體操作如下:
      1,建立數據庫對象來映射list數據類型。
       --定義一個與list中各元素的數據類型相同的數據庫對象
       CREATE TYPE AOBJECT AS OBJECT(
          aaaa          NUMBER(8),
          bbbb         NUMBER(8)
        )
       /
       --定義一個list數據庫對象
       CREATE TYPE ALIST AS VARRAY(100) OF AOBJECT
       /

      2,具體java代碼如下:
      import java.sql.CallableStatement;
      import java.sql.Connection;
      import java.sql.PreparedStatement;
      import java.util.ArrayList;
      
      /*
       * 以下就是classes12.zip中的實現類
      */
      import oracle.jdbc.driver.OracleCallableStatement;
      import oracle.sql.ARRAY;
      import oracle.sql.ArrayDescriptor;
      import oracle.sql.STRUCT;
      import oracle.sql.StructDescriptor; 
      
      .......
      
      public static long addRecords(ArrayList list) {
       Connection con = null;
       CallableStatement stmt = null;
       int backVal = 0;
       try {
        con = pool.getConnection();
        if (con != null) {
         ARRAY aArray = getArray(con, "AOBJECT","ALIST", list);//該函數調用的第二三個參數必須大寫
         stmt = con.prepareCall("{call produce1(?,?)}"); //調用某個存儲過程
         ((OracleCallableStatement) stmt).setARRAY(1, aArray);
         stmt.registerOutParameter(2, java.sql.Types.INTEGER);
         stmt.execute();
         backVal = stmt.getInt(2);
        }
       } catch (Exception e) {
        ....
       } finally {
        ....//釋放數據庫連接
       }
       return backVal;
      }

      private static ARRAY getArray(Connection con, String OracleObj,
       String Oraclelist, ArrayList objlist) throws Exception {
       ARRAY list = null;
       if (objlist != null && objlist.size() > 0) {
        StructDescriptor structdesc = new StructDescriptor(OracleObj, con);
        STRUCT[] structs = new STRUCT[objlist.size()];
        Object[] result = new Object[0];
        for (int i = 0; i < objlist.size(); i++) {
         result = new Object[2];//數組大小應和你定義的數據庫對象(AOBJECT)的屬性的個數
         result[0] = new Integer(..);  //將list中元素的數據傳入result數組
         result[1] = new Integer(..);  //
         
         structs[i] = new STRUCT(structdesc, con, result);
        }
        ArrayDescriptor desc = ArrayDescriptor.createDescriptor(Oraclelist,
          con);
        list = new ARRAY(desc, con, structs);
       } // if
       return list;
      } // function
      
    (二) 當需要傳入存儲過程的參數的集合類型的數據時,這個集合容器中的元素可能不需要一個類似結構體的類型,具有多個元素。
    而是一個基本類型的集合,可以采用oracle的數組的概念。
     1,建立數據庫對象來映射list數據類型。
       --定義一個list數據庫對象
       CREATE TYPE ALIST AS VARRAY(100) OF  NUMBER(12, 2);
       /
      2,具體java代碼如下:
      import java.sql.CallableStatement;
      import java.sql.Connection;
      import java.sql.PreparedStatement;
      import java.util.ArrayList;
      
      /*
       * 以下就是classes12.zip中的實現類
      */
      import oracle.jdbc.driver.OracleCallableStatement;
      import oracle.sql.ARRAY;
      import oracle.sql.ArrayDescriptor;
      import oracle.sql.STRUCT;
      import oracle.sql.StructDescriptor; 
      
      .......
      
      public static long addRecords(ArrayList list) {
       Connection con = null;
       CallableStatement stmt = null;
       int backVal = 0;
       try {
        con = pool.getConnection();
        if (con != null) {
          
          int elements[] = { 300, 400, 500, 600 };                // line 59
         ArrayDescriptor desc = ArrayDescriptor.createDescriptor("ALIST", conn);
         ARRAY aArray = new ARRAY(desc, conn, elements);

         stmt = con.prepareCall("{call produce1(?,?)}"); //調用某個存儲過程
         ((OracleCallableStatement) stmt).setARRAY(1, aArray);
         stmt.registerOutParameter(2, java.sql.Types.INTEGER);
         stmt.execute();
         backVal = stmt.getInt(2);
        }
       } catch (Exception e) {
        ....
       } finally {
        ....//釋放數據庫連接
       }
       return backVal;
      }


     




      
      相信看了以上代碼您就能知道如何調用oracle驅動程序的提供的類,給存儲過程傳入list數據類型。
      
      有疑問請給我留言!!

    posted on 2007-06-02 23:02 分享愛的空間 閱讀(2950) 評論(0)  編輯  收藏

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


    網站導航:
     

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(5)

    隨筆檔案

    文章檔案

    相冊

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一级特黄录像免费播放中文版| 亚洲国产精品日韩av不卡在线 | 无码AV动漫精品一区二区免费 | a级毛片黄免费a级毛片| 亚洲日本在线观看视频| rh男男车车的车车免费网站| 亚洲精品99久久久久中文字幕| 另类图片亚洲校园小说区| 免费h成人黄漫画嘿咻破解版| 美女露100%胸无遮挡免费观看| 吃奶摸下高潮60分钟免费视频| 污视频网站在线观看免费| ZZIJZZIJ亚洲日本少妇JIZJIZ| 亚欧洲精品在线视频免费观看| 亚洲日韩激情无码一区| 全免费a级毛片免费看| 亚洲国产日产无码精品| 全免费a级毛片免费看不卡| 无码免费又爽又高潮喷水的视频| 国产a v无码专区亚洲av| 日本视频在线观看永久免费| 亚洲永久中文字幕在线| 久久WWW免费人成人片| 免费国产a理论片| 国产成人综合亚洲AV第一页| 亚洲免费精彩视频在线观看| 亚洲国产精品免费观看| mm1313亚洲国产精品美女| 久9久9精品免费观看| 亚洲人成欧美中文字幕| 国产亚洲精aa成人网站| 亚洲一区二区三区免费在线观看| 亚洲欧洲av综合色无码| 国产∨亚洲V天堂无码久久久| 美女视频黄是免费的网址| 男人j进女人p免费视频| 亚洲精品在线电影| 亚洲精品麻豆av| 免费A级毛片无码无遮挡内射| 一级A毛片免费观看久久精品| 亚洲熟妇色自偷自拍另类|