DB2_UDB_編程及存儲(chǔ)過(guò)程_第1頁(yè)
DB2_UDB_編程及存儲(chǔ)過(guò)程_第2頁(yè)
DB2_UDB_編程及存儲(chǔ)過(guò)程_第3頁(yè)
DB2_UDB_編程及存儲(chǔ)過(guò)程_第4頁(yè)
DB2_UDB_編程及存儲(chǔ)過(guò)程_第5頁(yè)
已閱讀5頁(yè),還剩151頁(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、DB2 UDB 編程及存儲(chǔ)過(guò)程編程及存儲(chǔ)過(guò)程第第 1 卷:卷:DB2 編程基礎(chǔ)編程基礎(chǔ)和和 SQL課程描述課程描述本課程是用來(lái)向?qū)W生介紹 DB2 UDB 編程及存儲(chǔ)過(guò)程的課程的范圍是提供對(duì) DB2 UDB 編程相關(guān)概念的一個(gè)基本的理解。也介紹了存儲(chǔ)過(guò)程、UDT 和 UDF預(yù)備條件預(yù)備條件要想從本課程中獲得最多知識(shí),學(xué)習(xí)者必須滿足下列條件。不滿足這些先決條件的學(xué)習(xí)者可能不能完全理解并利用本課程所提供的材料 明晰的 RDBMS 基本概念和術(shù)語(yǔ) 用 Java 編寫的有針對(duì)性的代碼對(duì)象程序預(yù)備條件(續(xù))預(yù)備條件(續(xù))設(shè)計(jì)并開(kāi)發(fā) JDBC 程序這些技能可通過(guò)完成下列課程的學(xué)習(xí)獲得關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RD

2、BMS)概念和結(jié)構(gòu)化查詢語(yǔ)言(SQL)核心 Java 語(yǔ)言 課程目標(biāo)課程目標(biāo)在完成本課程的學(xué)習(xí)后,您應(yīng)該能夠: 描述數(shù)據(jù)庫(kù)應(yīng)用程序并應(yīng)用 DB2 編程的基本原理 理解與 DB2 交互的 Java 程序和 applet 利用應(yīng)用程序包工作并將其劃分為邏輯單元 定義觸發(fā)器并對(duì)各種數(shù)據(jù)庫(kù)對(duì)象使用觸發(fā)器課程目標(biāo)課程目標(biāo) . 2在完成本課程的學(xué)習(xí)后,您應(yīng)該能夠: 理解嵌入式 SQL 概念并使用 SQLJ 語(yǔ)法 了解到存儲(chǔ)過(guò)程與 SQL 過(guò)程化語(yǔ)言結(jié)合使用的需要 使用存儲(chǔ)過(guò)程構(gòu)建器利用 SQL/PL 開(kāi)發(fā)存儲(chǔ)過(guò)程 采用 SQL/PL 編寫服務(wù)器程序、創(chuàng)建程序,并注冊(cè)到 DB2 中 用 Java 開(kāi)發(fā)存儲(chǔ)過(guò)

3、程服務(wù)器課程目標(biāo)課程目標(biāo) 3在完成本課程的學(xué)習(xí)后,您應(yīng)該能夠: 理解用戶定義數(shù)據(jù)類型及用戶定義函數(shù)的概念 對(duì)大對(duì)象利用表函數(shù)和數(shù)據(jù)操作 定義并行控制和數(shù)據(jù)庫(kù)恢復(fù)處理 闡明已確認(rèn)的協(xié)議并提供一個(gè)故障的簡(jiǎn)要分類 理解描述支持系統(tǒng)及事務(wù)處理 日程安排日程安排本課程每一單元的課時(shí)數(shù)均為 2 小時(shí)第第 1 單元單元用用 Java 進(jìn)行進(jìn)行 DB2 的編程的編程 學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)在完成本單元的學(xué)習(xí)后,您將能夠: 解釋各種數(shù)據(jù)庫(kù)應(yīng)用程序 識(shí)別不同的應(yīng)用開(kāi)發(fā)環(huán)境 描述 DB2 編程的各種基本原理 解釋 JDBC 和 SQLJ 編程 SQL 的局限性的局限性不像 C、C+ 或 Java 具有能編寫復(fù)雜程序的能力

4、只是一種簡(jiǎn)單的查詢語(yǔ)言能力局限于表間關(guān)聯(lián)數(shù)據(jù)及較快的數(shù)據(jù)檢索 不支持控制結(jié)構(gòu)或循環(huán)結(jié)構(gòu)應(yīng)用開(kāi)發(fā)環(huán)境應(yīng)用開(kāi)發(fā)環(huán)境 在 DB2 服務(wù)器或客戶機(jī)上開(kāi)發(fā)及部署應(yīng)用程序的能力 駐留有 DB2 數(shù)據(jù)庫(kù)的節(jié)點(diǎn)稱為 DB2 服務(wù)器 駐留有 DB2 客戶端實(shí)用程序的節(jié)點(diǎn)則稱為 DB2 客戶機(jī)應(yīng)用程序可以駐留在同時(shí)含有 DB2 的相同機(jī)器上也可駐留在 DB2 客戶機(jī)上客戶機(jī)實(shí)用程序可幫助連接到數(shù)據(jù)庫(kù)上適應(yīng)于應(yīng)用開(kāi)發(fā)環(huán)境的軟件適應(yīng)于應(yīng)用開(kāi)發(fā)環(huán)境的軟件 編程語(yǔ)言環(huán)境DB2通用數(shù)據(jù)庫(kù)DB2客戶端實(shí)用程序可用的編程方法可用的編程方法嵌入式 SQL調(diào)用層接口(CLI)Java 接口JDBCSQLJ其它接口ODBC 終端用戶

5、工具嵌入式嵌入式 SQL SQL受缺乏程序能力的局限能在編程語(yǔ)言中嵌入 SQL 語(yǔ)句嵌入式 SQL 應(yīng)用程序使用 C/C+、COBOL、FORTRAN、Java(SQLJ)以及 REXX 語(yǔ)言開(kāi)發(fā)成為可能 靜態(tài)嵌入式 SQL 動(dòng)態(tài)嵌入式 SQL 調(diào)用層接口調(diào)用層接口(CLI) 應(yīng)用程序訪問(wèn) DB2 數(shù)據(jù)庫(kù)的公共編程接口基于 X/Open 標(biāo)準(zhǔn) 用一種編程語(yǔ)言如 C/C+ 編寫 DB2 為許多語(yǔ)言提供了應(yīng)用程序編程接口(API)??梢酝ㄟ^(guò)適當(dāng)?shù)膮?shù)直接調(diào)用各種 API 函數(shù) 比較比較 CLI 和嵌入式和嵌入式 SQLCLI嵌入式嵌入式 SQL應(yīng)用程序的移植性較高移植性較在 CLI 中的稍低不需要

6、特定的語(yǔ)言編譯程序需要特定的語(yǔ)言預(yù)編譯程序應(yīng)用程序易于管理如果對(duì)象存在的數(shù)據(jù)庫(kù)中結(jié)構(gòu)改變,需要和數(shù)據(jù)庫(kù)重新綁定DB2 多重釋放中接口一致特定編程語(yǔ)言釋放特殊Java 接口和程序接口和程序Applet應(yīng)用程序ServletJBDCSQLJDB2數(shù)據(jù)庫(kù)其它第三方工具其它第三方工具 DB2數(shù)據(jù)庫(kù)Lotus ScriptPerl DBINet.Data同臺(tái)機(jī)器中的同臺(tái)機(jī)器中的 JDBC 應(yīng)用程序和應(yīng)用程序和 DB2 數(shù)據(jù)庫(kù)服務(wù)器數(shù)據(jù)庫(kù)服務(wù)器 本地機(jī)器本地機(jī)器JDBC 應(yīng)用程序應(yīng)用程序JDBC 驅(qū)動(dòng)程序驅(qū)動(dòng)程序CLI本地?cái)?shù)據(jù)庫(kù)本地?cái)?shù)據(jù)庫(kù)DB2 服務(wù)器安裝服務(wù)器安裝不同機(jī)器上的不同機(jī)器上的 JDBC 應(yīng)用

7、程序和應(yīng)用程序和 DB2 數(shù)據(jù)庫(kù)服務(wù)器數(shù)據(jù)庫(kù)服務(wù)器 客戶機(jī)客戶機(jī)JDBC 應(yīng)用程序應(yīng)用程序JDBC 驅(qū)動(dòng)程序驅(qū)動(dòng)程序CLI遠(yuǎn)程數(shù)據(jù)庫(kù)遠(yuǎn)程數(shù)據(jù)庫(kù)DB2 客戶機(jī)安裝客戶機(jī)安裝服務(wù)器服務(wù)器DB2 服務(wù)器安裝服務(wù)器安裝連接連接 JDBC 服務(wù)器的服務(wù)器的 JDBC Applet HTTP 服務(wù)器服務(wù)器HTTP 服務(wù)器服務(wù)器遠(yuǎn)程數(shù)據(jù)庫(kù)遠(yuǎn)程數(shù)據(jù)庫(kù)DB2 安裝安裝HTTP 客戶機(jī)客戶機(jī)HTTP 瀏覽器瀏覽器JDBC AppletJDBC Applet 服務(wù)器服務(wù)器CLI本地?cái)?shù)據(jù)庫(kù)本地?cái)?shù)據(jù)庫(kù)HTTPTCP/IP 套接字套接字靜態(tài)靜態(tài) SQL 語(yǔ)句語(yǔ)句在預(yù)先知道訪問(wèn)的語(yǔ)句類型和數(shù)據(jù)庫(kù)對(duì)象的時(shí)候使用語(yǔ)句類型可以是

8、 DDL 語(yǔ)句(例如 CREATE) 也可以是 DML 語(yǔ)句(例如 INSERT 、 UPDATE、 DELETE 或 SELECT) 數(shù)據(jù)庫(kù)對(duì)象可以是表視圖以及訪問(wèn)的各個(gè)列唯一未知的是語(yǔ)句正在搜索或修改的數(shù)據(jù)值 動(dòng)態(tài)動(dòng)態(tài) SQL 語(yǔ)句語(yǔ)句編譯時(shí)不需要任何語(yǔ)句類型和數(shù)據(jù)庫(kù)對(duì)象信息在運(yùn)行時(shí)間構(gòu)建并發(fā)送到數(shù)據(jù)庫(kù) 在運(yùn)行時(shí)間構(gòu)建并發(fā)送到數(shù)據(jù)庫(kù) 訪問(wèn)路徑在運(yùn)行時(shí)間構(gòu)建 在運(yùn)行時(shí)執(zhí)行查詢JDBC API 支持動(dòng)態(tài) SQL 語(yǔ)句SQLJ 編程編程創(chuàng)建一個(gè) SQLJ源文件轉(zhuǎn)換到本地機(jī)Java 源代碼創(chuàng)建DB2 數(shù)據(jù)包嵌入式SQL使用 SQLJ翻譯器使用db2profc JDBC API應(yīng)用程序?qū)討?yīng)用程序?qū)域?qū)

9、動(dòng)程序?qū)域?qū)動(dòng)程序?qū)訑?shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)人員使用驅(qū)動(dòng)程序供應(yīng)商執(zhí)行Java 編程的問(wèn)題說(shuō)明編程的問(wèn)題說(shuō)明用戶調(diào)用應(yīng)用程序輸入用戶標(biāo)識(shí)、密碼將用戶標(biāo)識(shí)、密碼作為輸入對(duì)認(rèn)證表進(jìn)行檢查如果檢查成功,歡迎用戶進(jìn)入系統(tǒng)Java 應(yīng)用程序代碼應(yīng)用程序代碼import java.sql.*;class DB2Appl public static void main(String argv) / 聲明塊從這里開(kāi)始Connection con = null;/ URL 是 jdbc:db2:dbname / 在這個(gè)例子中,dbname 為 sampleString url = jdbc:db2:sample;Java

10、應(yīng)用程序代碼應(yīng)用程序代碼 2/數(shù)據(jù)庫(kù)連接的用戶標(biāo)識(shí)和密碼 String userid = db2admin;String passwd = db2admin;String username=;String password=;ResultSet rs=null;/聲明塊在這里結(jié)束 Java 應(yīng)用程序代碼應(yīng)用程序代碼 3try /程序塊 1 開(kāi)始/ 需要裝載 DB2 JDBC 驅(qū)動(dòng)程序Class.forName(COM.ibm.db2.jdbc.app.DB2Driver).newInstance();con = DriverManager.getConnection(url, userid,

11、passwd);/ 程序塊 1 結(jié)束 Java 應(yīng)用程序代碼應(yīng)用程序代碼 4/ 程序塊 2 開(kāi)始/ 從用戶處接受一個(gè)有效的用戶名和密碼if (argv.length = 0) System.out.println(username and password fields cannot be empty);System.exit(0);else if(argv.length = 2) username=argv0;password=argv1; Java 應(yīng)用程序代碼應(yīng)用程序代碼 5else/If the fields are emptySystem.out.println(username a

12、nd password fields cannot be empty);System.exit(0);/ 程序塊 2 結(jié)束Java 應(yīng)用程序代碼應(yīng)用程序代碼 6/ 程序塊 3 開(kāi)始 / 創(chuàng)建了語(yǔ)句對(duì)象 Statement stmt = con.createStatement(); /檢查記錄是否在表中/執(zhí)行了 SQL 查詢,置入結(jié)果集rs=stmt.executeQuery(SELECT count(*) fromAuthenticate where userid=+username+ and password=+password+);rs.next(); Java 應(yīng)用程序代碼應(yīng)用程序代碼

13、7if(rs.getInt(1) 0)System.out.println(Thank u for logging in);elseSystem.out.println(Invalid username and password);rs.close();stmt.close();/程序塊 3 結(jié)束。 catch( Exception e ) System.out.println(e); Java 應(yīng)用程序屏幕快照應(yīng)用程序屏幕快照 Java Applet 屏幕快照屏幕快照 Java Applet 屏幕快照屏幕快照 2 Java Applet 屏幕快照屏幕快照 3 小結(jié)小結(jié)既然您已經(jīng)完成了本單元的

14、學(xué)習(xí),您應(yīng)該能夠: 解釋各種數(shù)據(jù)庫(kù)應(yīng)用程序 識(shí)別不同的應(yīng)用開(kāi)發(fā)環(huán)境 描述 DB2 編程的各種基本原理 解釋 JDBC 和 SQLJ 編程 第第 2 單元單元使用使用 Java 實(shí)驗(yàn)進(jìn)行實(shí)驗(yàn)進(jìn)行 DB2 編程編程實(shí)驗(yàn)練習(xí)實(shí)驗(yàn)練習(xí)第第 3 單元單元構(gòu)建構(gòu)建 DB2 應(yīng)用程序的概念應(yīng)用程序的概念 學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)在完成本單元的學(xué)習(xí)后,您將能夠: 明確部分基本的應(yīng)用程序構(gòu)建基本原理 解釋應(yīng)用程序數(shù)據(jù)包 區(qū)分靜態(tài)和動(dòng)態(tài) SQL 討論怎樣將應(yīng)用程序組織成邏輯的工作單元 描述 Sequence 對(duì)象和標(biāo)識(shí)列基本術(shù)語(yǔ)基本術(shù)語(yǔ)數(shù)據(jù)庫(kù)應(yīng)用程序數(shù)據(jù)庫(kù)應(yīng)用程序訪問(wèn)計(jì)劃訪問(wèn)計(jì)劃綁定過(guò)程綁定過(guò)程任何與數(shù)據(jù)庫(kù)交流的應(yīng)用程序

15、 SQL 語(yǔ)句是如何執(zhí)行的? 尋找一個(gè)優(yōu)化的路徑 對(duì)于每個(gè)應(yīng)用程序,都會(huì)在數(shù)據(jù)庫(kù)中創(chuàng)建并存儲(chǔ)一個(gè)數(shù)據(jù)包數(shù)據(jù)數(shù)據(jù)包包包含針對(duì)嵌入式 SQL 語(yǔ)句的訪問(wèn)計(jì)劃的數(shù)據(jù)庫(kù)對(duì)象由包含靜態(tài) SQL 語(yǔ)句的應(yīng)用程序創(chuàng)建當(dāng)執(zhí)行該應(yīng)用程序時(shí),數(shù)據(jù)庫(kù)管理器便使用該數(shù)據(jù)包數(shù)據(jù)包創(chuàng)建過(guò)程數(shù)據(jù)包創(chuàng)建過(guò)程用嵌入式用嵌入式 SQL 寫源程序?qū)懺闯绦蝾A(yù)編譯源程序以得到預(yù)編譯源程序以得到 修改的源文件修改的源文件用主機(jī)語(yǔ)言編譯器進(jìn)行用主機(jī)語(yǔ)言編譯器進(jìn)行編譯編譯與與 DB2 及主機(jī)及主機(jī) 語(yǔ)言庫(kù)鏈接語(yǔ)言庫(kù)鏈接 運(yùn)行此應(yīng)用程序運(yùn)行此應(yīng)用程序數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)包數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)包靜態(tài)靜態(tài) SQLSQL 語(yǔ)句類型、數(shù)據(jù)庫(kù)對(duì)象名稱以及列

16、名稱在編譯之前已經(jīng)提供語(yǔ)句查找或更新的數(shù)據(jù)值是未知在應(yīng)用程序運(yùn)行之前,將創(chuàng)建靜態(tài) SQL 語(yǔ)句靜態(tài)靜態(tài) SQL 的優(yōu)點(diǎn)的優(yōu)點(diǎn)訪問(wèn)計(jì)劃訪問(wèn)計(jì)劃 持久性持久性訪問(wèn)管理與安全訪問(wèn)管理與安全性能性能簡(jiǎn)單編程簡(jiǎn)單編程靜態(tài)SQL靜態(tài)靜態(tài) SQL 的缺點(diǎn)的缺點(diǎn)重建需要的重建需要的缺乏靈活性缺乏靈活性靜態(tài)SQL動(dòng)態(tài)動(dòng)態(tài) SQL 的優(yōu)點(diǎn)的優(yōu)點(diǎn)對(duì)象獨(dú)立對(duì)象獨(dú)立 靈活性靈活性動(dòng)態(tài)SQL最佳的訪問(wèn)計(jì)劃最佳的訪問(wèn)計(jì)劃 動(dòng)態(tài)動(dòng)態(tài) SQL 的缺點(diǎn)的缺點(diǎn)不可預(yù)測(cè)的性能不可預(yù)測(cè)的性能動(dòng)態(tài)SQL相同的相同的 SQL 語(yǔ)句語(yǔ)句可能執(zhí)行更快或更慢可能執(zhí)行更快或更慢問(wèn)題說(shuō)明問(wèn)題說(shuō)明為包含兩個(gè)表(學(xué)生表和教師表)的數(shù)據(jù)庫(kù)設(shè)計(jì)一個(gè)通用的數(shù)

17、據(jù)輸入應(yīng)用程序Student列列數(shù)據(jù)類型數(shù)據(jù)類型注釋注釋StudentIdInt唯一的標(biāo)識(shí)以鑒別每個(gè)學(xué)生StudentNameVarchar(50)學(xué)生的姓名AddressVarchar(100)學(xué)生的地址PhoneNoVarchar(50)學(xué)生的電話號(hào)碼問(wèn)題說(shuō)明問(wèn)題說(shuō)明 2Instructor列列數(shù)據(jù)類型數(shù)據(jù)類型注釋注釋InstructorIdInt唯一的標(biāo)識(shí)以鑒別每個(gè)教師InstructorNameVarchar(50)教師的姓名AddressVarchar(100)教師的地址PhoneNoVarchar(50)教師的電話號(hào)碼問(wèn)題的問(wèn)題的 Java 代碼代碼import java.sql.

18、*;import java.io.*;import java.util.*;class DataEntryAppl1 / URL 是 jdbc:db2:dbnamestatic String url = jdbc:db2:IBM;static String userid = db2admin;static String passwd = db2admin; 問(wèn)題的問(wèn)題的 Java 代碼代碼 2/ 下列函數(shù)獲得對(duì)數(shù)據(jù)庫(kù)的連接public static Connection getConnection()Connection con= null;tryClass.forName(COM.ibm.d

19、b2.jdbc.app.DB2Driver).newInstance();con= DriverManager.getConnection(url, userid, passwd);catch(Exception e)e.printStackTrace();return con; 問(wèn)題的問(wèn)題的 Java 代碼代碼 3public static void executeQry(String stateQry)Connection con = null;ResultSet rs=null;Statement stmt=null;trycon=getConnection();stmt=con.cre

20、ateStatement();stmt.executeQuery(stateQry);System.out.println(The operation is complete);catch(Exception)System.out.println(Error occurred, Error can be due to improper input values); 問(wèn)題的問(wèn)題的 Java 代碼代碼 4public static void main(String argv) throws IOException int choice=0,id=0;String stateQry=,name,ad

21、dress,phoneNo,tableName;/ 要求從用戶處得到輸入值System.out.println(1 : To enter student details);System.out.println(2 : To enter instructor details);System.out.print(Select the operation of your choice by entering the number: );BufferedReader br = new BufferedReader(new InputStreamReader(System.in);String choi

22、ceStr = br.readLine();問(wèn)題的問(wèn)題的 Java 代碼代碼 5/ 檢查用戶是否輸入了正確的選項(xiàng)if(choiceStr.equals()System.out.println(Please enter your choice and then proceed);System.exit(1);elsechoice = Integer.parseInt(choiceStr);/* 基于用戶所作的選擇, */ 問(wèn)題的問(wèn)題的 Java 代碼代碼 6if(choice = 1)tableName=student;elsetableName=instructor;/ 要求用戶選擇她想做的那

23、種操作System.out.println(1 : Insert new record);System.out.println(2 : Update records);System.out.println(3 : delete a record);System.out.print(Select the operation of ur choice by entering the number: );choiceStr = br.readLine(); 問(wèn)題的問(wèn)題的 Java 代碼代碼 7/ 檢查所選的選項(xiàng)是否有效 if(choiceStr.equals()System.out.println(

24、Please enter your choice and then proceed);System.exit(1);elsechoice = Integer.parseInt(choiceStr); 問(wèn)題的問(wèn)題的 Java 代碼代碼 8switch(choice)case 1: / 這種情況是針對(duì)插入操作的System.out.print(Enter Student/instructor id:);id=Integer.parseInt(br.readLine();System.out.print(Enter Student/instructor name );name=br.readLine

25、();System.out.print(Enter Student/instructor address );address=br.readLine();System.out.print(Enter Student/instructor phone no: );phoneNo=br.readLine(); 問(wèn)題的問(wèn)題的 Java 代碼代碼 9switch(choice)case 1: / 這種情況是針對(duì)插入操作的System.out.print(Enter Student / instructor id:);id=Integer.parseInt(br.readLine();System.ou

26、t.print(Enter Student / instructor name: );name=br.readLine();System.out.print(Enter Student / instructor address: );問(wèn)題的問(wèn)題的 Java 代碼代碼 10address=br.readLine();System.out.print(Enter Student/instructor phone no: );phoneNo=br.readLine();stateQry=insert into +tableName+ values(+id+,+name+,+address+,+pho

27、neNo+);/ 執(zhí)行構(gòu)建的 Insert 語(yǔ)句executeQry(stateQry);break;case 2: / 這種情況是針對(duì)更改操作的System.out.print(Enter the student/instructor id:);id=Integer.parseInt(br.readLine(); 問(wèn)題的問(wèn)題的 Java 代碼代碼 11/ 給用戶選項(xiàng),使之選擇他或她想更改的列名System.out.println(A : To update address: ); System.out.print(P : To update phone number: );String op

28、tion = br.readLine();if(option.equals()System.out.println(Select an operation and then proceed);elseif(option.equalsIgnoreCase(A)System.out.print(Enter the address you want to update: ); 問(wèn)題的問(wèn)題的 Java 代碼代碼 12address=br.readLine();stateQry=update +tableName+ set address=+address+ where +tableName+id=+i

29、d;elseSystem.out.print(Enter the PhoneNo you want to update: );phoneNo=br.readLine();stateQry=update +tableName+ set phoneno=+phoneNo+ where +tableName+id=+id; 問(wèn)題的問(wèn)題的 Java 代碼代碼 13/ 執(zhí)行了構(gòu)建的更新語(yǔ)句executeQry(stateQry);break;case 3: / 這種情況是針對(duì)刪除操作的System.out.print(Enter the student / instructor id: );id=Int

30、eger.parseInt(br.readLine();stateQry=Delete from +tableName+ where +tableName+id=+id; 問(wèn)題的問(wèn)題的 Java 代碼代碼 14/ 執(zhí)行了構(gòu)建的 Delete 語(yǔ)句executeQry(stateQry);break; /switch 語(yǔ)句結(jié)束 /if else 語(yǔ)句結(jié)束 /if else 語(yǔ)句結(jié)束 /main 方法結(jié)束 執(zhí)行執(zhí)行 Java 代碼時(shí)的快照代碼時(shí)的快照事務(wù)事務(wù)執(zhí)行簡(jiǎn)單任務(wù)的操作集 也被稱為邏輯工作單元(LUW) 可能包含多個(gè)步驟如果所有的步驟都已完成,事務(wù)就完成了并可以被提交如果任何一步?jīng)]有完成,事

31、務(wù)沒(méi)有完成并必須被回滾事務(wù)管理事務(wù)管理提交回滾保存點(diǎn)提交事務(wù)提交事務(wù)在最后一個(gè) COMMIT 語(yǔ)句完成 Permanent 設(shè)置后,所有的數(shù)據(jù)操作便完成了在 事 務(wù) 中 使 S Q L 語(yǔ) 句 執(zhí) 行 的 更 改 為 Permenant 設(shè)置 BEGINSELECT empno, salary FROM emp WHERE empno=2567UPDATE emp set salary=11000SELECT empno, salary FROM emp WHERE empno=2567INSERT INTO emp(empno,salary) VALUES (2568,20000)SELEC

32、T empno, salary FROM emp WHERE empno=2568COMMITEND 回滾事務(wù)回滾事務(wù)如果任何一條語(yǔ)句失敗,到那點(diǎn)為止的已完成的數(shù)據(jù)操作需要撤銷這種撤銷的行為便稱為回滾 在事務(wù)中回滾可被執(zhí)行到某個(gè)特定的點(diǎn) ROLLBACK 和 COMMIT 語(yǔ)句保證了數(shù)據(jù)的一致性 回滾意味著撤銷一條未提交事務(wù)中的 SQL 語(yǔ)句已經(jīng)執(zhí)行的針對(duì)數(shù)據(jù)的所有更改回滾事務(wù)回滾事務(wù) 2BEGINSELECT empno, salary FROM emp WHERE empno=2567UPDATE emp set salary=11000SELECT empno, salary FROM

33、emp WHERE empno=2567ROLLBACKENDBEGININSERT INTO emp(empno,salary) VALUES (2568,20000)SELECT empno, salary FROM emp WHERE empno=2568COMMITEND 保存點(diǎn)保存點(diǎn)定義在事務(wù)上下文中的中間標(biāo)記 它們將一個(gè)長(zhǎng)的事務(wù)分成幾個(gè)小的部分在事務(wù)中的當(dāng)前點(diǎn),但在事務(wù)中已聲明的保存點(diǎn)之后給出回滾工作的選項(xiàng)保存點(diǎn)保存點(diǎn)BeginSELECT empno, salary FROM emp WHERE empno=2567UPDATE emp set salary=11000SAVEP

34、OINT aSELECT empno, salary FROM emp WHERE empno=2567ROLLBACK TO SAVEPOINT aINSERT INTO emp(empno,salary) VALUES (2568,20000)SELECT empno, salary FROM emp WHERE empno=2568COMMITEnd 事務(wù)的開(kāi)始和結(jié)束事務(wù)的開(kāi)始和結(jié)束當(dāng)執(zhí)行第一條可執(zhí)行 SQL 語(yǔ)句時(shí),事務(wù)開(kāi)始事務(wù)在此點(diǎn)及時(shí)開(kāi)始 它在任何下列情況發(fā)生的時(shí)候結(jié)束 一 條 C O M M I T 或 R O L L B A C K 語(yǔ) 句 ( 沒(méi) 有 SAVEPOINT 從句

35、)被執(zhí)行 DDL 語(yǔ)句(如 CREATE、DROP、ALTER)被執(zhí)行 如果用戶斷開(kāi)數(shù)據(jù)庫(kù)連接,則提交當(dāng)前事務(wù) 如果一個(gè)用戶進(jìn)程異常終止,則回滾當(dāng)前事務(wù)生成的列生成的列也被稱為派生的列這些列的值可由一個(gè)表達(dá)式生成 它們可以直接存儲(chǔ)在數(shù)據(jù)庫(kù)里不需要數(shù)據(jù)輸入標(biāo)識(shí)列標(biāo)識(shí)列應(yīng)用程序在數(shù)據(jù)庫(kù)外生成數(shù)字 將計(jì)數(shù)器作為一個(gè)單一行存儲(chǔ)在獨(dú)立表中 在數(shù)據(jù)庫(kù)端處理標(biāo)識(shí)列 序列序列一種數(shù)據(jù)對(duì)象,與數(shù)據(jù)庫(kù)中任何其它數(shù)據(jù)對(duì)象相類似用來(lái)產(chǎn)生序列數(shù) 序列對(duì)象由兩個(gè)重要的表達(dá)式操作: PREVVAL NEXTVAL 序列對(duì)象由 CREATE 語(yǔ)句創(chuàng)建 通過(guò)發(fā)布 VALUES 語(yǔ)句增加 序列對(duì)象對(duì)標(biāo)識(shí)列序列對(duì)象對(duì)標(biāo)識(shí)列序列對(duì)象

36、對(duì)標(biāo)識(shí)列序列對(duì)象對(duì)標(biāo)識(shí)列序列對(duì)象序列對(duì)象標(biāo)識(shí)列標(biāo)識(shí)列此對(duì)象生成的值可用于任何數(shù)據(jù)庫(kù)對(duì)象它與一個(gè)特定的列和表格相關(guān)這些值是在要求下生成的并可用于任何 SQL 語(yǔ)句這兒它自動(dòng)生成小結(jié)小結(jié)既然您已經(jīng)完成了本單元的學(xué)習(xí),您應(yīng)該能夠: 明確部分基本的應(yīng)用程序構(gòu)建基本原理 解釋應(yīng)用程序數(shù)據(jù)包 區(qū)分靜態(tài)和動(dòng)態(tài) SQL 討論怎樣將應(yīng)用程序組織成邏輯的工作單元 描述序列對(duì)象和標(biāo)識(shí)列第第 4 單元單元構(gòu)建構(gòu)建 DB2 應(yīng)用程序的概念實(shí)驗(yàn)應(yīng)用程序的概念實(shí)驗(yàn) 實(shí)驗(yàn)練習(xí)實(shí)驗(yàn)練習(xí)第第 5 單元單元DB2 觸發(fā)器觸發(fā)器學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)在完成本單元的學(xué)習(xí)后,您應(yīng)該能夠: 解釋觸發(fā)器的概念 描述在應(yīng)用程序中設(shè)置觸發(fā)器的優(yōu)點(diǎn) 討

37、論對(duì)各種數(shù)據(jù)庫(kù)對(duì)象使用觸發(fā)器 觸發(fā)器的基本原理觸發(fā)器的基本原理當(dāng)數(shù)據(jù)中發(fā)生某些活動(dòng)時(shí),會(huì)調(diào)用一組操作也能夠在數(shù)據(jù)庫(kù)外調(diào)用一個(gè)操作也能夠在數(shù)據(jù)庫(kù)外調(diào)用一個(gè)操作 可以用來(lái)滿足各種應(yīng)用程序需求觸發(fā)器是駐留在 RDBMS 內(nèi)部的事件驅(qū)動(dòng)程序數(shù)據(jù)庫(kù)管理器管理觸發(fā)器 觸發(fā)器的基本原理觸發(fā)器的基本原理 2觸發(fā)器只能創(chuàng)建一次 當(dāng)某個(gè)特定事件或活動(dòng)發(fā)生時(shí),數(shù)據(jù)庫(kù)管理器將其激活可被看作 RDBMS 內(nèi)設(shè)置的一個(gè)規(guī)則此操作是必要的一個(gè)更新操作 插入操作 更新操作 刪除操作 觸發(fā)器的特征觸發(fā)器的特征通常在表級(jí)別實(shí)現(xiàn)它們與特定的表綁定在一起 表中發(fā)生的任何變化都將激活一個(gè)觸發(fā)器事件 觸發(fā)器不可被消除 觸發(fā)器事件和觸發(fā)操

38、作觸發(fā)器事件和觸發(fā)操作觸發(fā)器事件 當(dāng)向表中插入數(shù)據(jù)、更新列數(shù)據(jù)或從表中刪除記錄時(shí) 可以調(diào)用與更新進(jìn)程相關(guān)聯(lián)的觸發(fā)器觸發(fā)操作 當(dāng)觸發(fā)器事件發(fā)生時(shí),觸發(fā)器執(zhí)行的進(jìn)程 可以是一個(gè)單獨(dú)的 SQL 語(yǔ)句或一組 SQL 語(yǔ)句 也可以是一個(gè)存儲(chǔ)過(guò)程調(diào)用或一個(gè)用戶定義函數(shù)的調(diào)用觸發(fā)器的優(yōu)點(diǎn)觸發(fā)器的優(yōu)點(diǎn)一系列業(yè)務(wù)規(guī)則的全局庫(kù) 觸發(fā)器對(duì)于實(shí)現(xiàn)各種業(yè)務(wù)規(guī)則非常有效 一旦這些規(guī)則被構(gòu)建為觸發(fā)器,它們便可以跨應(yīng)用程序使用 較少的耦合 觸發(fā)器可以減少商業(yè)邏輯和為商業(yè)目的開(kāi)發(fā)應(yīng)用程序之間的耦合 加強(qiáng)數(shù)據(jù)完整性 使用觸發(fā)器可以加強(qiáng)參考完整性 創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器在創(chuàng)建時(shí),觸發(fā)器必須與一張表相關(guān)聯(lián) 觸發(fā)器的各種屬性值都必須聲明

39、 要?jiǎng)?chuàng)建的觸發(fā)器名 與觸發(fā)器相關(guān)聯(lián)的表 將激活觸發(fā)器的序列和事件 觸發(fā)粒度 觸發(fā)操作 轉(zhuǎn)換表值(如果有)創(chuàng)建觸發(fā)器的一個(gè)示例創(chuàng)建觸發(fā)器的一個(gè)示例CREATE TRIGGER NewRecruit AFTER INSERT ON EMPLOYEEFOR EACH ROW MODE DB2SQLUPDATE Organization SET NoOfEmployees = NoOfEmployees + 1 示例表示例表ORGANIZATION (ORGNAME VARCHAR (20),TOTALEMP INTEGER , TOTALDEPT INTEGER) DEPARTMENT (DEPTI

40、D INTEGER,DEPTNAME VARCHAR (20) ,TOTALEMP INTEGER) 示例表示例表 2EMPLOYEEINFO (“EMPID” INTEGER,”EMPNAME” VARCHAR(20),”DEPTID” INTEGER) ACTIVITYLOG (TIME TIMESTAMP, ACTIVITYDESC VARCHAR (50)規(guī)定執(zhí)行序列規(guī)定執(zhí)行序列 觸發(fā)器可以在更新事件發(fā)生之前執(zhí)行,也可以在更新事件發(fā)生之后執(zhí)行 BEFORE 規(guī)定觸發(fā)操作應(yīng)該在更新事件執(zhí)行之前被調(diào)用 AFTER 規(guī)定觸發(fā)操作應(yīng)該在更新事件執(zhí)行之后再執(zhí)行規(guī)定執(zhí)行序列規(guī)定執(zhí)行序列 2 CRE

41、ATE TRIGGER NEW_INFOAFTER INSERT ON EMPLOYEEINFOFOR EACH ROW MODE DB2SQL UPDATE ORGANIZATION SET TOTALEMP = TOTALEMP + 1 觸發(fā)器粒度觸發(fā)器粒度規(guī)定一個(gè)事件調(diào)用觸發(fā)操作的次數(shù)表操作中的觸發(fā)器調(diào)用可能基于兩個(gè)事件 它基于特定表中調(diào)用的語(yǔ)句 它也基于由于更新事件將會(huì)影響的行數(shù) 觸發(fā)器的粒度指定 FOR EACH STATEMENT FOR EACH ROW 觸發(fā)器粒度觸發(fā)器粒度 2CREATE TRIGGER EMP_NO AFTER DELETE ON EMPLOYEEINFOF

42、OR EACH ROW MODE DB2SQL UPDATE DEPARTMENT SET TOTALEMP=TOTALEMP 1 觸發(fā)器粒度觸發(fā)器粒度 3CREATE TRIGGER LOG_UPDATE_EMP AFTER UPDATE ON EMPLOYEEINFO FOR EACH STATEMENT MODE DB2SQL INSERT INTO ACTIVITYLOG VALUES(CURRENT TIMESTAMP, UPDATE:EMPLOYEEINFO) 轉(zhuǎn)換值和表轉(zhuǎn)換值和表 觸發(fā)器影響到的值或行是由相關(guān)變量規(guī)定的觸發(fā)器可以訪問(wèn)這些正在進(jìn)行轉(zhuǎn)換的值表觸發(fā)器可以訪問(wèn)變量 NEW

43、 作為相關(guān)名稱 OLD 作為相關(guān)名稱轉(zhuǎn)換值和表轉(zhuǎn)換值和表 2 CREATE TRIGGER OLD_DEPT_UPDATE AFTER UPDATE OF DEPTID ON EMPLOYEEINFO REFERENCING NEW_TABLE AS N_TABLEOLD AS O_ROW FOR EACH ROW MODE DB2SQL UPDATE DEPARTMENT SET TOTALEMP=TOTALEMP - 1 WHERE DEPTID=O_ROW.DEPTID 轉(zhuǎn)換值和表轉(zhuǎn)換值和表 3CREATE TRIGGER NEW_DEPT_UPDATEAFTER UPDATE OF D

44、EPTID ON EMPLOYEEINFO REFERENCING NEW_TABLE AS N_TABLE NEW AS N_ROW FOR EACH ROW MODE DB2SQL UPDATE DEPARTMENT SET TOTALEMP=TOTALEMP + 1 WHERE DEPTID=N_ROW.DEPTID 級(jí)聯(lián)觸發(fā)器級(jí)聯(lián)觸發(fā)器 一個(gè)觸發(fā)器可以調(diào)用另一個(gè)觸發(fā)器,以此類推由于一個(gè)觸發(fā)器引起一系列觸發(fā)器的調(diào)用稱之為級(jí)聯(lián)觸發(fā)器 級(jí)聯(lián)觸發(fā)器級(jí)聯(lián)觸發(fā)器 2 CREATE TRIGGER DEPT_ADDED AFTER INSERT ON DEPARTMENT FOR EACH ROW

45、MODE DB2SQL UPDATE ORGANIZATION SET TOTALDEPT=TOTALDEPT + 1 CREATE TRIGGER LOG_UPDATE_ORGAFTER UPDATE ON ORGANIZATION FOR EACH STATEMENTMODE DB2SQLINSERT INTO ACTIVITYLOGVALUES (CURRENT TIMESTAMP, UPDATE:ORGANIZATION) 級(jí)聯(lián)觸發(fā)器級(jí)聯(lián)觸發(fā)器 3 INSERT 語(yǔ)句的觸發(fā)器語(yǔ)句的觸發(fā)器 CREATE TRIGGER INSERT_DEPTBEFORE INSERT ON DEPART

46、MENT FOR EACH ROW MODE DB2SQL INSERT INTO ACTIVITYLOG VALUES (CURRENT TIMESTAMP,INSERTION: DEPARTMENT) Update 語(yǔ)句的觸發(fā)器語(yǔ)句的觸發(fā)器 CREATE TRIGGER UPDATE_DEPT AFTER UPDATE ON DEPARTMENT FOR EACH ROW MODE DB2SQL INSERT INTO ACTIVITYLOG VALUES (CURRENT TIMESTAMP,UPDATION: DEPARTMENT) Delete 語(yǔ)句的觸發(fā)器語(yǔ)句的觸發(fā)器 CREATE

47、 TRIGGER CHANGE_NO AFTER DELETE ON EMPLOYEEINFOFOR EACH ROW MODE DB2SQL UPDATE ORGANIZATION SET TOTALEMP=TOTALEMP - 1 觸發(fā)器、觸發(fā)器、UDT 和和 UDF CREATE TRIGGER EMP_NO AFTER DELETE ON EMPLOYEEINFOFOR EACH ROW MODE DB2SQL UPDATE DEPARTMENT SET TOTALEMP= Decrement (TOTALEMP) 觸發(fā)器和參考約束觸發(fā)器和參考約束 觸發(fā)器和參考約束之間的交互觸發(fā)器事件

48、可以因?yàn)檫@些約束而改變 確定表集和行集 如果沒(méi)有行被影響,則沒(méi)有約束和觸發(fā)器被應(yīng)用 如果有些被影響的行被選擇為 BEFORE,則觸發(fā)器針對(duì)該集合中每一行處理觸發(fā)器和參考約束觸發(fā)器和參考約束 2 語(yǔ)句規(guī)定的實(shí)際操作應(yīng)用于這些受影響行的集合 如果應(yīng)用參考約束擁有級(jí)聯(lián)效果,則其它表中的操作在觸發(fā)器被處理過(guò)后也完成了 只要在任何階段出現(xiàn)一個(gè)錯(cuò)誤,則整個(gè)操作便會(huì)被回滾 觸發(fā)器的約束觸發(fā)器的約束觸發(fā)器中不可以使用指針觸發(fā)器中不可以使用 Commit 語(yǔ)句SQL SET 變量只可以用在 BEFORE 觸發(fā)器中BEFORE 觸發(fā)器不能調(diào)用另一個(gè)觸發(fā)器如果在同一事件中對(duì)某張?zhí)囟ū響?yīng)用了多個(gè)觸發(fā)器,則需要排定優(yōu)先

49、順序銷毀觸發(fā)器銷毀觸發(fā)器曾經(jīng)創(chuàng)建的觸發(fā)器將繼續(xù)執(zhí)行當(dāng)某個(gè)特定觸發(fā)器事件發(fā)生時(shí),該觸發(fā)器數(shù)據(jù)包無(wú)法停止執(zhí)行 要停止一個(gè)觸發(fā)器DROP TRIGGER DROP TRIGGER EMP_NUM DB2 UDB 內(nèi)部的觸發(fā)器數(shù)據(jù)包內(nèi)部的觸發(fā)器數(shù)據(jù)包 每當(dāng)數(shù)據(jù)庫(kù)存儲(chǔ)一個(gè)觸發(fā)器時(shí) DB2 在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)數(shù)據(jù)包 在它內(nèi)部的系統(tǒng)目錄信息中創(chuàng)建一條記錄觸發(fā)器數(shù)據(jù)包觸發(fā)器目錄記錄小結(jié)小結(jié)既然您已經(jīng)完成了本單元的學(xué)習(xí),您應(yīng)該能夠: 解釋觸發(fā)器的概念 描述在應(yīng)用程序中設(shè)置觸發(fā)器的優(yōu)點(diǎn) 討論對(duì)各種數(shù)據(jù)庫(kù)對(duì)象使用觸發(fā)器 第第 6 單元單元DB2 觸發(fā)器實(shí)驗(yàn)觸發(fā)器實(shí)驗(yàn)實(shí)驗(yàn)練習(xí)實(shí)驗(yàn)練習(xí)第第 7 單元單元嵌入式嵌入式 S

50、QL學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)在完成本單元的學(xué)習(xí)后,您將能夠: 分析嵌入式 SQL 的各種概念 解釋如何將 SQL 嵌入一種宿主語(yǔ)言 討論 SQLJ 語(yǔ)法 描述如何使用 SQLJ 編寫 applet 和應(yīng)用程序 嵌入式嵌入式 SQL 概念概念 將功能強(qiáng)大的 SQL 與宿主語(yǔ)言支持結(jié)合 程序內(nèi)部編寫的 SQL 語(yǔ)言不依賴于宿主語(yǔ)言數(shù)據(jù)庫(kù)管理器提供了一種宿主語(yǔ)言處理 SQL 語(yǔ)句的機(jī)制SQL 處理器在應(yīng)用程序編譯之前處理這些 SQL 語(yǔ)句SQLJ 的組件的組件SQLJ 運(yùn)行時(shí)類 SQLJ 翻譯器DB2 SQLJ Profile Customizer(db2profc) DB2 SQLJ Profile Pr

51、inter(db2profc)SQLJ Profile Conversion Tool(profconv)記錄 SQL 調(diào)用的實(shí)用程序與與 DB2 交互的交互的 SQLJ 應(yīng)用程序應(yīng)用程序 嵌入式嵌入式 SQL Java 程序結(jié)構(gòu)程序結(jié)構(gòu) Java 中嵌入式 SQL 程序由稱之為 SQLJ 的數(shù)據(jù)包啟用 既可以用于 Java 應(yīng)用程序,也可以用于 Java applet Java 應(yīng)用程序需要安裝 DB2 客戶端軟件 DB2 SDApplet 僅需要客戶機(jī)具有瀏覽器 DB2 應(yīng)用程序的組件應(yīng)用程序的組件為 Java 程序?qū)脒\(yùn)行時(shí)庫(kù) 變量聲明為通信區(qū)域建立代碼使用 CONNECT 語(yǔ)句建立數(shù)據(jù)

52、庫(kù)連接語(yǔ)句提供各種數(shù)據(jù)操作(數(shù)據(jù)創(chuàng)建、選擇和操作)關(guān)閉(釋放)數(shù)據(jù)庫(kù)連接清除其它對(duì)象的代碼Java 中嵌入式中嵌入式 SQL 的標(biāo)準(zhǔn)數(shù)據(jù)包的標(biāo)準(zhǔn)數(shù)據(jù)包sqlj.runtimesqlj.runtime.ref導(dǎo)入到 Java 代碼中建立數(shù)據(jù)庫(kù)連接建立數(shù)據(jù)庫(kù)連接 為 Java 注冊(cè) DB2 數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序 擁有許多數(shù)據(jù)庫(kù)操作的基本的代碼 擁有一系列對(duì)特定數(shù)據(jù)庫(kù)有效的驅(qū)動(dòng)程序 如果服務(wù)器端或客戶端軟件與應(yīng)用程序位于同一臺(tái)機(jī)器上,則使用的驅(qū)動(dòng)程序是Class.forName(COM.ibm.db2.jdbc.app.DB2Driver).newInstance();如果運(yùn)行應(yīng)用程序的機(jī)器沒(méi)有客戶端軟件

53、,則驅(qū)動(dòng)程序管理器被初始化 Class.forName(COM.DB2Driver).newInstance(); 建立數(shù)據(jù)庫(kù)連接建立數(shù)據(jù)庫(kù)連接 2 建立連接 使用 DriverManager 建立 URL 字符串的格式為 jdbc:db2:databasenam 建立連接的字符串是 Connection con = DriverManager.getConnection(burl);. 在在 Java 中嵌入簡(jiǎn)單的中嵌入簡(jiǎn)單的 SQL 語(yǔ)句語(yǔ)句 編寫在特定從句內(nèi)部的語(yǔ)句稱為 SQLJ 從句令牌(#sql)使 SQLJ 翻譯起能夠理解 SQLJ 從句并對(duì)其進(jìn)行處理#sql delete fro

54、m employee; 在在 SQL 語(yǔ)句中使用語(yǔ)句中使用 Java 參數(shù)參數(shù) Java 變量可以用于向 SQL 語(yǔ)句傳值也用于從中檢索需要的值 在 SQL 語(yǔ)句中使用的 Java 參數(shù)稱之為宿主變量void deleteEmployeeDetails(int employeeId)#sql delete from employeeDetails where employeeid=:employeeId; 在在 SQL 語(yǔ)句中使用語(yǔ)句中使用 Java 參數(shù)參數(shù) 2Employee 表表EmployeeId NumberTitle varchar (4)Fname varchar (40)Lna

55、me Varchar (40)Qualification Varchar(90)Workphone IntegerExtension Integer插入語(yǔ)句中的宿主變量插入語(yǔ)句中的宿主變量 void insertDetails (int employeeId,String title, String fName, String lName, String qualification, int phoneNo, int extn)#sql INSERT INTO EMPLOYEEDETAILS VALUES (:employeeId, :title, :fName, :lName, :quali

56、fication, :phoneNo, :extn) ; 更新語(yǔ)句中的宿主變量更新語(yǔ)句中的宿主變量 void updateExtension (int employeeId, int extn)#sql UPDATE EMPLOYEEDETAILS SET Extension = :extn WHERE EMPLOYEEID = :employeeId) ; 將值檢索入宿主變量將值檢索入宿主變量 #sql SELECT FNAME INTO :fName FROM EMPLOYEEDETAILS where employeeId = :employeeId; 宿主變量可用來(lái)從 SQL 語(yǔ)句中檢

57、索一個(gè)值 每一個(gè)選定的列都需要一個(gè)宿主變量宿主變量數(shù)據(jù)類型應(yīng)該與被選定列的數(shù)據(jù)類型相匹配準(zhǔn)備準(zhǔn)備 SQLJ 程序程序 處理處理 NULL 值值嵌入式 SQL 程序使用一種特殊的方式處理 NULL 值嵌入式 SQL 程序使用指示符變量 Java 嵌入式 SQL 程序不使用指示符變量取而代之的是,它們通過(guò)將其與 Java 常量 NULL 相比較來(lái)處理 NULL 情況處理處理 NULL 值值 2#sql SELECT FNAME INTO :firstname FROM EMPLOYEEDETAILS where employeeId = :employeeId; if (firstname = n

58、ull ) System.out.println (“First Name is Null for the employee id “+employeeId); SQL 異常和異常和 SQLCA 錯(cuò)誤代碼錯(cuò)誤代碼 數(shù)據(jù)庫(kù)管理器使用 SQL 通信區(qū)(SQLCA)結(jié)構(gòu)返回錯(cuò)誤信息這種結(jié)構(gòu)在每個(gè) API 調(diào)用以及 SQL 語(yǔ)句發(fā)出后更新產(chǎn)生的異常包括一個(gè)代碼編號(hào),該編號(hào)與 SQLCA 錯(cuò)誤編號(hào)相對(duì)應(yīng)SQLCA 和和 DB2 之間的通信之間的通信 SQLCA 錯(cuò)誤代碼錯(cuò)誤代碼SQLJ 連接上下文連接上下文 用來(lái)連接數(shù)據(jù)所有嵌入式 SQL 語(yǔ)句均在連接上下文中運(yùn)行負(fù)責(zé)建立到不同數(shù)據(jù)庫(kù)的多條連接SQLJ 連接上下文連接上下文 2 #sql context ctx; String userid = db2admin;String passwd = db2admin;String url = jdbc:db2:coursewa;Connection con = null;try con = DriverManager.getConnection(url,userid,passwd);D

溫馨提示

  • 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)論