資源描述:
《數(shù)據(jù)庫應(yīng)用開發(fā) 嵌入式SQL》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第十章數(shù)據(jù)庫應(yīng)用開發(fā)10.1嵌入式SQL10.2基于OLEDB/ADO的數(shù)據(jù)庫開發(fā)方法10.3基于JDBC技術(shù)的數(shù)據(jù)庫開發(fā)方法10.4SQLJ及其在數(shù)據(jù)庫開發(fā)中的應(yīng)用110.1嵌入式SQL一、嵌入式SQL概述二、嵌入式SQL的一般形式三、嵌入式SQL語句和主語言之間的通信四、不用游標(biāo)的SQL語句五、使用游標(biāo)的SQL語句2一、嵌入式SQL概述使用嵌入式SQL的原因SQL語言不便于進(jìn)行事務(wù)處理中的流程控制;普通編程語言在涉及數(shù)據(jù)庫的操作時,不能高效率地進(jìn)行數(shù)據(jù)的存取。將SQL語句嵌入到普通編程語言中使用,很好
2、地結(jié)合了編程語言的過程性和SQL語言的數(shù)據(jù)操縱能力。嵌入式SQL語言:嵌入到普通編程語言中的SQL語言宿主語言:嵌入SQL語句的普通編程語言3一、嵌入式SQL概述DBMS處理嵌入式SQL語言有兩種方法:預(yù)編譯方法—使用較多的方法擴(kuò)充編譯程序法使用嵌入式SQL,必須解決下列三個問題讓預(yù)編譯器識別程序代碼中的SQL語句DBMS和宿主語言程序能夠進(jìn)行數(shù)據(jù)交換協(xié)調(diào)好SQL語句和宿主語句對記錄的處理方式4二、嵌入式SQL的一般形式開始標(biāo)志:EXECSQL結(jié)束標(biāo)志:視不同的宿主語言而不同PL/1和C語言中以“;”作為
3、結(jié)束標(biāo)志COBOL語言以END-EXEC作為結(jié)束標(biāo)志嵌入式SQL的一般形式:開始標(biāo)志+SQL語句+結(jié)束標(biāo)志例:交互SQL:DROPTABLEemployee,嵌入到C語言中的寫法是:EXECSQLDROPTABLEemployee;5三、嵌入式SQL語句和主語言之間的通信數(shù)據(jù)庫和源程序工作單元之間通信主要包括:向主語言傳遞SQL語句的執(zhí)行狀態(tài)信息,使主語言能夠據(jù)此控制程序流程;主語言向SQL語言提供參數(shù);將SQL語句查詢數(shù)據(jù)庫的結(jié)果交主語言進(jìn)一步處理。采用的通信方式SQL—>主語言(SQL執(zhí)行狀態(tài)):S
4、QLCA主語言—>SQL(輸入數(shù)據(jù)):主變量SQL—>主語言(輸出數(shù)據(jù)):主變量+游標(biāo)6三、嵌入式SQL語句和主語言之間的通信SQL通信區(qū)(SQLCA:SQLCommunicationArea)將系統(tǒng)當(dāng)前的工作狀態(tài)和運(yùn)行環(huán)境數(shù)據(jù)反饋給主程序在應(yīng)用程序中的定義:EXECSQLINCLUDESQLCA;SQLCA.SQLCODE是SQLCA的一個分量,屬于整數(shù)類型,供DBMS向應(yīng)用程序報告SQL語句的執(zhí)行情況。每執(zhí)行一條SQL語句,返回一個SQLCODE代碼。7三、嵌入式SQL語句和主語言之間的通信SQL
5、CA.SQLCODE代碼SQLCODE=0:SQL語句執(zhí)行成功,無異常出現(xiàn);SQLCODE為負(fù)整數(shù):SQL語句執(zhí)行失敗,具體負(fù)值表示錯誤的類型;SQLCODE為正整數(shù),表示SQL語句已執(zhí)行,但出現(xiàn)了意外的情況。如當(dāng)SQLCODE=100時表示語句已執(zhí)行,但無數(shù)據(jù)可取,如DB中無滿足條件的記錄。8三、嵌入式SQL語句和主語言之間的通信主變量(hostvariable):是在嵌入式SQL中使用的主語言的程序變量,用來在輸入和輸出數(shù)據(jù)主變量聲明:EXECSQLBEGINDECLARESECTION;〈主變量說
6、明段〉EXECSQLENDDECLARESECTIONC語言中主變量聲明舉例:EXECSQLBEGINDECLARESECTION;ints_no;chars_name[30];ints_age;EXECSQLENDDECLARESECTION9三、嵌入式SQL語句和主語言之間的通信主變量使用SQL語句引用主變量時,變量名前加“:”在宿主語言中引用主變量時就無需再加“:”s_no=101;EXECSQLselectSNAME,SAGEinto:s_name,:s_agefromSTUDENTwhereS
7、NO=:s_no;10三、嵌入式SQL語句和主語言之間的通信指示變量(IndicatorVariable)也是主變量,用來指示返回給宿主變量的值是否為null在DML中,在宿主變量和指示變量之間加(:)或關(guān)鍵字indicator。EXECSQLBEGINDECLARESECTIONints_no;chars_name[30];ints_age;shortname_id;shortage_id;EXECSQLENDDECLARESECTIONEXECSQLselectSNAME,SAGEinto:s_na
8、me:name_id,:s_age:age_idfromSTUDENTwhereSNO=:s_no;11三、嵌入式SQL語句和主語言之間的通信游標(biāo)(CURSOR):協(xié)調(diào)兩種不同的數(shù)據(jù)處理方式SQL:面向集合,一條SQL原則上可以產(chǎn)生或處理多條記錄;主語言:面向記錄,一條語句一次只能處理一個記錄游標(biāo)是系統(tǒng)為用戶開設(shè)的一個數(shù)據(jù)緩沖區(qū),存放SQL語句的執(zhí)行結(jié)果。若一個SQL語句返回單個元組,則不用游標(biāo)。若一個SQL語句返回多個元組