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

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

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

    開拓自己

    NeverDrop

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      0 隨筆 :: 14 文章 :: 0 評(píng)論 :: 0 Trackbacks
    本節(jié)例示一個(gè)不帶參數(shù)的簡單存儲(chǔ)過程。多數(shù)存儲(chǔ)過程的功能比本例復(fù)雜多了,但這里主要說明存儲(chǔ)過程的一些基本要點(diǎn)。如前面所述,不同DBMS定義存儲(chǔ)過程的語法是不同的。例如,有些DBMS使用begin . . . end或其他關(guān)鍵字指明存儲(chǔ)過程定義的開始和結(jié)束。在有些DBMS中,下面的SQL語句可創(chuàng)建一個(gè)存儲(chǔ)過程:

    create procedure SHOW_SUPPLIERS
    as
    select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME
    from SUPPLIERS, COFFEES
    where SUPPLIERS.SUP_ID = COFFEES.SUP_ID
    order by SUP_NAME
    

    下面的代碼將SQL語句放到一個(gè)字符串中,然后賦給變量createProcedure以備后用:

    String createProcedure = "create procedure SHOW_SUPPLIERS " +
    			 "as " +
    			 "select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME " +
    			 "from SUPPLIERS, COFFEES " +
    			 "where SUPPLIERS.SUP_ID = COFFEES.SUP_ID " +
    			 "order by SUP_NAME";
    

    下面的代碼段使用Connection對(duì)象con來創(chuàng)建Statement對(duì)象,用于把創(chuàng)建存儲(chǔ)過程的SQL語句發(fā)送給數(shù)據(jù)庫:

    Statement stmt = con.createStatement();
    stmt.executeUpdate(createProcedure);
    

    存儲(chǔ)過程SHOW_SUPPLIERS將作為一個(gè)可調(diào)用的數(shù)據(jù)庫對(duì)象在數(shù)據(jù)庫中編譯并存儲(chǔ),調(diào)用時(shí)就像調(diào)用其他方法一樣。

    從JDBC調(diào)用存儲(chǔ)過程

    JDBC允許在用Java編寫的程序中調(diào)用存儲(chǔ)過程。第一步是創(chuàng)建一個(gè)CallableStatement對(duì)象。就像Statement和PreparedStatement對(duì)象一樣,利用一個(gè)打開的Connection對(duì)象即可完成創(chuàng)建。CallableStatement對(duì)象包含了存儲(chǔ)過程的一個(gè)調(diào)用;但它不包含存儲(chǔ)過程本身。下面的第一行代碼使用連接con創(chuàng)建了存儲(chǔ)過程SHOW_SUPPLIERS的一個(gè)調(diào)用。花括號(hào)內(nèi)的那部分就是存儲(chǔ)過程的轉(zhuǎn)義語法。當(dāng)驅(qū)動(dòng)程序碰到“{call SHOW_SUPPLIERS}”時(shí),它將把這個(gè)轉(zhuǎn)義語法轉(zhuǎn)換成數(shù)據(jù)庫使用的本地SQL,以調(diào)用名為SHOW_SUPPLIERS的存儲(chǔ)過程。

    
    CallableStatement cs = con.prepareCall("{call SHOW_SUPPLIERS}");
    ResultSet rs = cs.executeQuery();
    

    執(zhí)行后結(jié)果集rs的內(nèi)容如下:

    SUP_NAME			COF_NAME
    ----------------		-----------------------
    Acme, Inc.			Colombian
    Acme, Inc.			Colombian_Decaf
    Superior Coffee			French_Roast
    Superior Coffee			French_Roast_Decaf
    The High Ground			Espresso
    

    注意,用于執(zhí)行cs的方法是executeQuery,因?yàn)閏s調(diào)用的存儲(chǔ)過程包含一個(gè)查詢,執(zhí)行后產(chǎn)生一個(gè)結(jié)果集。如果存儲(chǔ)過程包含一條更新或一條DLL語句,那就要使用executeUpdate方法。但有時(shí)一個(gè)存儲(chǔ)過程包含多條SQL語句,因而它產(chǎn)生的不只是一個(gè)結(jié)果集、不只是一個(gè)更新計(jì)數(shù)或產(chǎn)生一些結(jié)果集和更新計(jì)數(shù)的組合。這樣就有多個(gè)結(jié)果集,這時(shí)就應(yīng)該使用execute方法來執(zhí)行CallableStatement。

    CallableStatement類是PreparedStatement的子類,因此CallableStatement對(duì)象可與PreparedStatement對(duì)象一樣帶有輸入?yún)?shù)。此外,CallableStatement對(duì)象還可帶輸出參數(shù)或輸入/輸出參數(shù)。INOUT參數(shù)和execute方法很少使用。要獲取更詳細(xì)信息,請(qǐng)參考“使用Java進(jìn)行JDBC數(shù)據(jù)庫訪問”。

    posted on 2006-12-18 20:46 誠夏徠 閱讀(1695) 評(píng)論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产精品亚洲精品日韩已方| 亚洲AV日韩AV永久无码久久| 黄色网页在线免费观看| 久久精品国产亚洲香蕉| 最近2019中文字幕mv免费看| 一级人做人a爰免费视频 | 亚洲AV成人片色在线观看| 毛片基地免费观看| 国产在线观看无码免费视频| 亚洲一级高清在线中文字幕| 亚洲性久久久影院| 皇色在线视频免费网站| 美女被免费网站91色| 久久综合久久综合亚洲| 国产亚洲真人做受在线观看| 妞干网免费视频观看| 日韩电影免费在线观看中文字幕| 亚洲日本va一区二区三区| 国产AV无码专区亚洲AV毛网站| 午夜私人影院免费体验区| 无码国产精品一区二区免费16| 精品无码专区亚洲| 亚洲欧洲日本精品| 亚洲精品成人片在线观看精品字幕 | 亚洲国产精品专区| 亚洲人成网站在线播放vr| 午夜男人一级毛片免费| 免费A级毛片无码A∨| 久久久免费观成人影院| 亚洲国产精华液2020| 亚洲午夜一区二区电影院| 久久久久亚洲Av片无码v| JLZZJLZZ亚洲乱熟无码| 国产片免费福利片永久| 青青久在线视频免费观看 | 亚洲精品无码永久在线观看| 精品免费国产一区二区| 无码专区永久免费AV网站| 亚洲免费视频在线观看| 十八禁在线观看视频播放免费| 免费一级做a爰片久久毛片潮|