posts - 42,comments - 83,trackbacks - 0
                  很多情況下,在執(zhí)行數(shù)據(jù)添加、更新、查詢的時(shí)候,為了降低應(yīng)用服務(wù)器(比如weblogic)的負(fù)荷,我們可以將復(fù)雜的數(shù)據(jù)計(jì)算邏輯放在database端,這樣可以充分利用database的資源,提高數(shù)據(jù)計(jì)算速度。對于數(shù)據(jù)查詢,我們需要有返回值,那么這些帶有返回值的procedure在java上怎么調(diào)用呢?
          1:首先,我們創(chuàng)建一個(gè)簡單的數(shù)據(jù)表,
              create table address(addr varchar2(40));

          2:然后我們可以創(chuàng)建一個(gè)插入數(shù)據(jù)的過程(當(dāng)然也可以直接手工添加),如下,
              create or replace procedure addAddress(addr varchar2) as
              begin
                  insert into address values(addr);
              end addAddress;

          3: 接下來,我們先創(chuàng)建一個(gè)帶有In/Out的存儲過程,如下,
              create or replace procedure getAddr(inAddr in varchar2, outAddr out varchar2) as
              begin
                  select addr into outAddr from address where addr=inAddr;
              end getAddr;
          這個(gè)存儲過程可以在SQLPlus中以如下的方式調(diào)用,
              DECLARE
                     TMP varchar2(40);
              BEGIN
                     TMP:=1;
                     getAddr('test',TMP);
              END ;

          4:好了,數(shù)據(jù)庫的東西創(chuàng)建完了,我們現(xiàn)在來看看如何通過Java的CallableStatement去掉用這個(gè)過程呢? 代碼如下:
           1     public void procTest()
           2     {
           3         try{
           4             Connection conn = getConnection("t3://localhost:7001", NonXA_NotSupportGTX_10);
           5             System.out.println("connections are retrieved!");
           6             CallableStatement stmt = conn.prepareCall("call getAddr(?,?)");
           7             stmt.registerOutParameter(2,java.sql.Types.VARCHAR);
           8             stmt.setString(1"test");
           9             stmt.executeUpdate();
          10             String val = stmt.getString(2);
          11             System.out.println("val: " + val);
          12             conn.close();
          13         }catch(Exception e){
          14             e.printStackTrace();
          15         }
          16     }
              這個(gè)procedure有兩個(gè)bind varible,第一個(gè)是input參數(shù),第二個(gè)為返回值。調(diào)用這個(gè)過程前,我們首先需要將返回值在callable statement中register,即stmt.registerOutParameter(2,java.sql.Types.VARCHAR); 在執(zhí)行statement前,我們需要將input參數(shù)輸入,即stmt.setString(1"test"); callable statement執(zhí)行后,我們可以通過index來獲取返回值了,即String val = stmt.getString(2);

          posted on 2009-05-08 13:19 走走停停又三年 閱讀(1320) 評論(0)  編輯  收藏 所屬分類: Database
          主站蜘蛛池模板: 平遥县| 嘉义市| 赤壁市| 和硕县| 利辛县| 日喀则市| 平顶山市| 吉木乃县| 宜昌市| 陇南市| 冀州市| 万载县| 南陵县| 泰来县| 汝阳县| 五峰| 云龙县| 贡山| 新巴尔虎左旗| 正蓝旗| 仁化县| 合肥市| 河曲县| 惠东县| 阿图什市| 彭山县| 城市| 岳阳市| 西昌市| 太谷县| 宁国市| 五华县| 华亭县| 霸州市| 阜宁县| 平邑县| 盐亭县| 丹棱县| 元阳县| 定南县| 琼中|