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

首頁 > 開發 > 綜合 > 正文

PowerBuilder應用開發系列講座(1)

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

powerbuilder應用開發系列講座(1)
張健姿

  在數據庫中,所謂事務是指一組邏輯操作單元,使數據從一種狀態變換到另一種狀態。為確保數據庫中數據的一致性,數據的操縱應當是離散的成組的邏輯單元:當它全部完成時,數據的一致性可以保持,而當這個單元中的一部分操作失敗,整個事務應全部視為錯誤,所有從起始點以后的操作應全部回退到開始狀態。

   對事務的操作是這樣進行的:先定義開始一個事務,然后對數據作修改操作,這時如 果提交(commit),這些修改就永久地保存下來,如果回退(rollback),數據庫管理系統將放棄 您所作的所有修改而回到開始事務時的狀態。此外有些數據庫支持事務的“存儲點(savepoint)”這一概念:即在一個事務進程中任意一點您都可以進行當前狀態的存儲,回退時只是回到你所設定 的存儲點,而不必退回全部的事務。如果您的事務可以分成幾組對數據庫的修改,那就可以設置 多個存儲點,根據需要您可以回退到任意一個存儲點,而不使所有事務的修改數據全部丟失。

  正確地管理事務可以保證數據的完整性,當您所做的工作全部完成和得到確認之前,沒有任何數據物理地寫進數據庫。讓我們來看這樣一個實例,我們有這樣一個銀行應用系統,前臺使用者作出將儲戶甲的一百元存款劃歸儲戶乙帳下的操作;在后臺的數據庫中,這兩個客戶的記錄分儲在兩張表中,當使用者在屏幕上作出如上操作時,在后臺需要對兩張表進行修改。如果在數據庫中對甲用戶存款余款作減去一百元修改后,對乙用戶加一百元的操作修改卻失敗時,前一張表也必須回到修改前的狀態,否則數據庫的內容不統一,甲儲戶白白損失一百元,信息必然是不正確的。因此進行事務管理是必須的。

  傳統地,我們認為一個事務包括了對一個或多個表的修改,而隨著分布式數據庫和數據倉庫的發展,事務可能包括了對一個或多個數據庫的修改。在上例中甲乙兩用戶就可能是異地用戶,信息分儲在不同地域的不同數據庫中,上述的一個事務就涉及到了對不同數據庫的操作。

powerbuilder中的事務管理
  作為數據庫的前臺開發工具power-builder支持事務管理的操作。在power-builder中有一種稱作事務(transaction)的對象,這個對象是powerbuilder應用與數據庫的通訊區域。powerbuilder在應用開始時建立一個全局的事務對象sqlca。由于大多數的應用只用到一個數據庫,所以一般開發者主要也只用sqlca作為與唯一數據庫連接的事務對象。

  powerscript中常用的事務管理的語句有四個:commit,rollback,connect,disconnect。

  當您需要應用與數據庫建立連接時使用connect這一操作命令,取消連接時執行disconnect,這兩個命令一般分別用在應用的開始和結束,也就是appli-cation的open和close事件中。

  當一個事務的數據庫修改都成功地完成后,修改須提交給數據庫,com-mit語句是一個舊事務結束和一個新事務開始的界線。在修改被提交前,數據庫的數據并沒有被真正地修改,這些修改被保留在某個工作區,只有作修改的用戶才能看到這些被修改后的值,提交之后,則所有的用戶就都可以看到新值了。

  在事務的進程中發生某些錯誤,或者在操作中出于種種原因打算中止事務,須用rollback命令回退事務,如果已作的操作不用rollback命令取消,這些操作必將錯誤地作為下一個事務的一部分而導致數據庫的混亂。

  如果您使用的是多窗口的應用,卻只用一個事務對象,就應格外注意roll-back和commit會影響事務的邏輯一致性。在某個窗口執行的這兩個指令會使其他窗口應用中所進行到一半的工作提交或回退。

  在多用戶系統中,修改和提交的時間越接近,提交成功的可能性就越高。因為一個事務中所有的sql語句全部執行成功而提交卻失敗是完全可能發生的,例如在您的事務過程中,另一個用戶修改了數據并提交,這很可能使您作出的修改無效,這時commit將失敗,您必須回退這一事務的全部。

事務對象的autocommit屬性
  事務對象有一個autocom-mit的屬性可以使開發者簡化對事務管理的操作,這一布爾型的屬性可以用true或false來對其賦值。當其為真時,powerbuilder不通過其他額外的交互就將您的sql語句傳輸給后臺數據庫,而且執行完畢自動提交。

  當然,您可以設置autocommit屬性為假(缺省值),使用commit或rollback這樣的關鍵詞提交或回退事務。在大多數應用中,一部分的數據庫操作是要成組提交的,而另一些則不用。因此我們可以利用autocommit的特性來確定事務的起點,當我們把autocommit的屬性設為false時,系統設定此時為事務的起點。當autocommit設為真時,系統自動消取這一事務。因此你可以先把autocommit設為真,當您需要開始一個事務時,將其置為false,此刻即為事務起始點。

  powerbuilder內部這種事務管理的最大優點是方便。您不去考慮整個事務,而只需把您所作的修改提交或滾回即可。但是方便與可控性總是矛盾的,在power-builder中沒有存儲點和嵌套事務管理的機制,即使您所使用的數據庫支持這些特性,在powerbuilder中卻無法得以體現。不過在普通的應用中,存儲點和嵌套事務管理并不是必須的,一般的事務管理足以夠用。

用數據庫的事務管理指令實現完全控制
  上述的事務管理方式盡管簡單方便,但是在某些應用中,我們也的確需要利用所用的數據庫系統的嵌套事務和存儲點的特性,而powerbuilder內部的事務管理沒有提供這樣的功能,您必須自己設計。

  自己進行事務管理的方式是直接使用數據庫本身的事務指令。當您使用自己的管理方式時,就應使power-builder停止管理事務,即設置auto-commit為true,系統內部就不會自動建構事務處理的命令了。實現人工事務管理的方式是采用executeimmedi ate這條powerbuilder指令來執行任意的數據庫操作。你所需做的是將數據庫指令編輯成一個字符串,您可以執行任何的數據定義語句如建表、建主鍵、存儲過程等,例如您可以用 execute immediate begin transaction trans-name。這樣的指令開始一個事務。采用這種方法,只要您所用的數據庫支持嵌套事務和存儲點等事務管理,我們通過powerbuilder開發出的應用也就同樣可以實現。

  在powerbuilder中提供的事務管理的方法是多種多樣的,只要您靈活運用,就一定能設計出優秀的數據庫應用來。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴塘县| 股票| 轮台县| 察隅县| 民丰县| 呼图壁县| 临城县| 广丰县| 宿松县| 航空| 柯坪县| 佛学| 谷城县| 安达市| 黎城县| 依兰县| 河源市| 波密县| 嘉黎县| 靖宇县| 阿勒泰市| 台中市| 永年县| 抚松县| 抚松县| 仪征市| 西平县| 遂川县| 丹东市| 海城市| 新源县| 榆林市| 瑞安市| 大关县| 瑞金市| 阳朔县| 城固县| 夹江县| 常熟市| 桑日县| 丰台区|