版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程數(shù)據(jù)庫原理與應(yīng)用第第10章章 數(shù)據(jù)庫編程數(shù)據(jù)庫編程 第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程數(shù)據(jù)庫設(shè)計 數(shù)據(jù)庫設(shè)計概述 需求分析 概念設(shè)計 邏輯設(shè)計 物理設(shè)計 數(shù)據(jù)庫的實施與維護回顧第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程回顧第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程v 數(shù)據(jù)庫(存放了讀者信息、圖書信息、讀者借還書信息等)v 實現(xiàn)對數(shù)據(jù)庫查詢、更新和數(shù)據(jù)處理的相關(guān)應(yīng)用程序. 1. 實現(xiàn)讀者借書、還書等功能的程序。 2. 實現(xiàn)圖書、讀者信息查詢和更新功能的程序。 這些程序還需為最終的用戶提供了友好的圖形用戶界面(GUI)。設(shè)計圖書借閱系統(tǒng):設(shè)計圖書借閱系統(tǒng):第第20講講 數(shù)據(jù)庫編程
2、數(shù)據(jù)庫編程 數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計 對于一個給定的應(yīng)用環(huán)境,構(gòu)造(設(shè)計)優(yōu)對于一個給定的應(yīng)用環(huán)境,構(gòu)造(設(shè)計)優(yōu)化的數(shù)據(jù)庫邏輯模式和物理結(jié)構(gòu),并據(jù)此建立化的數(shù)據(jù)庫邏輯模式和物理結(jié)構(gòu),并據(jù)此建立數(shù)據(jù)庫及其應(yīng)用系統(tǒng),使之能夠有效地存儲和數(shù)據(jù)庫及其應(yīng)用系統(tǒng),使之能夠有效地存儲和管理數(shù)據(jù),滿足各種用戶的應(yīng)用需求,包括信管理數(shù)據(jù),滿足各種用戶的應(yīng)用需求,包括信息管理要求和數(shù)據(jù)操作要求。息管理要求和數(shù)據(jù)操作要求。 信息管理要求:數(shù)據(jù)庫中應(yīng)該存儲哪些數(shù)據(jù);信息管理要求:數(shù)據(jù)庫中應(yīng)該存儲哪些數(shù)據(jù); 數(shù)據(jù)操作要求:對數(shù)據(jù)對象進行哪些操作。數(shù)據(jù)操作要求:對數(shù)據(jù)對象進行哪些操作。第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程圖借
3、閱系統(tǒng)圖借閱系統(tǒng)圖書借閱系統(tǒng)應(yīng)提供的主要功能有:圖書借閱系統(tǒng)應(yīng)提供的主要功能有: 對讀者信息進行管理:對讀者信息進行管理: 讀者信息的添加、修改、刪除和查詢。讀者信息的添加、修改、刪除和查詢。(2) 對圖書信息進行管理:對圖書信息進行管理: 圖書信息的添加、修改、刪除及查詢。圖書信息的添加、修改、刪除及查詢。(3) 對借還書進行管理,并可查詢當前的借閱情對借還書進行管理,并可查詢當前的借閱情況及借閱歷史信息。況及借閱歷史信息。第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程圖書借閱系統(tǒng)圖書借閱系統(tǒng)圖書借閱系統(tǒng)的控制流程圖書借閱系統(tǒng)的控制流程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程圖書借閱系統(tǒng) 概念設(shè)計(概念模型)
4、 數(shù)據(jù)對象數(shù)據(jù)對象 學(xué)生學(xué)生 借書證號、姓名、專業(yè)、性別、出生時健、照片借書證號、姓名、專業(yè)、性別、出生時健、照片 圖書圖書 ISBN、書名、作者、出版社、價格、復(fù)本數(shù)、庫存量、書名、作者、出版社、價格、復(fù)本數(shù)、庫存量第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程姓名學(xué)生圖書借閱nm 作者性別專業(yè)照片出生日期出版社價格復(fù)本數(shù)借書證號ISBN庫存量索書號借閱時間第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程圖書借閱系統(tǒng) 邏輯結(jié)構(gòu)設(shè)計 關(guān)系模型關(guān)系模型 XS(借書證號、姓名、(借書證號、姓名、專業(yè)、性別、出生時間專業(yè)、性別、出生時間、照片)、照片) BOOK(ISBN、書名、書名、作者、出版社、價格、作者、出版社、價格、
5、復(fù)本數(shù)、庫存量)復(fù)本數(shù)、庫存量) JY(索書號,借書證號借書證號, ISBN,借閱時間)基本表基本表字段名字段名XS借書證號、姓名、性別、出生時間、借書數(shù)BOOKISBN、書名、作者、出版社、價格、復(fù)本數(shù)、庫存量JY索書號、借書證號、ISBN、借書時間、還書時間第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程圖書借閱系統(tǒng)數(shù)據(jù)庫圖書借閱系統(tǒng)數(shù)據(jù)庫為了處理的方便,在此對XSBOOK數(shù)據(jù)庫中XS表的結(jié)構(gòu)進行了修改,增加filelen字段,用于存放照片文件的長度,修改后的XS表結(jié)構(gòu)如表所示。字段名字段名類型與寬度類型與寬度是否主碼是否主碼是否允許空是否允許空值值說明說明借書證號Char(8)NOT NULL姓名Ch
6、ar(8)NOT NULL專業(yè)名Char(12)NOT NULL性別bit NOT NULL0:男,1:女出生時間datetimeNOT NULL借書量integerNOT NULL照片imageNULLfilelenbigintNULL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程應(yīng)用開發(fā)工具數(shù)據(jù)庫管理系統(tǒng) (DBMS) 操作系統(tǒng) (OS)計算機 DB 應(yīng)用系統(tǒng)PB,VB,VCDelphiOracle,Sybase,SQL Server,Informix用戶非計算機專業(yè)人員,不熟悉SQL語言,不能直接使用SQL語言來操縱數(shù)據(jù)庫數(shù)據(jù)庫編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程 對數(shù)據(jù)庫的操作方式 交互方式交互
7、方式 利用利用DBMS提供的軟件工具,直接對數(shù)據(jù)庫進行操提供的軟件工具,直接對數(shù)據(jù)庫進行操作,操作結(jié)果立即返回到操作界面。作,操作結(jié)果立即返回到操作界面。 圖形界面,圖形界面,SQL Server 2000的企業(yè)管理器的企業(yè)管理器 命令方式,命令方式, SQL Server 2000的查詢分析器的查詢分析器 數(shù)據(jù)編程數(shù)據(jù)編程數(shù)據(jù)庫編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程數(shù)據(jù)庫編程 標準SQL是非過程化的查詢語言,具有操作統(tǒng)一、面向集合、功能豐富、使用簡單等多項優(yōu)點。 缺少流程控制能力,難以實現(xiàn)應(yīng)用業(yè)務(wù)中的邏輯控制。 SQL編程技術(shù)可以有效克服SQL語言實現(xiàn)復(fù)雜應(yīng)用方面的不足,提高應(yīng)用系統(tǒng)和RDB
8、MS間的互操作性。第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程數(shù)據(jù)庫編程 應(yīng)用系統(tǒng)中使用SQL編程來訪問和管理數(shù)據(jù)庫中數(shù)據(jù)的方式有: 嵌入式嵌入式SQL(Embeded SQL,ESQL) PL/SQL(Procedural Language/SQL) ODBC(Open Data Base Connectivity)編程編程、 JDBC(Java Data Base Connectivity)編程編程和和OLEDB(Object Linking and Embeded)編編程等程等 第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程數(shù)據(jù)庫編程 嵌入式SQL(Embeded SQL,ESQL) ESQL將將SQL語句嵌
9、入程序設(shè)計語言,借助高語句嵌入程序設(shè)計語言,借助高級語言的控制能力實現(xiàn)過程化。被嵌入的程序級語言的控制能力實現(xiàn)過程化。被嵌入的程序設(shè)計語言,如設(shè)計語言,如C、C+、Java,稱為宿主語言,稱為宿主語言,簡稱主語言。,簡稱主語言。 形式形式 EXEC SQL ; 由由RDBMS的預(yù)處理程序?qū)υ闯绦蜻M行掃描,的預(yù)處理程序?qū)υ闯绦蜻M行掃描,識別出識別出ESQL語句,轉(zhuǎn)換成主語言調(diào)用語句,語句,轉(zhuǎn)換成主語言調(diào)用語句,由主語言的編譯程序?qū)⑵渚幾g成目標碼。由主語言的編譯程序?qū)⑵渚幾g成目標碼。第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程數(shù)據(jù)庫編程:Int main(void) :EXEC SQL CONNECT TO
10、 TESTlocalhost:54321 USER “SYSTEM”/”MANAGER”;EXEC SQL DECLARE SX CURSOR FOR /*定義游標SX SELECT Sno,Sn,Sex,Sa /*SX對應(yīng)的語句對應(yīng)的語句 FROM S WHERE SD=:deptname;EXEC SQL OPEN SX; /*打開游標,指向查詢結(jié)果的第一行 for ( ; ;) /*循環(huán)結(jié)構(gòu)逐條處理結(jié)果集中的記錄 EXEC SQL FETCH SX INTO :HSno,:HSname,:HSsex,:HSage; : /*推進游標,將當前數(shù)據(jù)放入主變量 print(“UPDATE AG
11、E(y/n)?”); : EXEC SQL UPDATE S /*嵌入式嵌入式SQL更新語句更新語句 SET Sa=:NEWAGE WHERE CURRENT OF SX; EXEC SQL CLOSE SX; /*關(guān)閉游標,不在和查詢結(jié)果對應(yīng)關(guān)閉游標,不在和查詢結(jié)果對應(yīng) EXEC SQL COMMIT WORK; /*提交更新提交更新 EXEC SQL DISCONNECT TEST; /*斷開數(shù)據(jù)庫連接第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程數(shù)據(jù)庫編程 游標的概念 SQL是面向集合的,一條是面向集合的,一條SQL語句可以產(chǎn)生和語句可以產(chǎn)生和處理多條語句。主語言是面向記錄的,一組主處理多條語句。主
12、語言是面向記錄的,一組主變量一次只能存放一條記錄。用游標來協(xié)調(diào)這變量一次只能存放一條記錄。用游標來協(xié)調(diào)這兩種不同的處理方式。兩種不同的處理方式。 EXEC SQL DECLARE SX CURSOR FOR /*定義游標SX EXEC SQL OPEN SX /*打開游標 EXEC SQL FETCH SX INTO /*推進游標 EXEC SQL CLOSE SX; /*關(guān)閉游標第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程數(shù)據(jù)庫編程 PL/SQL(Procedural Language/SQL) 編寫數(shù)據(jù)庫存儲過程的一種過程語言。結(jié)合了編寫數(shù)據(jù)庫存儲過程的一種過程語言。結(jié)合了SQL的數(shù)據(jù)操作能力和過程
13、化語言的流程控制的數(shù)據(jù)操作能力和過程化語言的流程控制能力,是能力,是SQL的過程化擴展,使其增加了過程的過程化擴展,使其增加了過程化語句功能?;Z句功能。第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程PL/SQL T-SQL增加的語言元素增加的語言元素 微軟為了用戶編程方便增加的語言元素 這些語言元素主要包括:變量、運算符、函數(shù)、流程控制語句和注釋第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程1. 變變 量量 1) 標識符標識符(1) 常規(guī)標識符常規(guī)標識符(2) 分隔標識符分隔標識符2) 變量的分類變量的分類(1) 全局變量全局變量(2) 局部變量局部變量 以以ASCII字母、字母、Unicode字母、下劃線字母、下
14、劃線 (_)、或或#開頭,可后續(xù)一個或若開頭,可后續(xù)一個或若干個干個ASCII字符、字符、Unicode字符、下劃線字符、下劃線 (_)、美元符號(、美元符號($)、)、或或#,但不能,但不能全為下劃線全為下劃線(_)、或或#。 PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程變變 量量2. 局部變量的使用局部變量的使用1) 局部變量的定義與賦值局部變量的定義與賦值(1) 局部變量的定義(2) 局部變量的賦值PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程變變 量量例如:創(chuàng)建一個名為例如:創(chuàng)建一個名為sex的局部變量,并在的局部變量,并在 SELECT 語句中使用該語句中使用該局部變量查找表局部變
15、量查找表XS中所有男同學(xué)的借書證號、姓名。中所有男同學(xué)的借書證號、姓名。 PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程變變 量量2)局部游標變量的定義與賦值)局部游標變量的定義與賦值(1) 局部游標變量的定義PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程變變 量量PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程5.1.3 變變 量量(3) 游標變量的使用步驟游標變量的使用步驟例如:使用游標變量 PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程變變 量量PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程運算符與表達式運算符與表達式 算術(shù)運算符 賦值運算符 位運算符 比較運算符 邏輯運算符 字符串連接運
16、算符 一元運算符PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程流程控制語句流程控制語句PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程系統(tǒng)內(nèi)置函數(shù)系統(tǒng)內(nèi)置函數(shù) SQL Server包含如下幾類標量函數(shù):包含如下幾類標量函數(shù): PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程系統(tǒng)表系統(tǒng)表sysobjectsPL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程存儲過程和觸發(fā)器設(shè)計存儲過程和觸發(fā)器設(shè)計存儲過程名存儲過程名說說 明明Xs_insert向XS表中插入一條記錄Xs_update修改表XS中指定記錄Xs_delete在XS表中刪除一條記錄BOOK_insert向BOOK表中插入一條記錄BOOK_upd
17、ate修改表BOOK中指定記錄BOOK_delete在BOOK表中刪除一條記錄JY_insert向JY表中插入一條記錄JY_delete在JY表中刪除一條記錄觸發(fā)器名觸發(fā)器名說說 明明tjy_insert對JY表定義的INSERT觸發(fā)器tjy_delete對JY表定義的DELETE觸發(fā)器PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程1. 存儲過程存儲過程1) 對對XS表進行操作的存儲過程表進行操作的存儲過程(1) 在XS表中插入一條記錄USE XSBOOKCREATE PROCEDURE xs_insert jszh char(8),xm char(8),zym char(12),xb bit
18、,cssj datetime AS INSERT INTO XS(借書證號,姓名,專業(yè)名,性別,出生時間) VALUES(jszh,xm,zym,xb,cssj)GOPL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程(2) 在在XS表中修改一條記錄表中修改一條記錄當記錄的照片信息不變化時,存儲過程當記錄的照片信息不變化時,存儲過程xs_update直接修改記錄的信息。直接修改記錄的信息。USE XSBOOKCREATE PROCEDURE xs_update jszh char(8),xm char(8),zym char(12),xb bit,cssj datetime,jss int AS U
19、PDATE xs SET 姓名姓名=xm,專業(yè)名專業(yè)名=zym,性別性別=xb,出生時間出生時間=cssj,借書數(shù)借書數(shù)=jss WHERE 借書證號借書證號=jszhPL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程(3) 在在XS表中刪除一條記錄表中刪除一條記錄USE XSBOOKCREATE PROCEDURE xs_delete jszh char(8),flag int output AS IF EXISTS (SELECT * FROM xs WHERE 借書證號=jszh and 借書數(shù)=0) BEGIN DELETE FROM XS WHERE 借書證號=jszh and 借書數(shù)=
20、0 SET flag=0 END ELSE SET flag=1PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程2) 對對BOOK表進行操作的存儲過程表進行操作的存儲過程(1) 在BOOK表中插入一條記錄USE XSBOOKCREATE PROCEDURE book_insert isbn char(16),sm char(26),zz char(8),cbs char(20),jg float(8),fbl int,kcl int AS INSERT INTO BOOK(ISBN,書名,作者,出版社,價格,復(fù)本量,庫存量) VALUES(isbn,sm,zz,cbs,jg,fbl,kcl)PL
21、/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程(2) 對BOOK表中的一條記錄進行修改USE XSBOOKCREATE PROCEDURE book_update isbn char(16),sm char(26),zz char(8), cbs char(20),jg float(8),fbl int,kcl int AS UPDATE book SET 書名=sm,作者=zz,出版社=cbs,價格=jg,復(fù)本量=fbl,庫存量=kcl WHERE ISBN=isbn PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程(3) 刪除BOOK表中的一條記錄USE XSBOOKCREATE PROCEDU
22、RE book_delete isbn char(16),flag int output AS IF EXISTS(SELECT * FROM BOOK WHERE ISBN=isbn and 復(fù)本量=庫存量) BEGIN DELETE FROM book WHERE ISBN=isbn SET flag=0 /*表示已刪除*/ END ELSE SET flag=1 /*表示不能刪除*/ PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程3) 對對JY表進行操作的存儲過程表進行操作的存儲過程在JY表中插入一條記錄(用于“借書”操作)USE XSBOOKCREATE PROCEDURE jy_in
23、sert jszh char(8),isbn char(16),ssh char(10),jssj datetime,flag int OUTPUT AS SET flag=(SELECT 庫存量 FROM BOOK WHERE ISBN=isbn) IF flag0 BEGIN INSERT INTO jy(借書證號,ISBN,索書號,借書時間) VALUES(jszh,isbn,ssh,jssj) END ELSE SET flag=0PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程2. 觸發(fā)器觸發(fā)器1) JY表定義的表定義的INSERT觸發(fā)器觸發(fā)器USE XSBOOKCREATE TRIG
24、GER tjy_insert ON jy FOR INSERT AS BEGIN UPDATE XS SET 借書數(shù)=借書數(shù)+1 WHERE XS.借書證號 IN (SELECT inserted.借書證號 FROM inserted) UPDATE BOOK SET 庫存量=庫存量-1 WHERE BOOK.ISBN IN (SELECT inserted.ISBN FROM inserted) END PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程2) 對對JY表定義的表定義的DELETE觸發(fā)器觸發(fā)器USE XSBOOKCREATE TRIGGER tjy_delete on jy FOR
25、 DELETE AS BEGIN UPDATE XS SET 借書數(shù)=借書數(shù)-1 WHERE XS.借書證號 IN (SELECT deleted.借書證號 FROM deleted) UPDATE BOOK SET 庫存量=庫存量+1 WHERE BOOK.ISBN IN (SELECT deleted.ISBN FROM deleted) ENDPL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程 創(chuàng)建存儲過程 CREATE Procedure 過程名(過程名(參數(shù)參數(shù)1,參數(shù),參數(shù)2,) AS ; 執(zhí)行存儲過程 CALL/PERFORM Procedure 過程名過程名(參數(shù)參數(shù)1,參數(shù),參數(shù)
26、2,); 刪除存儲過程DROP Procedure 過程名過程名();PL/SQL第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程數(shù)據(jù)庫編程 不同RDBMS存在差異; 在某一個DBMS下編寫的應(yīng)用程序不能在另一個DBMS下運行,數(shù)據(jù)庫應(yīng)用程序的可移植性比較差; 許多應(yīng)用程序需要共享多個部門的數(shù)據(jù)資源,訪問不同的RDBMS。第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程Embedded EquipmentlinuxPC ServerWindowsMilitary Application System數(shù)據(jù)庫編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程 n研究和開發(fā)連接不同研究和開發(fā)連接不同RDBMS的方法、技的方法、技術(shù)和軟件,
27、使數(shù)據(jù)庫系統(tǒng)術(shù)和軟件,使數(shù)據(jù)庫系統(tǒng)“開放開放”,能夠,能夠”數(shù)據(jù)庫互聯(lián)數(shù)據(jù)庫互聯(lián)“。n1992年年microsoft公司推出開放服務(wù)體系公司推出開放服務(wù)體系(WOSA)中有關(guān)數(shù)據(jù)庫的一個組成部分中有關(guān)數(shù)據(jù)庫的一個組成部分ODBC(Open DataBase Connectivity,開放開放數(shù)據(jù)庫互連數(shù)據(jù)庫互連)產(chǎn)品。產(chǎn)品。n如何解決?如何解決? 數(shù)據(jù)庫編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程ODBC編程編程 ODBC(Open DataBase Connectivity,開放數(shù)據(jù)庫互連)是數(shù)據(jù)庫訪問標準接口。 建立一個公共的、與數(shù)據(jù)庫無關(guān)的應(yīng)用程序編建立一個公共的、與數(shù)據(jù)庫無關(guān)的應(yīng)用程序編程接
28、口(程接口(Application Programming Interface,簡記為簡記為API);); 公共接口公共接口API提供了一組規(guī)范提供了一組規(guī)范 規(guī)范應(yīng)用開發(fā)規(guī)范應(yīng)用開發(fā) 規(guī)范規(guī)范RDBMS應(yīng)用接口應(yīng)用接口第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程 利用ODBC所開發(fā)的應(yīng)用程序具有數(shù)據(jù)庫無關(guān)性,程序員不必修改應(yīng)用程序源代碼就可以實現(xiàn)對不同DBMS的訪問,而且可以同時存取多個數(shù)據(jù)庫中的數(shù)據(jù)。 ODBC是為最大的互操作是為最大的互操作(interoperability)而設(shè)而設(shè)計的,即一個應(yīng)用程序可使用相同的接口訪問不同的計的,即一個應(yīng)用程序可使用相同的接口訪問不同的DBMS。ODBC編程編
29、程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程ODBC應(yīng)用系統(tǒng)的體系結(jié)構(gòu)應(yīng)用系統(tǒng)的體系結(jié)構(gòu) networkDriver(SQL Server) ApplicationDriver ManagerSQL ServerDriver(MySQL) MySQLDriver(Oracle) OracleODBC APIODBC編程編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程ODBC編程編程應(yīng)用程序應(yīng)用程序提供用戶提供用戶界面和應(yīng)用邏輯,界面和應(yīng)用邏輯,調(diào)用調(diào)用ODBC API與與數(shù)據(jù)庫進行交互。數(shù)據(jù)庫進行交互。 networkDriver(SQL Server) ApplicationDriver ManagerSQL
30、 ServerDriver(MySQL) MySQLDriver(Oracle) OracleODBC APIODBC應(yīng)用系統(tǒng)的體系結(jié)構(gòu)應(yīng)用系統(tǒng)的體系結(jié)構(gòu)第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程 應(yīng)用程序調(diào)用ODBC API與數(shù)據(jù)庫進行交互的操作包括: 建立數(shù)據(jù)庫連接建立數(shù)據(jù)庫連接 向數(shù)據(jù)庫發(fā)送向數(shù)據(jù)庫發(fā)送SQL語句語句 獲取數(shù)據(jù)庫操作結(jié)果獲取數(shù)據(jù)庫操作結(jié)果 斷開與數(shù)據(jù)庫的連接斷開與數(shù)據(jù)庫的連接ODBC編程編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程ODBC編程編程ODBC驅(qū)動管理器驅(qū)動管理器負責(zé)負責(zé)在運行時根據(jù)應(yīng)用程序在運行時根據(jù)應(yīng)用程序的訪問要求,搜索相應(yīng)的訪問要求,搜索相應(yīng)的驅(qū)動程序,并動態(tài)裝的驅(qū)動
31、程序,并動態(tài)裝入,將用戶的數(shù)據(jù)訪問入,將用戶的數(shù)據(jù)訪問傳遞給驅(qū)動程序來執(zhí)行。傳遞給驅(qū)動程序來執(zhí)行。 networkDriver(SQL Server) ApplicationDriver ManagerSQL ServerDriver(MySQL) MySQLDriver(Oracle) OracleODBC APIODBC應(yīng)用系統(tǒng)的體系結(jié)構(gòu)應(yīng)用系統(tǒng)的體系結(jié)構(gòu)第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程 驅(qū)動程序管理器由微軟公司提供,它包含在ODBC32.DLL中。 它管理應(yīng)用程序和驅(qū)動程序之間的通信,主要功能包括:選擇和連接正確的驅(qū)動程序,裝載選擇和連接正確的驅(qū)動程序,裝載ODBC驅(qū)動程序;驅(qū)動程序;
32、管理數(shù)據(jù)源(驅(qū)動類型和數(shù)據(jù)庫服務(wù)器地管理數(shù)據(jù)源(驅(qū)動類型和數(shù)據(jù)庫服務(wù)器地址信息);址信息);檢查檢查ODBC調(diào)用參數(shù)的合法性及記錄調(diào)用參數(shù)的合法性及記錄ODBC函數(shù)的調(diào)用。函數(shù)的調(diào)用。ODBC編程編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程ODBC編程編程驅(qū)動程序驅(qū)動程序?qū)崿F(xiàn)對數(shù)據(jù)源實現(xiàn)對數(shù)據(jù)源的各種操作,與數(shù)據(jù)庫的各種操作,與數(shù)據(jù)庫建立連接并向建立連接并向DBMS提提交數(shù)據(jù)操作請求交數(shù)據(jù)操作請求 networkDriver(SQL Server) ApplicationDriver ManagerSQL ServerDriver(MySQL) MySQLDriver(Oracle) OracleO
33、DBC APIODBC應(yīng)用系統(tǒng)的體系結(jié)構(gòu)應(yīng)用系統(tǒng)的體系結(jié)構(gòu)第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程ODBC編程編程數(shù)據(jù)源數(shù)據(jù)源是與具體數(shù)據(jù)庫是與具體數(shù)據(jù)庫建立的連接的抽象,用建立的連接的抽象,用數(shù)據(jù)源名代表用戶名、數(shù)據(jù)源名代表用戶名、服務(wù)器名、所連接的數(shù)服務(wù)器名、所連接的數(shù)據(jù)庫名等。據(jù)庫名等。 networkDriver(SQL Server) ApplicationDriver ManagerSQL ServerDriver(MySQL) MySQLDriver(Oracle) OracleODBC APIODBC應(yīng)用系統(tǒng)的體系結(jié)構(gòu)應(yīng)用系統(tǒng)的體系結(jié)構(gòu)第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程lODBC A
34、PI ODBC3.0標準提供了76個函數(shù)接口(API),按其功能大致可以分為:分配和釋放分配和釋放環(huán)境句柄、連接句柄、語句句柄環(huán)境句柄、連接句柄、語句句柄函數(shù)函數(shù)連接函數(shù)連接函數(shù)與信息相關(guān)的函數(shù)與信息相關(guān)的函數(shù)事務(wù)處理函數(shù)事務(wù)處理函數(shù)執(zhí)行相關(guān)函數(shù)執(zhí)行相關(guān)函數(shù)編目函數(shù)。應(yīng)用程序通過對編目函數(shù)的調(diào)用來獲取編目函數(shù)。應(yīng)用程序通過對編目函數(shù)的調(diào)用來獲取數(shù)據(jù)字典的信息如權(quán)限、表結(jié)構(gòu)等。數(shù)據(jù)字典的信息如權(quán)限、表結(jié)構(gòu)等。 ODBC編程編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程句柄(handle): 在在ODBCODBC開發(fā)的過程中,開發(fā)的過程中,ODBCODBC驅(qū)動管理器根據(jù)應(yīng)驅(qū)動管理器根據(jù)應(yīng)用程序的請求,為每
35、個驅(qū)動程序提供一塊內(nèi)存空用程序的請求,為每個驅(qū)動程序提供一塊內(nèi)存空間,用以存儲相關(guān)的間,用以存儲相關(guān)的ODBCODBC環(huán)境、每個連接以及每環(huán)境、每個連接以及每條條SQLSQL語句的相關(guān)信息,并把指向這些內(nèi)存空間的語句的相關(guān)信息,并把指向這些內(nèi)存空間的地址作為變量返回給應(yīng)用程序。句柄就是這些在地址作為變量返回給應(yīng)用程序。句柄就是這些在應(yīng)用程序中使用的變量。應(yīng)用程序中使用的變量。ODBC編程編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程句柄(handle): 32位整數(shù)值,代表一個指針,用于標識一個特定的對象。 環(huán)境句柄環(huán)境句柄:定義一個數(shù)據(jù)庫環(huán)境,用以存儲有關(guān):定義一個數(shù)據(jù)庫環(huán)境,用以存儲有關(guān)數(shù)據(jù)庫環(huán)境
36、信息。其數(shù)據(jù)類型為數(shù)據(jù)庫環(huán)境信息。其數(shù)據(jù)類型為HENVHENV。 連接句柄連接句柄:定義一個數(shù)據(jù)庫連接,用以存儲有關(guān):定義一個數(shù)據(jù)庫連接,用以存儲有關(guān)數(shù)據(jù)庫連接的信息,其數(shù)據(jù)類型為數(shù)據(jù)庫連接的信息,其數(shù)據(jù)類型為HDBCHDBC。 語句句柄語句句柄:定義一條:定義一條SQLSQL語句,其數(shù)據(jù)類型為語句,其數(shù)據(jù)類型為HSTMTHSTMT。ODBC編程編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程為什么需要句柄?ConnectDB(SQLServer_DSN);ConnectDB(MySQL_DSN);ExecSQL(“select * from odbc”)handle1 = ConnectDB(SQLS
37、erver_DSN);handle2 = ConnectDB(MySQL_DSN);ExecSQL(handle1,“select * from odbc”);ExecSQL(handle2,“select * from odbc”);ODBC編程編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程ODBCODBC應(yīng)用程序應(yīng)用程序環(huán)境句柄環(huán)境句柄連接句柄連接句柄數(shù)據(jù)源數(shù)據(jù)源語句句柄語句句柄n n1 1n n1 11 1n n1 11 1各對象之間的關(guān)系ODBC編程編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程ODBC編程編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程配置數(shù)據(jù)源初始化環(huán)境建立連接分配語句句柄執(zhí)行SQL語句有無
38、結(jié)果集有無結(jié)果集有無結(jié)果集處理ODBC編程編程ODBC工作流程工作流程配置數(shù)據(jù)源又兩種方法:配置數(shù)據(jù)源又兩種方法:(1)運行數(shù)據(jù)源管理工具進行配)運行數(shù)據(jù)源管理工具進行配置置(2)使用)使用Driver Manager提供的提供的ConfigDsn函數(shù)來增加、修改函數(shù)來增加、修改或刪除數(shù)據(jù)源或刪除數(shù)據(jù)源。第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程“ODBC”數(shù)據(jù)源管理器界面數(shù)據(jù)源管理器界面 “ODBC”數(shù)據(jù)源的數(shù)據(jù)源的File DSN界面界面 ODBC編程編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程 ODBC數(shù)據(jù)源驅(qū)動程序選擇窗口數(shù)據(jù)源驅(qū)動程序選擇窗口 ODBC數(shù)據(jù)源名稱輸入界面數(shù)據(jù)源名稱輸入界面 ODBC
39、編程編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程指定指定SQL Server服務(wù)器的界面服務(wù)器的界面 選擇連接的數(shù)據(jù)庫選擇連接的數(shù)據(jù)庫ODBC編程編程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程SQLAllocEnv()SQLAllocConnect()配置數(shù)據(jù)源初始化環(huán)境建立連接分配語句句柄執(zhí)行SQL語句有無結(jié)果集有無結(jié)果集有無結(jié)果集處理ODBC編程編程ODBC工作流程工作流程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程SQLConnect()配置數(shù)據(jù)源初始化環(huán)境建立連接分配語句句柄執(zhí)行SQL語句有無結(jié)果集有無結(jié)果集有無結(jié)果集處理ODBC編程編程ODBC工作流程工作流程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程SQLAllo
40、cStmt()配置數(shù)據(jù)源初始化環(huán)境建立連接分配語句句柄執(zhí)行SQL語句有無結(jié)果集有無結(jié)果集有無結(jié)果集處理ODBC編程編程ODBC工作流程工作流程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程SQLExecDirect()配置數(shù)據(jù)源初始化環(huán)境建立連接分配語句句柄執(zhí)行SQL語句有無結(jié)果集有無結(jié)果集有無結(jié)果集處理ODBC編程編程ODBC工作流程工作流程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程SQLFetch ()配置數(shù)據(jù)源初始化環(huán)境建立連接分配語句句柄執(zhí)行SQL語句有無結(jié)果集有無結(jié)果集有無結(jié)果集處理ODBC編程編程語句句柄存放語句句柄存放SQLSQL語句執(zhí)行結(jié)果。語句執(zhí)行結(jié)果。通過游標訪問結(jié)果集,游標分為通過游標訪問結(jié)
41、果集,游標分為forward-onlyforward-only游標和可滾動游標游標和可滾動游標(scrollscroll) 當結(jié)果集剛剛生成時,游標指向當結(jié)果集剛剛生成時,游標指向第一行數(shù)據(jù)之前第一行數(shù)據(jù)之前ODBC工作流程工作流程第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程RETCODE ret; /ODBC返回代碼HENV henv; /環(huán)境句柄HDBC hdbc; /連接句柄HSTMT hstmt; /語句句柄SQLCHAR sData255; /接收數(shù)據(jù)SDWORD cbData; /實際接收的數(shù)據(jù)長度SQLCHAR sDSName=libraryaccess; /數(shù)據(jù)源名ODBC編程編程 示例: 定義句柄和環(huán)境變量定義句柄和環(huán)境變量第第20講講 數(shù)據(jù)庫編程數(shù)據(jù)庫編程SQLAllocEnv(&henv);SQLAllocConnect(henv,&hdbc);ret=SQLConnect(hdbc,sDSName,SQL_NTS, NULL,0,NULL,0);ret=SQLAllocStmt(hdbc,&hstmt);ODBC編程編程 示例: 獲得句柄,建立連接獲
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)化通風(fēng)空調(diào)安裝項目協(xié)議2024版A版
- 三方債務(wù)責(zé)任轉(zhuǎn)移協(xié)議2024版
- 2025年度農(nóng)業(yè)園區(qū)場地租賃安全管理合同范本4篇
- 專業(yè)勞務(wù)分包協(xié)議(2024年版)樣本版A版
- 二零二四實習(xí)生就業(yè)權(quán)益與培訓(xùn)協(xié)議范本規(guī)范5篇
- 2025年度測繪數(shù)據(jù)安全保密協(xié)議4篇
- 專業(yè)標識標牌定制及施工服務(wù)協(xié)議版B版
- 專業(yè)攝影委托協(xié)議細則(2024年)版B版
- 2024物業(yè)管理權(quán)轉(zhuǎn)讓服務(wù)合同
- 2024版食品安全購銷合作合同范本一
- 微機原理與接口技術(shù)考試試題及答案(綜合-必看)
- 勞務(wù)投標技術(shù)標
- 研發(fā)管理咨詢項目建議書
- 濕瘡的中醫(yī)護理常規(guī)課件
- 轉(zhuǎn)錢委托書授權(quán)書范本
- 一種配網(wǎng)高空作業(yè)智能安全帶及預(yù)警系統(tǒng)的制作方法
- 某墓園物業(yè)管理日常管護投標方案
- 蘇教版六年級數(shù)學(xué)上冊集體備課記載表
- 內(nèi)蒙古匯能煤電集團有限公司長灘露天煤礦礦山地質(zhì)環(huán)境保護與土地復(fù)墾方案
- 22S702 室外排水設(shè)施設(shè)計與施工-鋼筋混凝土化糞池
- 2013日產(chǎn)天籟全電路圖維修手冊45車身控制系統(tǒng)
評論
0/150
提交評論