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

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

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

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

    當(dāng)需要把插入多條數(shù)據(jù)的行為合并為一個事務(wù)時,可以考慮把一個list型數(shù)據(jù)作為參數(shù)傳入存儲過程,
    可以調(diào)用jdbc內(nèi)部實現(xiàn)類來實現(xiàn),這些類在classes12.zip(oracle 8,別的版本可能是其他名字的zip包)。
     如:
    (一)  需要將一個list傳入存儲過程。
     具體操作如下:
      1,建立數(shù)據(jù)庫對象來映射list數(shù)據(jù)類型。
       --定義一個與list中各元素的數(shù)據(jù)類型相同的數(shù)據(jù)庫對象
       CREATE TYPE AOBJECT AS OBJECT(
          aaaa          NUMBER(8),
          bbbb         NUMBER(8)
        )
       /
       --定義一個list數(shù)據(jù)庫對象
       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中的實現(xiàn)類
      */
      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);//該函數(shù)調(diào)用的第二三個參數(shù)必須大寫
         stmt = con.prepareCall("{call produce1(?,?)}"); //調(diào)用某個存儲過程
         ((OracleCallableStatement) stmt).setARRAY(1, aArray);
         stmt.registerOutParameter(2, java.sql.Types.INTEGER);
         stmt.execute();
         backVal = stmt.getInt(2);
        }
       } catch (Exception e) {
        ....
       } finally {
        ....//釋放數(shù)據(jù)庫連接
       }
       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];//數(shù)組大小應(yīng)和你定義的數(shù)據(jù)庫對象(AOBJECT)的屬性的個數(shù)
         result[0] = new Integer(..);  //將list中元素的數(shù)據(jù)傳入result數(shù)組
         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
      
    (二) 當(dāng)需要傳入存儲過程的參數(shù)的集合類型的數(shù)據(jù)時,這個集合容器中的元素可能不需要一個類似結(jié)構(gòu)體的類型,具有多個元素。
    而是一個基本類型的集合,可以采用oracle的數(shù)組的概念。
     1,建立數(shù)據(jù)庫對象來映射list數(shù)據(jù)類型。
       --定義一個list數(shù)據(jù)庫對象
       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中的實現(xiàn)類
      */
      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(?,?)}"); //調(diào)用某個存儲過程
         ((OracleCallableStatement) stmt).setARRAY(1, aArray);
         stmt.registerOutParameter(2, java.sql.Types.INTEGER);
         stmt.execute();
         backVal = stmt.getInt(2);
        }
       } catch (Exception e) {
        ....
       } finally {
        ....//釋放數(shù)據(jù)庫連接
       }
       return backVal;
      }


     




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

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

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


    網(wǎng)站導(dǎo)航:
     

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

    常用鏈接

    留言簿(5)

    隨筆檔案

    文章檔案

    相冊

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: jjzz亚洲亚洲女人| 国产va精品免费观看| 国产一区二区三区在线免费| 亚洲人成77777在线观看网| 狠狠色香婷婷久久亚洲精品| 亚洲啪啪免费视频| 亚洲综合激情九月婷婷| 特级毛片A级毛片免费播放| 国产男女猛烈无遮挡免费视频| 亚洲一区爱区精品无码| 一级毛片在线免费播放| 久久久久亚洲AV无码专区网站| 在线免费观看亚洲| 91制片厂制作传媒免费版樱花| 亚洲精品无码专区久久同性男| 亚洲一区免费在线观看| 一个人看的www在线观看免费| 日本亚洲视频在线| 久久免费观看国产精品| 亚洲最新在线视频| 国产福利免费观看| 一区二区三区视频免费观看| 国产av无码专区亚洲av桃花庵| 亚洲色丰满少妇高潮18p| 男人的天堂亚洲一区二区三区 | 日本免费v片一二三区| 国产精品亚洲av色欲三区| 免费人成年轻人电影| 中文字幕看片在线a免费| 亚洲国产精品VA在线观看麻豆| 黄页网址大全免费观看12网站| 91成年人免费视频| 男人的天堂av亚洲一区2区| 国产a v无码专区亚洲av| 久久精品国产这里是免费| 波多野结衣亚洲一级| 亚洲精品第一国产综合精品99| 久久亚洲中文字幕无码| 欧洲亚洲国产清在高| 在线观看免费人成视频色9| 亚洲欧洲国产综合|