国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

N Tier體系結構解決方案

2024-07-21 02:33:30
字體:
來源:轉載
供稿:網友

  企業級N Tier體系結構解決方案討論:NT+Oracle
  Oracle可以說是現在業界內最為常見也是最為成功的關系數據庫(DBMs)產品。說它成功,一是因為它的性能優越,二是它的平臺支持最為廣泛,三是它為常見的前臺開發工具提供了應用的接口。在這里,我還要談一個問題,那就是我在這篇討論方案的文章中,對于前臺的解決方法,只討論asp和jsp,為什么不討論現在很流行的php呢?因為我覺得,作為一種SCRipT語言,上述的三種方案沒有太大的差別,這里的差別主要是指功能上的差別,而不去關心性能上的微小差異。有人專門測試了幾種方案毫秒級的數值差異,我個人覺得這里的性能主要取決于第三層(數據庫)上的性能,這時的差異是我們可以深刻體會到的(笑)。其實更為重要的是每種解決方案所支持的元件模型。ASP支持ActiveX,而JSP支持javaBean,這兩種元件都有巨大的支持。例如標準的ASP不支持文件上傳的功能,我們就可以開發一個文件上傳的組件,同樣的情況在JSP中也能實現。PHP呢?可以是可以的,但需要做的工作就不僅僅是開發組件那么簡單了。所以前面的兩種方案明顯有很大的優勢。
  
  本篇討論的是使用ADO模型,通過ODBC的方法與Oracle相連,當然我們也可以使用Oracle使用的專用模型(OO4O),我們會在后面討論。既然使用的是ADO模型,所以我們可以很快的從前面的SQL Server中過渡過來。語法都是相同的,對象當然也是相同的。所以我就只需要指出不同的地方,和它非凡的地方就可以了。其實,我們更應該關注的兩種DBMs之間的差別,也正是DBMs之間的差別才造成了方案之間的差別。兩種DBMs都支持Standerd SQL,但它們又都各自擴展了標準SQL的功能,形成了自己獨特的SQL——SQL Server的Transaction SQL和Oracle的PL/SQL。它們都提供了例如StoredPRocedure、Trigger等等對象,這些也是我們要重點討論的地方。Oracle的PL/SQL在語法上更輕易理解。下面我來舉一個例子,這個例子若用常規的方法要使用多次的數據庫連接,很是麻煩,下面看問題的描述:
  
  這是一個修改密碼的例子,要求我們先輸入以前的密碼,只有在輸入與以前的密碼吻合時才更新新的密碼。程序有三個輸入,舊的密碼,新的密碼,以及確認的密碼。新密碼與確認密碼的吻合我們不用數據庫來驗證,但舊密碼是必須從數據庫中讀出的。用傳統的方法,起碼要用到兩個SQL語句,但寫成一個Oracle的Procedure就可以象下面所示的那樣。
  
  Create or Replace Procedure proc_pass_change
  
  ( member_id in varchar2,
  
  org_pass in varchar2,
  
  new_pass in varchar2,
  
  status out number ‘status是一個標志量,當為0時表示成功,1代表舊密碼不符,其它的值代表過程出錯。
  
   )is
  
  tmp_pass varchar2(20);
  
  begin
  
  select mem_pass into tmp_pass from personal_beadroll
  
  where mem_id=member_id;
  
  if tmp_pass=org_pass then
  
  update mem_pass=new_pass from personal_beadroll
  
  where mem_id=member_id;
  
  status:=0;
  
  else
  
  status:=1;
  
  end if;
  
  commit;
  
  exception
  
  when others then
  
  rollback;
  
  status:=2;
  
  raise;
  
  end;
  
  上面的這個Procedure中定義了一個中間的變量tmp_pass,使用這個中間變量來保存第一個Select into語句選出的數據庫中的舊有密碼,然后用它和用戶的輸入做比較,假如是正確的就執行更新的過程,否則返回一個用于判定的過程值。為什么要用Select into呢?這是因為在Procedure中不支持選出一個記錄集,而Select into其實是一個隱含的Cursor,所以我們還可以這樣來實現剛才的這個Procedure:
  
  Create or Replace Procedure proc_pass_change
  
  ( member_id in varchar2,
  
  org_pass in varchar2,
  
  new_pass in varchar2,
  
  status out number ‘status是一個標志量,當為0時表示成功,1代表舊密碼不符,其它的值代表過程出錯。

  
   )is
  
  Cursor csr_pass is
  
  Select mem_pass from personal_beadroll
  
  Where mem_id=member_id and mem_pass=org_pass;
  
  begin
  
  open csr_pass;
  
  if csr_pass%FOUND then
  
  update mem_pass=new_pass from personal_beadroll
  
  where mem_id=member_id;
  
  status:=0;
  
  else
  
  status:=1;
  
  end if;
  
  commit;
  
  close csr_pass;
  
  exception
  
  when others then
  
  rollback;
  
  status:=2;
  
  raise;
  
  end;
  
  它的實現思想是,首先我們產生一個密碼和ID都符合的記錄集,若這個記錄集存在的話,就證實了該用戶輸入的原始密碼有效,此時csr_pass%FOUND條件為真,于是我們就可以進行密碼的更新工作了。
  
  從上面的例子我們可以看到,當我們的事務是復雜的SQL語句時,我們使用Procedure的優越性是明顯的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长兴县| 榆中县| 宝兴县| 汉川市| 池州市| 旌德县| 鹤峰县| 芜湖市| 渭源县| 晋江市| 正阳县| 房产| 大姚县| 米易县| 疏附县| 盐津县| 鄱阳县| 台湾省| 阿尔山市| 福鼎市| 义马市| 平利县| 琼结县| 读书| 德昌县| 工布江达县| 黎川县| 晋江市| 尚志市| 嘉鱼县| 龙岩市| 阜新市| 凤山市| 嘉鱼县| 云阳县| 广西| 中宁县| 新龙县| 安仁县| 河间市| 河津市|