第十二章數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)_第1頁(yè)
第十二章數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)_第2頁(yè)
第十二章數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)_第3頁(yè)
第十二章數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)_第4頁(yè)
第十二章數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第十二章第十二章 數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)p12.1 嵌入式SQL p12.2 基于OLE DB/ADO的數(shù)據(jù)庫(kù)開(kāi)發(fā)方法p12.3 基于JDBC技術(shù)的數(shù)據(jù)庫(kù)開(kāi)發(fā)方法 p12.4 SQLJ及其在數(shù)據(jù)庫(kù)開(kāi)發(fā)中的應(yīng)用 212.1 12.1 嵌入式嵌入式SQLp一、嵌入式SQL概述p二、嵌入式SQL的一般形式p三、嵌入式SQL語(yǔ)句和主語(yǔ)言之間的通信p四、不用游標(biāo)的SQL語(yǔ)句p五、使用游標(biāo)的SQL語(yǔ)句3一、嵌入式一、嵌入式SQL概述概述p使用嵌入式SQL的原因nSQL語(yǔ)言不便于進(jìn)行事務(wù)處理中的流程控制;n普通編程語(yǔ)言在涉及數(shù)據(jù)庫(kù)的操作時(shí),不能高效率地進(jìn)行數(shù)據(jù)的存取。n將SQL語(yǔ)句嵌入到普通編程語(yǔ)言

2、中使用,很好地結(jié)合了編程語(yǔ)言的過(guò)程性和SQL語(yǔ)言的數(shù)據(jù)操縱能力。p嵌入式SQL語(yǔ)言:嵌入到普通編程語(yǔ)言中的SQL語(yǔ)言p宿主語(yǔ)言:嵌入SQL語(yǔ)句的普通編程語(yǔ)言4一、嵌入式一、嵌入式SQL概述概述pDBMS處理嵌入式SQL語(yǔ)言有兩種方法:n預(yù)編譯方法 使用較多的方法n擴(kuò)充編譯程序法p使用嵌入式SQL,必須解決下列三個(gè)問(wèn)題n讓預(yù)編譯器識(shí)別程序代碼中的SQL語(yǔ)句nDBMS和宿主語(yǔ)言程序能夠進(jìn)行數(shù)據(jù)交換n協(xié)調(diào)好SQL語(yǔ)句和宿主語(yǔ)句對(duì)記錄的處理方式5二、嵌入式二、嵌入式SQL的一般形式的一般形式p開(kāi)始標(biāo)志:EXEC SQLp結(jié)束標(biāo)志:視不同的宿主語(yǔ)言而不同nPL/1和C語(yǔ)言中以“;”作為結(jié)束標(biāo)志nCOBO

3、L語(yǔ)言以 END-EXEC作為結(jié)束標(biāo)志p嵌入式SQL的一般形式: 開(kāi)始標(biāo)志+SQL語(yǔ)句+結(jié)束標(biāo)志p例:交互SQL:DROP TABLE employee, 嵌入到C語(yǔ)言中的寫法是: EXEC SQL DROP TABLE employee;6三、嵌入式三、嵌入式SQL語(yǔ)句和語(yǔ)句和 主語(yǔ)言之間的通信主語(yǔ)言之間的通信p數(shù)據(jù)庫(kù)和源程序工作單元之間通信主要包括:n向主語(yǔ)言傳遞SQL語(yǔ)句的執(zhí)行狀態(tài)信息,使主語(yǔ)言能夠據(jù)此控制程序流程;n主語(yǔ)言向SQL語(yǔ)言提供參數(shù);n將SQL語(yǔ)句查詢數(shù)據(jù)庫(kù)的結(jié)果交主語(yǔ)言進(jìn)一步處理。p采用的通信方式nSQL主語(yǔ)言(SQL執(zhí)行狀態(tài)):SQLCAn主語(yǔ)言SQL(輸入數(shù)據(jù)):主變量

4、nSQL主語(yǔ)言(輸出數(shù)據(jù)):主變量+游標(biāo)7三、嵌入式三、嵌入式SQL語(yǔ)句和語(yǔ)句和 主語(yǔ)言之間的通信主語(yǔ)言之間的通信pSQL通信區(qū)(SQLCA:SQL Communication Area)n將系統(tǒng)當(dāng)前的工作狀態(tài)和運(yùn)行環(huán)境數(shù)據(jù)反饋給主程序n在應(yīng)用程序中的定義:EXEC SQL INCLUDE SQLCA;nSQLCA.SQLCODE是SQLCA的一個(gè)分量,屬于整數(shù)類型,供DBMS向應(yīng)用程序報(bào)告SQL語(yǔ)句的執(zhí)行情況。每執(zhí)行一條SQL語(yǔ)句,返回一個(gè)SQLCODE代碼。8三、嵌入式三、嵌入式SQL語(yǔ)句和語(yǔ)句和 主語(yǔ)言之間的通信主語(yǔ)言之間的通信pSQLCA.SQLCODE代碼nSQLCODE0:SQL語(yǔ)

5、句執(zhí)行成功,無(wú)異常出現(xiàn);nSQLCODE為負(fù)整數(shù):SQL語(yǔ)句執(zhí)行失敗,具體負(fù)值表示錯(cuò)誤的類型;nSQLCODE為正整數(shù),表示SQL語(yǔ)句已執(zhí)行,但出現(xiàn)了意外的情況。如當(dāng)SQLCODE100時(shí)表示語(yǔ)句已執(zhí)行,但無(wú)數(shù)據(jù)可取,如DB中無(wú)滿足條件的記錄。9三、嵌入式三、嵌入式SQL語(yǔ)句和語(yǔ)句和 主語(yǔ)言之間的通信主語(yǔ)言之間的通信p主變量(host variable):是在嵌入式SQL中使用的主語(yǔ)言的程序變量,用來(lái)在輸入和輸出數(shù)據(jù)p主變量聲明: EXEC SQL BEGIN DECLARE SECTION;主變量說(shuō)明段EXEC SQL END DECLARE SECTIONpC語(yǔ)言中主變量聲明舉例:EXEC

6、 SQL BEGIN DECLARE SECTION; int s_no; char s_name30; int s_age;EXEC SQL END DECLARE SECTION10三、嵌入式三、嵌入式SQL語(yǔ)句和語(yǔ)句和 主語(yǔ)言之間的通信主語(yǔ)言之間的通信p主變量使用nSQL語(yǔ)句引用主變量時(shí),變量名前加“:”n在宿主語(yǔ)言中引用主變量時(shí)就無(wú)需再加“:” s_no=101; EXEC SQL select SNAME , SAGE into :s_name , :s_age from STUDENT where SNO = :s_no;11三、嵌入式三、嵌入式SQL語(yǔ)句和語(yǔ)句和 主語(yǔ)言之間的通信

7、主語(yǔ)言之間的通信p指示變量(Indicator Variable)n也是主變量,用來(lái)指示返回給宿主變量的值是否為nulln在DML中,在宿主變量和指示變量之間加( : )或關(guān)鍵字indicator。EXEC SQL BEGIN DECLARE SECTIONint s_no;char s_name30;int s_age;short name_id;short age_id;EXEC SQL END DECLARE SECTIONEXEC SQL select SNAME , SAGE into :s_name : name_id , :s_age: age_id from STUDENT w

8、here SNO = :s_no ; 12三、嵌入式三、嵌入式SQL語(yǔ)句和語(yǔ)句和 主語(yǔ)言之間的通信主語(yǔ)言之間的通信p游標(biāo)(CURSOR):協(xié)調(diào)兩種不同的數(shù)據(jù)處理方式nSQL:面向集合,一條SQL原則上可以產(chǎn)生或處理多條記錄;n主語(yǔ)言:面向記錄,一條語(yǔ)句一次只能處理一個(gè)記錄p游標(biāo)是系統(tǒng)為用戶開(kāi)設(shè)的一個(gè)數(shù)據(jù)緩沖區(qū),存放SQL語(yǔ)句的執(zhí)行結(jié)果。n若一個(gè)SQL語(yǔ)句返回單個(gè)元組,則不用游標(biāo)。n若一個(gè)SQL語(yǔ)句返回多個(gè)元組,則使用游標(biāo)13四、不用游標(biāo)的四、不用游標(biāo)的SQL語(yǔ)句語(yǔ)句p說(shuō)明性語(yǔ)句;p數(shù)據(jù)定義語(yǔ)句;p數(shù)據(jù)控制語(yǔ)句;pINSERT語(yǔ)句;p查詢結(jié)果為單記錄的SELECT語(yǔ)句;p對(duì)滿足條件的當(dāng)前記錄(或

9、記錄集),由系統(tǒng)根據(jù)用戶要求,自動(dòng)進(jìn)行修改或刪除的UPDATE和DELETE語(yǔ)句。14五、使用游標(biāo)的五、使用游標(biāo)的SQL語(yǔ)句語(yǔ)句p需要使用游標(biāo)的語(yǔ)句有:n查詢結(jié)果為多記錄的SELECT語(yǔ)句;n對(duì)滿足條件的結(jié)果集中記錄分別進(jìn)行修改或刪除的UPDATE和DELETE語(yǔ)句。15五、使用游標(biāo)的五、使用游標(biāo)的SQL語(yǔ)句語(yǔ)句p結(jié)果為多記錄的SELECT語(yǔ)句使用游標(biāo)的步驟:n說(shuō)明游標(biāo): EXEC SQL DECLARE CURSOR FOR ;n打開(kāi)游標(biāo):EXEC SQL OPEN ;n推進(jìn)游標(biāo)指針并取當(dāng)前記錄:EXEC SQL FETCH INTO ;n關(guān)閉游標(biāo): EXEC SQL CLOSE 16五、使

10、用游標(biāo)的五、使用游標(biāo)的SQL語(yǔ)句語(yǔ)句p通過(guò)游標(biāo)的更新和刪除步驟通過(guò)游標(biāo)的更新和刪除步驟:n聲明游標(biāo): EXEC SQL DECLARE CURSOR FOR FOR UPDATE OF ;n打開(kāi)游標(biāo):EXEC SQL OPEN ;n推進(jìn)游標(biāo)指針并取當(dāng)前記錄:EXEC SQL FETCH INTO ;n更新或修改記錄EXEC SQL UPDATE SET WHERE CURRENT OF ;EXEC SQL DELETE FROM WHERE CURRENT OF ;n關(guān)閉游標(biāo): EXEC SQL CLOSE 1712.2 基于基于OLE DB/ADO的數(shù)據(jù)的數(shù)據(jù)庫(kù)開(kāi)發(fā)方法庫(kù)開(kāi)發(fā)方法p一、OLE

11、 DBp二、ADO與OLE DB p三、ADO應(yīng)用程序開(kāi)發(fā)18一、一、OLE DBpMicrosoft采用OLE技術(shù)開(kāi)發(fā)的一種新型的數(shù)據(jù)庫(kù)接口程序 p在ODBC技術(shù)的基礎(chǔ)上發(fā)展而來(lái) 191. OLE DB的體系結(jié)構(gòu)pOLE DB主要由三個(gè)層次構(gòu)成:p 數(shù)據(jù)使用者(Data Consumer)p 數(shù)據(jù)服務(wù)提供者(Data Service Provider)p 數(shù)據(jù)提供者(Data Provider)202. OLE DB 工作原理21二、二、ADO與與OLE DB (1 of 2)22二、二、ADO與與OLE DB (2 of 2)p利用ADO訪問(wèn)數(shù)據(jù)庫(kù)的方法與步驟:p 連接數(shù)據(jù)源p 創(chuàng)建SQL

12、查詢命令對(duì)象p 激活命令,產(chǎn)生記錄集p 操作記錄集中的記錄p 更新數(shù)據(jù)源23三、三、ADO應(yīng)用程序開(kāi)發(fā)應(yīng)用程序開(kāi)發(fā)p可以在任何支持COM和自動(dòng)化特性的語(yǔ)言環(huán)境中使用 。p具體應(yīng)用見(jiàn)附件1。2412.3 基于基于JDBC技術(shù)的數(shù)據(jù)庫(kù)開(kāi)技術(shù)的數(shù)據(jù)庫(kù)開(kāi)發(fā)方法發(fā)方法 p一、JDBC驅(qū)動(dòng) p二、JDBC的接口和類 p三、JDBC應(yīng)用程序開(kāi)發(fā) 25一、一、JDBC驅(qū)動(dòng)驅(qū)動(dòng)(1 of 2)Java應(yīng)用程序應(yīng)用程序JDBC驅(qū)動(dòng)程序管理器驅(qū)動(dòng)程序管理器JDBC-ODBC橋驅(qū)動(dòng)程序橋驅(qū)動(dòng)程序MsSQL-ServerJDBC-Sybase驅(qū)動(dòng)程序驅(qū)動(dòng)程序JDBC-Oracle驅(qū)動(dòng)程序驅(qū)動(dòng)程序ODBC橋驅(qū)動(dòng)程序橋驅(qū)動(dòng)

13、程序SybaseSQL-ServerOracleDatabaseJDBC API JDBC driver API26一、一、JDBC驅(qū)動(dòng)驅(qū)動(dòng)(2 of 2)pJDBC驅(qū)動(dòng)程序有以下4類:p JDBC-ODBC橋,將JDBC調(diào)用轉(zhuǎn)化為ODBC(Open Database Connectivity)調(diào)用的“橋梁”,通過(guò)ODBC驅(qū)動(dòng)程序來(lái)提供JDBC對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。p 本機(jī)應(yīng)用編程接口部分Java驅(qū)動(dòng)程序(Native-API Partly-Java Driver),將JDBC調(diào)用轉(zhuǎn)換為基于客戶端API的調(diào)用。p 數(shù)據(jù)庫(kù)中間件的純Java驅(qū)動(dòng)程序(Net-Protocol All-Java Driv

14、er),將JDBC調(diào)用轉(zhuǎn)換成為中間件供應(yīng)商的協(xié)議,然后通過(guò)中間件服務(wù)器將該協(xié)議轉(zhuǎn)換為DBMS協(xié)議。p 直接連接數(shù)據(jù)庫(kù)的純Java驅(qū)動(dòng)程序(Native-Protocol All-Java Driver),將JDBC調(diào)用轉(zhuǎn)換為特定數(shù)據(jù)庫(kù)直接使用的網(wǎng)絡(luò)協(xié)議,這一類驅(qū)動(dòng)程序通常由數(shù)據(jù)庫(kù)廠商自己開(kāi)發(fā)。27二、二、JDBC的接口和類的接口和類(1 of 8)pjava.sql包提供了核心的JDBC API,其中含有訪問(wèn)數(shù)據(jù)庫(kù)的所有類和接口,這個(gè)包與包java.io和java. util以相同的方式形成了Java類庫(kù)的組成部分。 28二、二、JDBC的接口和類的接口和類(2 of 8)p java.sql

15、.DriverManager類 JDBC的管理層,作用于用戶和驅(qū)動(dòng)程序之間,用于管理JDBC驅(qū)動(dòng)程序,并在數(shù)據(jù)庫(kù)和相應(yīng)的驅(qū)動(dòng)程序之間建立連接。 p方法的聲明如下: public static synchronized void Connection getConnection(String url, String user, String password) throws SQLException 29二、二、JDBC的接口和類的接口和類(3 of 8)p Statement類接口 Statement接口用于執(zhí)行一個(gè)靜態(tài)的SQL語(yǔ)句,并得到SQL語(yǔ)句執(zhí)行后的結(jié)果。Statement接口常用的方

16、法為:p ResultSet executeQuery(String sql) throws SQLException p int executeUpdate(String sql) throws SQLExcepttonp void close() throws SQLException 30二、二、JDBC的接口和類的接口和類(4 of 8)p PreparedStatement類 PreparedStatement對(duì)象繼承Statement接口,因此也是用來(lái)執(zhí)行SQL語(yǔ)句的,與Statement接口不同的是,包含于PreparedStatement對(duì)象中的SQL語(yǔ)句具有一個(gè)或多個(gè)輸入(I

17、N)參數(shù)。 31二、二、JDBC的接口和類的接口和類(5 of 8)p CallableStatement類 是PreparedStatement類的子類 對(duì)象用 ParepareCall方法創(chuàng)建 對(duì)象用于執(zhí)行SQL存儲(chǔ)過(guò)程 32二、二、JDBC的接口和類的接口和類(6 of 8)p ResultSet類 提供從數(shù)據(jù)庫(kù)中返回的結(jié)果集 使用該類的getXXX方法得到數(shù)據(jù)庫(kù)記錄集中某個(gè)字段的一條記錄 33二、二、JDBC的接口和類的接口和類(7 of 8)p 其他常用的接口和類 java.sql.SQLException類 java.sql.Driver接口 java.sql.Connection

18、接口 java.sql.Statement接口 java.sql.ResultSet接口34二、二、JDBC的接口和類的接口和類(8 of 8)DriverMangerConnectionstatementResultSetConnectionstatementstatementstatementResultSetResultSet35三、JDBC應(yīng)用程序開(kāi)發(fā)應(yīng)用程序開(kāi)發(fā) 1. 連接數(shù)據(jù)庫(kù)的步驟p 加載驅(qū)動(dòng)程序 p 建立連接p 對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作p 關(guān)閉連接和相應(yīng)的對(duì)象362. 一個(gè)編程實(shí)例p見(jiàn)附件23712.4 SQLJ及其在數(shù)據(jù)庫(kù)開(kāi)發(fā)中的及其在數(shù)據(jù)庫(kù)開(kāi)發(fā)中的應(yīng)用應(yīng)用p一、SQLJ與JDBC比較 p二、SQLJ應(yīng)用程序開(kāi)發(fā)38一、SQLJ與與JDBC比較比較p對(duì)于JAVA數(shù)據(jù)庫(kù)應(yīng)用程序調(diào)用SQL, DB2提供了2種方法,即JDBC和SQLJ。 pJDBC提供給Java一個(gè)動(dòng)態(tài)嵌入式S

溫馨提示

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

評(píng)論

0/150

提交評(píng)論