計算機軟件及應(yīng)用數(shù)據(jù)庫原理數(shù)據(jù)庫高級開發(fā)技術(shù)_第1頁
計算機軟件及應(yīng)用數(shù)據(jù)庫原理數(shù)據(jù)庫高級開發(fā)技術(shù)_第2頁
計算機軟件及應(yīng)用數(shù)據(jù)庫原理數(shù)據(jù)庫高級開發(fā)技術(shù)_第3頁
計算機軟件及應(yīng)用數(shù)據(jù)庫原理數(shù)據(jù)庫高級開發(fā)技術(shù)_第4頁
計算機軟件及應(yīng)用數(shù)據(jù)庫原理數(shù)據(jù)庫高級開發(fā)技術(shù)_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

ClicktoaddTitle1游標(biāo)1ClicktoaddTitle2存儲過程2ClicktoaddTitle2觸發(fā)器3本章內(nèi)容ClicktoaddTitle1函數(shù)4ClicktoaddTitle1嵌入式SQL5ClicktoaddTitle2數(shù)據(jù)庫連接6ClicktoaddTitle2

XML數(shù)據(jù)庫7

在數(shù)據(jù)庫中,游標(biāo)是一個十分重要的概念。關(guān)系數(shù)據(jù)庫管理系統(tǒng)實質(zhì)是面向集合的,在關(guān)系數(shù)據(jù)庫中并沒有一種描述表中單一記錄的表達形式,除非使用where子句來限制只有一條記錄被選中。因此我們必須借助于游標(biāo)來進行面向單條記錄的數(shù)據(jù)處理。游標(biāo)是DBMS為用戶開設(shè)的一個數(shù)據(jù)緩沖區(qū),用于存放SQL語句的執(zhí)行結(jié)果。游標(biāo)實際上是一種能從包括多條數(shù)據(jù)記錄的結(jié)果集中每次提取一條記錄的機制。游標(biāo)總是與一條SQL選擇語句(Select)相關(guān)聯(lián)。因為游標(biāo)由結(jié)果集(可以是零條、一條或由相關(guān)的選擇語句檢索出的多條記錄)和結(jié)果集中指向特定記錄的游標(biāo)位置組成。游標(biāo)概述

每一個游標(biāo)必須有四個組成部分(1)聲明(DECLARE)游標(biāo);(2)打開(OPEN)游標(biāo);(3)從一個游標(biāo)中逐條獲取(FETCH)并處理記錄信息;(4)關(guān)閉(CLOSE)或釋放(DEALLOCATE)游標(biāo)。游標(biāo)游標(biāo)操作

將RecipeDetail中的處方編號為“1284041”所包含的藥品信息聲明為MedicineList游標(biāo)。DECLAREMedicineListCURSORFORSELECTM.Mno,D.Mamount,M.Mname,M.Mprice,M.Munit,M.MtypeFROMRecipeDetailDLEFTJOINMedicineMOND.Mno=M.MnoWHERED.Rno='1284041'游標(biāo)聲明游標(biāo)

DECLARE@MnoVARCHAR(50);DECLARE@MnameVARCHAR(50);DECLARE@MtypeVARCHAR(50);DECLARE@MunitVARCHAR(50);DECLARE@MamountINTEGER;DECLARE@MpriceDECIMAL(8,2);DECLAREMedicineListCURSORFOR SELECTM.Mno,D.Mamount,M.Mname,M.Mprice,M.Munit,M.Mtype FROMRecipeDetailDLEFTJOINMedicineMOND.Mno=M.Mno WHERED.Rno='1284041';OPENMedicineList;FETCHNEXTFROMMedicineListINTO@Mno,@Mamount,@Mname,@Mprice,@Munit,@Mtype;WHILE(@@Fetch_Status=0) BEGIN PRINT'編號:'+@Mno+';數(shù)量:'+LTRIM(STR(@Mamount))+‘名稱:’+@Mname;

FETCHNEXTFROMMedicineListINTO@Mno,@Mamount,@Mname,@Mprice@Mtype; ENDCLOSEMedicineList;DEALLOCATEMedicineList;游標(biāo)游標(biāo)示例ClicktoaddTitle1游標(biāo)1ClicktoaddTitle2存儲過程2ClicktoaddTitle2觸發(fā)器3本章內(nèi)容ClicktoaddTitle1函數(shù)4ClicktoaddTitle1嵌入式SQL5ClicktoaddTitle2數(shù)據(jù)庫連接6ClicktoaddTitle2

XML數(shù)據(jù)庫7

存儲過程是一組已被編輯在一起的,存儲在服務(wù)器上的執(zhí)行某種功能的預(yù)編譯SQL語句。它是一種封裝重復(fù)任務(wù)操作的方法,支持用戶提供的參數(shù)變量,具有強大的編程能力。存儲過程具有許多優(yōu)點:加快程序的執(zhí)行速度減少網(wǎng)絡(luò)的數(shù)據(jù)流量提供了一種安全機制允許程序模塊化設(shè)計提高編程的靈活性存儲過程概述

系統(tǒng)存儲過程。以sp_開頭,用來進行系統(tǒng)的各項設(shè)定、取得信息和相關(guān)管理工作。本地存儲過程。用戶創(chuàng)建的存儲過程是由用戶創(chuàng)建并完成某一特定功能的存儲過程,事實上一般所說的存儲過程就是指本地存儲過程。臨時存儲過程。臨時存儲過程分為兩種存儲過程:一是本地臨時存儲過程,以井字號(#)作為其名稱的第一個字符,只有創(chuàng)建它的用戶才能執(zhí)行它;二是全局臨時存儲過程,以兩個井字號(##)號開始,任意用戶都可以執(zhí)行。遠程存儲過程。位于遠程服務(wù)器上的存儲過程,使用分布式查詢和EXECUTE命令執(zhí)行。擴展存儲過程。擴展存儲過程是用戶可以使用外部程序語言編寫的存儲過程,而且擴展存儲過程的名稱通常以xp_開頭。存儲過程SQLServer過程類型

重命名存儲過程ALTERPROCEDURE舊過程名稱RENAMETO新過程名稱;執(zhí)行存儲過程CALL/PERFORM/EXECUTEPROCEDURE過程名([參數(shù)1,參數(shù)2,…]);刪除存儲過程DROPPROCEDURE過程名();存儲過程操作

利用存儲過程計算患者支付處方中藥品的總金額。CREATEPROCEDUREprocPaymentSum @RecipeNoVARCHAR(10), @PaymentSumDECIMAL(18,2)OUTPUTAS SELECT@PaymentSum=SUM(Mamount*Mprice) FROMRecipeMasterRMLEFTJOINRecipeDetailRDONRM.Rno=RD.Rno INNERJOINMedicineMONM.Mno=RD.Mno WHERERM.Rno=@RecipeNO存儲過程操作

利用存儲過程計算患者支付處方中藥品的總金額。CREATEPROCEDUREprocPaymentSum @RecipeNoVARCHAR(10), @PaymentSumDECIMAL(18,2)OUTPUTAS SELECT@PaymentSum=SUM(Mamount*Mprice) FROMRecipeMasterRMLEFTJOINRecipeDetailRDONRM.Rno=RD.Rno INNERJOINMedicineMONM.Mno=RD.Mno WHERERM.Rno=@RecipeNO執(zhí)行存儲過程DECLARE@FeeSumDECIMAL(18,2);EXECUTEprocPaymentSum'1282317',@FeeSumOUTPUT;PRINT@FeeSum;存儲過程操作示例

在存儲過程中利用游標(biāo)計算患者支付處方中藥品的總金額。其中要求對藥品類型為“中藥”的藥品按照價格的90%計算。CREATEPROCEDUREprocPaymentSumCursor @RecipeNoVARCHAR(10), @PaymentSumDECIMAL(18,2)OUTPUTASDECLARE@amountINTEGER;DECLARE@priceDECIMAL(8,2);DECLARE@mtypeVARCHAR(10);DECLAREMedicineListCURSORFORSELECTRD.Mamount,M.Mprice,M.MtypeFROMRecipeMasterRMLEFTJOINRecipeDetailRDONRM.Rno=RD.RnoINNERJOINMedicineMONM.Mno=RD.MnoWHERERM.Rno=@RecipeNO;OPENMedicineList;SET@PaymentSum=0;FETCHNEXTFROMMedicineListINTO@amount,@price,@mtype;WHILE(@@fetch_status=0) BEGINIF@mtype='中藥'SET@price=@price*0.9;SET@PaymentSum=@PaymentSum+@amount*@price;FETCHNEXTFROMMedicineListINTO@amount,@price,@mtype; ENDCLOSEMedicineList;DEALLOCATEMedicineList;存儲過程存儲過程+游標(biāo)ClicktoaddTitle1游標(biāo)1ClicktoaddTitle2存儲過程2ClicktoaddTitle2觸發(fā)器3本章內(nèi)容ClicktoaddTitle1函數(shù)4ClicktoaddTitle1嵌入式SQL5ClicktoaddTitle2數(shù)據(jù)庫連接6ClicktoaddTitle2

XML數(shù)據(jù)庫7

從本質(zhì)上看,觸發(fā)器是一種特殊的存儲過程。觸發(fā)器主要是通過事件進行觸發(fā)而被執(zhí)行的,而存儲過程可以通過存儲過程名字而被直接調(diào)用。當(dāng)使用INSERT,DELETE,UPDATE命令對觸發(fā)器所保護的數(shù)據(jù)進行修改時,觸發(fā)器能夠被自動激活,從而確保對數(shù)據(jù)的處理必須符合由這些SQL語句所定義的規(guī)則。除了能夠完成復(fù)雜的完整性約束以外,還可以在主動數(shù)據(jù)庫(ActiveDatabase)的應(yīng)用中對不同的外部事件做出及時反應(yīng)。觸發(fā)器雖然不是SQL-92標(biāo)準(zhǔn)的一部分,但已經(jīng)納入SQL:1999標(biāo)準(zhǔn)。很多數(shù)據(jù)庫廠商在他們的產(chǎn)品中都已經(jīng)包含對觸發(fā)器的支持。觸發(fā)器概述

觸發(fā)器(Trigger)是數(shù)據(jù)庫模式的一個元素。它是一個能由系統(tǒng)自動執(zhí)行對數(shù)據(jù)庫修改的語句一個觸發(fā)器由3部分組成:事件。事件是指對數(shù)據(jù)庫的插入、刪除、修改等操作。觸發(fā)器在這些事件開始發(fā)生時將開始工作。條件。觸發(fā)器將測試條件是否成立。如果條件成立,就執(zhí)行相應(yīng)動作,否則什么也不做。動作。如果觸發(fā)器測試滿足預(yù)定的條件,那么就由DBMS執(zhí)行這些動作,即對數(shù)據(jù)庫的操作。觸發(fā)器性能通常比較低。當(dāng)運行觸發(fā)器時,系統(tǒng)處理的大部分時間花費在參照其它表的這一處理上,觸發(fā)器所參照的其它表的位置決定了操作要花費的時間長短。觸發(fā)器概述

創(chuàng)建觸發(fā)器CREATETRIGGER<觸發(fā)器名稱>{BEFORE|AFTER}<觸發(fā)事件>ON<表名>FOREACH{ROW|STATEMENT}[WHEN<觸發(fā)條件>]<觸發(fā)動作體>刪除觸發(fā)器DROPTRIGGER<觸發(fā)器名稱>ON<表名>觸發(fā)器操作

定義BEFORE行級觸發(fā)器

CREATETRIGGERUPDATE_SALBEFOREINSERTORUPDATEOFSal,PosONTeacherFOREACHROWASBEGINIF(new.sal<800)AND(new.Pos=‘教授’)THENnew.Sal=800;ENDIF;END;觸發(fā)器示例ClicktoaddTitle1游標(biāo)1ClicktoaddTitle2存儲過程2ClicktoaddTitle2觸發(fā)器3本章內(nèi)容ClicktoaddTitle1函數(shù)4ClicktoaddTitle1嵌入式SQL5ClicktoaddTitle2數(shù)據(jù)庫連接6ClicktoaddTitle2

XML數(shù)據(jù)庫7

函數(shù)是由一個或多個SQL語句組成的子程序,可用于封裝代碼以便重新使用。與編程語言中的函數(shù)類似,數(shù)據(jù)庫中用戶定義函數(shù)是接受參數(shù)、執(zhí)行操作(例如復(fù)雜計算)并將操作結(jié)果以值的形式返回的例程。返回值可以是單個標(biāo)量值或結(jié)果集。用戶定義函數(shù)可以嵌套,嵌套級別最多可達32級。函數(shù)概述

使用用戶定義函數(shù)有以下優(yōu)點:(1)允許模塊化程序設(shè)計。(2)只需創(chuàng)建一次函數(shù)并將其存儲在數(shù)據(jù)庫中,以后便可以在程序中調(diào)用任意次。用戶定義的函數(shù)可以獨立于程序源代碼進行修改。(3)執(zhí)行速度更快。與存儲過程相似,用戶定義函數(shù)通過緩存計劃并在重復(fù)執(zhí)行時重用它來降低SQL代碼的編譯開銷。這意味著每次使用用戶定義函數(shù)時均無需重新解析和重新優(yōu)化,從而縮短了執(zhí)行時間。(4)減少網(wǎng)絡(luò)流量?;谀撤N無法用單一標(biāo)量的表達式表示的復(fù)雜約束來過濾數(shù)據(jù)的操作,可以表示為函數(shù)。然后,此函數(shù)便可以在WHERE子句中調(diào)用,以減少發(fā)送至客戶端的數(shù)字或行數(shù)。函數(shù)概述

存儲過程與函數(shù)一起向用戶提供了強大而靈活的編程能力。存儲過程和自定義函數(shù)的區(qū)別:(1)存儲過程,功能強大,可以執(zhí)行包括修改表等一系列數(shù)據(jù)庫操作。用戶定義函數(shù)不能用于執(zhí)行一組修改全局數(shù)據(jù)庫狀態(tài)的操作。(2)存儲過程可以使用非確定函數(shù)。自定義函數(shù)不允許在用戶定義函數(shù)主體中內(nèi)置非確定函數(shù)?!咀ⅲ捍_定性函數(shù)是在使用特定的輸入值集調(diào)用函數(shù)的任何時候,它們總是返回相同的結(jié)果?!浚?)存儲過程可返回記錄集。自定義函數(shù)可以返回表變量。(4)存儲過程的返回值不能被直接引用。自定義函數(shù)的返回值可以被直接引用。(5)存儲過程用EXECUTE語句執(zhí)行。而自定義函數(shù)在查詢語句中調(diào)用。函數(shù)概述

SQLServer中根據(jù)函數(shù)返回值形式分為三種類型:1.標(biāo)量函數(shù):返回在RETURNS子句中定義的單個數(shù)據(jù)值。2.內(nèi)聯(lián)表值型函數(shù):內(nèi)聯(lián)表值型函數(shù)以表的形式返回一個返回值。其返回的表由一個位于RETURN子句中的SELECT命令段從數(shù)據(jù)庫中篩選出來。內(nèi)聯(lián)表值型函數(shù)功能相當(dāng)于一個參數(shù)化的視圖。用戶定義表值函數(shù)返回TABLE數(shù)據(jù)類型。3.多聲明表值型函數(shù):多聲明表值型函數(shù)可以看作標(biāo)量型和內(nèi)聯(lián)表值型函數(shù)的結(jié)合體。它的返回值是一個表,返回值的表中的數(shù)據(jù)是由函數(shù)體中的語句插入的。由此可見,它可以進行多次查詢,對數(shù)據(jù)進行多次篩選與合并,彌補了內(nèi)聯(lián)表值型函數(shù)的不足。函數(shù)類型

所有用戶定義函數(shù)都由兩部分組成:標(biāo)題和正文。函數(shù)可接受零個或多個輸入?yún)?shù),返回標(biāo)量值或表。創(chuàng)建標(biāo)量函數(shù):通過處方編號計算該處方總金額。CREATEFUNCTIONfuncRecipeFee(@recipeIDVARCHAR(10))RETURNSDecimal(18,2)ASBEGIN DECLARE@recipeFeeDecimal(18,2) Select@recipeFee=sum(d.Mamount*m.Mprice)FromRecipeDetaildinnerjoinMedicinemond.Mno=d.MnoWhered.Rno=@recipeID

Return@recipeFeeEND函數(shù)操作示例

創(chuàng)建內(nèi)聯(lián)表值型函數(shù):統(tǒng)計該醫(yī)生為所有患者開具的藥品金額和數(shù)量。CREATEFUNCTIONdbo.funcMedicineSales(@DnoVARCHAR(10))RETURNSTABLEASRETURN

(SELECTM.MnameAs'藥品名稱',Sum(RD.Mamount)AS'藥品數(shù)量',SUM(RD.Mamount*M.Mprice)AS'藥品總金額'FROMDoctorAsDINNERJOINRecipeMasterAsRMOnD.Dno=RM.DnoINNERJOINRecipeDetailAsRDOnRM.Rno=RD.RnoINNERJOINMedicineASMOnRD.Mno=M.MnoINNERJOINPatientASPOnRM.Pno=P.PnoWHERED.Dno=@DnoGROUPBYM.Mname);調(diào)用:Select*FromfuncMedicineSales('82')函數(shù)操作示例

創(chuàng)建多聲明表值型函數(shù):通過用戶指定的部門編號,查詢該部門的所有下級部門,包括該部門的子節(jié)點、子節(jié)點的子節(jié)點、……,直至某節(jié)點為葉節(jié)點為止。CREATEFUNCTIONfuncDescendantDept(@DeptNoVARCHAR(10))RETURNS@DescendantDeptTABLE(DeptNoVARCHAR(10),DeptNameVARCHAR(50),ChildDeptNoVARCHAR(10),ChildDeptNameVARCHAR(50),DeptLevelINT)ASBEGIN

WITHDescendant(DeptNo,DeptName,ChildDeptNo,ChildDeptName,DeptLevel)AS

(SELECTParent.DeptNo,Parent.DeptName,Child.DeptNo,Child.DeptName,1FROMDeptASParentLEFTJOINDeptASChildOnParent.DeptNo= Child.ParentDeptNoWHEREParent.DeptNo=@DeptNo UNIONALLSELECTP.ChildDeptNoASDeptNo,P.ChildDeptNameASDeptName,C.DeptNoASChildDeptNo,C.DeptNameASChildDeptName,P.DeptLevel+1ASDeptLevelFROMDescendantASPINNERJOINDeptASCOnP.ChildDeptNo=C.ParentDeptNo)INSERT@DescendantDeptSELECTDeptNo,DeptName,ChildDeptNo,ChildDeptName,DeptLevelFROMDescendant

RETURNEND;函數(shù)操作示例ClicktoaddTitle1游標(biāo)1ClicktoaddTitle2存儲過程2ClicktoaddTitle2觸發(fā)器3本章內(nèi)容ClicktoaddTitle1函數(shù)4ClicktoaddTitle1嵌入式SQL5ClicktoaddTitle2數(shù)據(jù)庫連接6ClicktoaddTitle2

XML數(shù)據(jù)庫7

SQL語言可以獨立使用,稱為交互式(InteractiveSQL,ISQL)。但ISQL的功能僅限于數(shù)據(jù)庫上操作,缺少數(shù)據(jù)處理能力。而一個應(yīng)用程序既要訪問數(shù)據(jù),又要處理數(shù)據(jù),把SQL嵌入到程序設(shè)計語言,如C,C++,Java等,即宿主語言中,將兩者的功能相結(jié)合起來,是目前解決這個問題的實現(xiàn)途徑。這樣使用的SQL稱為嵌入式SQL(EmbeddedSQL,ESQL)嵌入式SQL概述

ESQL的處理過程對于嵌入式SQL,RDBMS一般采用預(yù)編譯方法處理,即由RDBMS的預(yù)處理程序?qū)υ闯绦蜻M行掃描,識別出ESQL語句,把它們轉(zhuǎn)換成主語言調(diào)用語句,以使主語言編譯程序能識別它們,然后由主語言的編譯程序?qū)⒓兊闹髡Z言編譯成目標(biāo)碼嵌入式SQL概述

ESQL與主語言之間的通信數(shù)據(jù)庫與宿主語言程序間信息的傳遞是通過共享變量實現(xiàn)的。這些共享變量先由宿主語言程序定義,再用SQL的DECLARE語句說明,隨后SQL語句就可以引用這些變量。共享變量也就成了SQL和宿主語言之間的接口。用SQL通信區(qū)SQLCA向主語言傳遞SQL語句的執(zhí)行狀態(tài)信息在ESQL中,為了能夠區(qū)分SQL語句與主語言語句,所有的SQL語句都必須加前綴標(biāo)識“EXECSQL”,并以“END_EXEC”作為語句的結(jié)束標(biāo)志。嵌入式SQL語句的格式如下:EXECSQL<SQL語句>END_EXEC嵌入式SQL概述10.3嵌入式SQL

SQLCA:SQLCommunicationAreaSQLCA是一個數(shù)據(jù)結(jié)構(gòu)SQLCA的用途SQL語句執(zhí)行后,DBMS反饋給應(yīng)用程序信息描述系統(tǒng)當(dāng)前工作狀態(tài)描述運行環(huán)境這些信息將送到SQL通信區(qū)SQLCA中應(yīng)用程序從SQLCA中取出這些狀態(tài)信息,據(jù)此決定接下來執(zhí)行的語句定義SQLCA

用EXECSQLINCLUDESQLCA加以定義使用SQLCASQLCA中有一個存放每次執(zhí)行SQL語句后返回代碼的變量SQLCODE應(yīng)用程序每執(zhí)行完一條SQL語句之后都應(yīng)該測試一下SQLCODE的值,以了解該SQL語句執(zhí)行情況并做相應(yīng)處理10.3嵌入式SQL

10.3嵌入式SQL

SQLCA的使用方法SQLCODE=0:SQL語句執(zhí)行成功,并有滿足條件的記錄

=100:SQL語句處理完最后一條滿足條件的記錄或數(shù)據(jù)庫中沒有滿足條件的記錄

〈0:SQL語句執(zhí)行出錯例1:執(zhí)行DELETE語句后,SQLCODE的不同返回值:

=0:成功刪除若干行

=100:沒有滿足條件的記錄

〈0:執(zhí)行出錯無條件刪除警告信息違反數(shù)據(jù)保護規(guī)則,拒絕刪除操作10.3嵌入式SQL

SQLCA的使用方法

允許嵌入的SQL語句引用宿主語言的程序變量(成為共享變量),但有兩條規(guī)定如下。引用共享變量前必須加冒號“:”作為前綴標(biāo)識,以區(qū)別數(shù)據(jù)庫中的變量。共享變量由宿主語言的程序定義,并用SQL的DECLARE語句說明。例如在C語言程序中可以按如下形式使用共享變量:EXECSQLBEGINDECLARESECTION;

charPno[10];

charPname[50];

charSQL_STATE[6];EXECSQLENDDECLARESECTION;嵌入式SQL概述例3對某個部門的醫(yī)生信息,根據(jù)用戶的要求修改其中某些人的年齡字段。思路查詢某個部門全體醫(yī)生的信息(要查詢的部門名由主變量deptname指定)然后根據(jù)用戶的要求修改其中某些記錄的年齡字段10.3嵌入式SQL

............EXECSQLINCLUDESQLCA;EXECSQLBEGINDECLARESECTION;....../*說明主變量deptname,Dno,Dname,Dage,等*/.......EXECSQLENDDECLARESECTION;.....

10.3嵌入式SQL

......gets(deptname);/*為主變量deptname賦值*/......EXECSQLDECLARESXCURSORFORSELECTDno,Dname,DageFROMDoctorWHEREDDept=:deptname

FORUPDATEOFDage;/*說明游標(biāo)*/EXECSQLOPENSX/*打開游標(biāo)*/10.3嵌入式SQLWHILE(1){/*用循環(huán)結(jié)構(gòu)逐條處理結(jié)果集中的記錄*/EXECSQLFETCHSXINTO:Dno,:Dname,:Dage;/*將游標(biāo)指針向前推進一行,然后從結(jié)果集中取當(dāng)前行,送相應(yīng)主變量*/if(sqlca.sqlcode<>SUCCESS)break;

/*若所有查詢結(jié)果均已處理完或出現(xiàn)SQL語句錯誤,則退出循環(huán)*/printf("%s,%s,%d",Dno,Dname,Dage);/*顯示該記錄*/10.3嵌入式SQLprintf("UPDATEAGE?");/*問用戶是否要修改*/scanf("%c",&yn);if(yn='y'oryn='Y')/*需要修改*/{printf("INPUTNEWAGE:");scanf("%d",&NEWAge);/*輸入新的年齡值*/

EXECSQLUPDATEStudentSETSage=:NEWAgeWHERECURRENTOFSX;/*修改當(dāng)前記錄的年齡字段*/};10.3嵌入式SQL

............};

EXECSQLCLOSESX;/*關(guān)閉游標(biāo)*/............10.3嵌入式SQLClicktoaddTitle1游標(biāo)1ClicktoaddTitle2存儲過程2ClicktoaddTitle2觸發(fā)器3本章內(nèi)容ClicktoaddTitle1函數(shù)4ClicktoaddTitle1嵌入式SQL5ClicktoaddTitle2數(shù)據(jù)庫連接6ClicktoaddTitle2

XML數(shù)據(jù)庫7

傳統(tǒng)數(shù)據(jù)庫編程方式是“主語言+DML”。雖然ANSI和ISO定義了關(guān)系數(shù)據(jù)庫查詢語言標(biāo)準(zhǔn)SQL,但傳統(tǒng)方式中一個特定的前端應(yīng)用不能訪問不同數(shù)據(jù)庫服務(wù)器上的數(shù)據(jù)。各廠商的SQL版本不同,每個關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)廠商都對標(biāo)準(zhǔn)SQL進行了獨特的擴充或解釋,使得不同的RDBMS提供的SQL互不兼容;不同廠商的RDBMS在客戶機與數(shù)據(jù)庫服務(wù)器之間用了不同的通信協(xié)議。與此同時,RDBMS產(chǎn)品卻在迅速增加,因此有必要建立一個公共的、與數(shù)據(jù)庫無關(guān)的應(yīng)用程序設(shè)計接口(ApplicationProgrammingInterface,API)DB連接訪問概述

ODBC(OpenDatabaseConnectivity,開放數(shù)據(jù)庫互連)是微軟公司開放服務(wù)結(jié)構(gòu)(WOSA,WindowsOpenServicesArchitecture)中有關(guān)數(shù)據(jù)庫的一個組成部分,它建立了一組規(guī)范,并提供了一組對數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)API(應(yīng)用程序編程接口)。DB連接訪問ODBC應(yīng)用程序應(yīng)用程序應(yīng)用程序公共接口API網(wǎng)絡(luò)軟件SQLServerSybaseOracleDB2MySQL應(yīng)用程序

ODBC的體系結(jié)構(gòu)DB連接訪問ODBCSQLServer驅(qū)動程序ODBC應(yīng)用程序FoxPro驅(qū)動程序SQLServer數(shù)據(jù)源Oracle數(shù)據(jù)源FoxPro數(shù)據(jù)源驅(qū)動程序管理器Oracle驅(qū)動程序…其他數(shù)據(jù)庫驅(qū)動程序…其他數(shù)據(jù)源

ODBC的開發(fā)使用DB連接訪問ODBCSQLAllocHandle(ENV)SQLSetEnvAttrSQLAllocHandle(DBC)SQLConnectSelectSQLSetConnectAttrSQLGetInfoSQLAllocHandle(STMT)SQLSetStndAttrSQLExecDirectORSQLPrepareSQLExecuteORUpdate/Delete/insertSQLNumResultColsSQLBindCOLSQLFetchSQLGetDataSQLCloseCursorSQLFreeHandle(STMT)SQLDiscormectSQLFreeHandle(DBC)SQLFreeHandle(ENV)執(zhí)行SQL命令使用結(jié)果集釋放空間ODBC初始化函數(shù)使用ODECAPI檢索數(shù)據(jù)

ADO(ActiveXDataObjects,ActiveX數(shù)據(jù)對象)是Microsoft提出的應(yīng)用程序接口(API)用以實現(xiàn)訪問關(guān)系或非關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)。ADO從原來的Microsoft數(shù)據(jù)接口遠程數(shù)據(jù)對象(RDO)而來。RDO與ODBC一起工作訪問關(guān)系數(shù)據(jù)庫。DB連接訪問ADOSQLAllocHandle(ENV)SQLSetEnvAttrSQLAllocHandle(DBC)SQLConnectSelect

象說

明CommandCommand對象定義了將對數(shù)據(jù)源執(zhí)行的指定命令Connection代表打開的、與數(shù)據(jù)源的連接DataControl將數(shù)據(jù)查詢Recordset綁定到一個或多個控件上(如文本框、網(wǎng)格控件或組合框),以便在Web頁上顯示ADOR.Recordset數(shù)據(jù)DataFactory實現(xiàn)對客戶端應(yīng)用程序的指定數(shù)據(jù)源進行讀/寫數(shù)據(jù)訪問的方法DataSpace創(chuàng)建客戶端代理以便自定義位于中間層的業(yè)務(wù)對象Error包含與單個操作(涉及提供者)有關(guān)的數(shù)據(jù)訪問錯誤的詳細信息Field代表使用普通數(shù)據(jù)類型的數(shù)據(jù)的列Parameter代表與基于參數(shù)化查詢或存儲過程的Command對象相關(guān)聯(lián)的參數(shù)或自變量Property代表由提供者定義的ADO對象的動態(tài)特性RecordSet代表來自基本表或命令執(zhí)行結(jié)果的記錄的全集,任何時候,Recordset對象所指的當(dāng)前記錄均為集合內(nèi)的單個記錄DB連接訪問ADOSQLAllocHandle(ENV)SQLSetEnvAttrSQLAllocHandle(DBC)SQLConnectSelect

DB連接訪問JDBCSQLAllocHandle(ENV)SQLSetEnvAttrSQLAllocHandle(DBC)SQLConnectSelectJDBC(JavaDataBaseConnectivity,Java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的JavaAPI,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序,同時,JDBC也是一個商標(biāo)名。將Java語言和JDBC結(jié)合起來使程序員只需寫一遍程序就可以讓它在任何平臺上運行,這也是Java語言“編寫一次,到處運行”優(yōu)點的體現(xiàn)。

DB連接訪問JDBCSQLAllocHandle(ENV)SQLSetEnvAttrSQLAllocHandle(DBC)SQLConnectSelectJDBC實際上做了3件事:建立與數(shù)據(jù)庫的連接、發(fā)送SQL、處理結(jié)果。舉例Connectioncon=DriverManager.getConnection("jdbc:odbc:wombat","login","password");Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery("SELECTDeptNo,DeptName,ManagerFROMDept");While(rs.next()){ StringdeptNo=rs.getString("DeptNo"); StringdeptName=rs.getString("DeptName"); Stringmanager=rs.getString("Manager"); }ClicktoaddTitle1游標(biāo)1ClicktoaddTitle2存儲過程2ClicktoaddTitle2觸發(fā)器3本

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論