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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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;游標游標示例ClicktoaddTitle1游標1ClicktoaddTitle2存儲過程2ClicktoaddTitle2觸發(fā)器3本章內容ClicktoaddTitle1函數(shù)4ClicktoaddTitle1嵌入式SQL5ClicktoaddTitle2數(shù)據(jù)庫連接6ClicktoaddTitle2

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

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

系統(tǒng)存儲過程。以sp_開頭,用來進行系統(tǒng)的各項設定、取得信息和相關管理工作。本地存儲過程。用戶創(chuàng)建的存儲過程是由用戶創(chuàng)建并完成某一特定功能的存儲過程,事實上一般所說的存儲過程就是指本地存儲過程。臨時存儲過程。臨時存儲過程分為兩種存儲過程:一是本地臨時存儲過程,以井字號(#)作為其名稱的第一個字符,只有創(chuàng)建它的用戶才能執(zhí)行它;二是全局臨時存儲過程,以兩個井字號(##)號開始,任意用戶都可以執(zhí)行。遠程存儲過程。位于遠程服務器上的存儲過程,使用分布式查詢和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;存儲過程操作示例

在存儲過程中利用游標計算患者支付處方中藥品的總金額。其中要求對藥品類型為“中藥”的藥品按照價格的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;存儲過程存儲過程+游標ClicktoaddTitle1游標1ClicktoaddTitle2存儲過程2ClicktoaddTitle2觸發(fā)器3本章內容ClicktoaddTitle1函數(shù)4ClicktoaddTitle1嵌入式SQL5ClicktoaddTitle2數(shù)據(jù)庫連接6ClicktoaddTitle2

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

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

觸發(fā)器(Trigger)是數(shù)據(jù)庫模式的一個元素。它是一個能由系統(tǒng)自動執(zhí)行對數(shù)據(jù)庫修改的語句一個觸發(fā)器由3部分組成:事件。事件是指對數(shù)據(jù)庫的插入、刪除、修改等操作。觸發(fā)器在這些事件開始發(fā)生時將開始工作。條件。觸發(fā)器將測試條件是否成立。如果條件成立,就執(zhí)行相應動作,否則什么也不做。動作。如果觸發(fā)器測試滿足預定的條件,那么就由DBMS執(zhí)行這些動作,即對數(shù)據(jù)庫的操作。觸發(fā)器性能通常比較低。當運行觸發(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游標1ClicktoaddTitle2存儲過程2ClicktoaddTitle2觸發(fā)器3本章內容ClicktoaddTitle1函數(shù)4ClicktoaddTitle1嵌入式SQL5ClicktoaddTitle2數(shù)據(jù)庫連接6ClicktoaddTitle2

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

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

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

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

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

所有用戶定義函數(shù)都由兩部分組成:標題和正文。函數(shù)可接受零個或多個輸入?yún)?shù),返回標量值或表。創(chuàng)建標量函數(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)建內聯(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);調用: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游標1ClicktoaddTitle2存儲過程2ClicktoaddTitle2觸發(fā)器3本章內容ClicktoaddTitle1函數(shù)4ClicktoaddTitle1嵌入式SQL5ClicktoaddTitle2數(shù)據(jù)庫連接6ClicktoaddTitle2

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

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

ESQL的處理過程對于嵌入式SQL,RDBMS一般采用預編譯方法處理,即由RDBMS的預處理程序對源程序進行掃描,識別出ESQL語句,把它們轉換成主語言調用語句,以使主語言編譯程序能識別它們,然后由主語言的編譯程序將純的主語言編譯成目標碼嵌入式SQL概述

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

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

用EXECSQLINCLUDESQLCA加以定義使用SQLCASQLCA中有一個存放每次執(zhí)行SQL語句后返回代碼的變量SQLCODE應用程序每執(zhí)行完一條SQL語句之后都應該測試一下SQLCODE的值,以了解該SQL語句執(zhí)行情況并做相應處理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ī)定如下。引用共享變量前必須加冒號“:”作為前綴標識,以區(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;/*說明游標*/EXECSQLOPENSX/*打開游標*/10.3嵌入式SQLWHILE(1){/*用循環(huán)結構逐條處理結果集中的記錄*/EXECSQLFETCHSXINTO:Dno,:Dname,:Dage;/*將游標指針向前推進一行,然后從結果集中取當前行,送相應主變量*/if(sqlca.sqlcode<>SUCCESS)break;

/*若所有查詢結果均已處理完或出現(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;/*修改當前記錄的年齡字段*/};10.3嵌入式SQL

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

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

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

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

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

ODBC的體系結構DB連接訪問ODBCSQLServer驅動程序ODBC應用程序FoxPro驅動程序SQLServer數(shù)據(jù)源Oracle數(shù)據(jù)源FoxPro數(shù)據(jù)源驅動程序管理器Oracle驅動程序…其他數(shù)據(jù)庫驅動程序…其他數(shù)據(jù)源

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

ADO(ActiveXDataObjects,ActiveX數(shù)據(jù)對象)是Microsoft提出的應用程序接口(API)用以實現(xiàn)訪問關系或非關系數(shù)據(jù)庫中的數(shù)據(jù)。ADO從原來的Microsoft數(shù)據(jù)接口遠程數(shù)據(jù)對象(RDO)而來。RDO與ODBC一起工作訪問關系數(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)對客戶端應用程序的指定數(shù)據(jù)源進行讀/寫數(shù)據(jù)訪問的方法DataSpace創(chuàng)建客戶端代理以便自定義位于中間層的業(yè)務對象Error包含與單個操作(涉及提供者)有關的數(shù)據(jù)訪問錯誤的詳細信息Field代表使用普通數(shù)據(jù)類型的數(shù)據(jù)的列Parameter代表與基于參數(shù)化查詢或存儲過程的Command對象相關聯(lián)的參數(shù)或自變量Property代表由提供者定義的ADO對象的動態(tài)特性RecordSet代表來自基本表或命令執(zhí)行結果的記錄的全集,任何時候,Recordset對象所指的當前記錄均為集合內的單個記錄DB連接訪問ADOSQLAllocHandle(ENV)SQLSetEnvAttrSQLAllocHandle(DBC)SQLConnectSelect

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

DB連接訪問JDBCSQLAllocHandle(ENV)SQLSetEnvAttrSQLAllocHandle(DBC)SQLConnectSelectJDBC實際上做了3件事:建立與數(shù)據(jù)庫的連接、發(fā)送SQL、處理結果。舉例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游標1ClicktoaddTitle2存儲過程2ClicktoaddTitle2觸發(fā)器3本

溫馨提示

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

評論

0/150

提交評論