




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第13章章 JDBC技術(shù)技術(shù)JDBCJDBC概述概述JDBC APIJDBC API基于基于JDBCJDBC的數(shù)據(jù)庫(kù)應(yīng)用開發(fā)方法的數(shù)據(jù)庫(kù)應(yīng)用開發(fā)方法JDBC2.0 3.0JDBC2.0 3.0的新特性的新特性 JDBC是為是為Java應(yīng)用程序中訪問(wèn)數(shù)據(jù)庫(kù),而設(shè)應(yīng)用程序中訪問(wèn)數(shù)據(jù)庫(kù),而設(shè)計(jì)的一組計(jì)的一組API函數(shù)集,為函數(shù)集,為Java數(shù)據(jù)庫(kù)應(yīng)用開發(fā)中的數(shù)據(jù)庫(kù)應(yīng)用開發(fā)中的一項(xiàng)核心技術(shù)。一項(xiàng)核心技術(shù)。 JDBC的含義是的含義是Java Database Connectivity,JDBC只是商標(biāo)名,是只是商標(biāo)名,是Java程序中訪問(wèn)數(shù)據(jù)庫(kù)的標(biāo)程序中訪問(wèn)數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)準(zhǔn)API。 目前目前ODBC A
2、PI是使用最廣泛的關(guān)系數(shù)據(jù)庫(kù)訪是使用最廣泛的關(guān)系數(shù)據(jù)庫(kù)訪問(wèn)接口,問(wèn)接口,java中不使用中不使用ODBC的原因是的原因是 ODBC API是是C的庫(kù)函數(shù),在的庫(kù)函數(shù),在Java程序中調(diào)用本地程序中調(diào)用本地代碼有較大的局限性。影響安全性、可移植性等。代碼有較大的局限性。影響安全性、可移植性等。 因?yàn)檎Z(yǔ)言本身的差別,不能將的因?yàn)檎Z(yǔ)言本身的差別,不能將的ODBC的的C語(yǔ)言語(yǔ)言API逐個(gè)翻譯成逐個(gè)翻譯成Java的的API。在。在C語(yǔ)言的語(yǔ)言的ODBC中中反復(fù)用到指針。反復(fù)用到指針。 故此故此Java的的JDBC以以O(shè)DBC為基礎(chǔ),采用了與為基礎(chǔ),采用了與ODBC相同的標(biāo)準(zhǔn)相同的標(biāo)準(zhǔn) X/OPEN SQ
3、L CLI(CALL LevelInterface),包含了通過(guò),包含了通過(guò)SQL語(yǔ)句操叢數(shù)據(jù)庫(kù)的一語(yǔ)句操叢數(shù)據(jù)庫(kù)的一組組API,并且具有,并且具有Java的風(fēng)格與優(yōu)良特定。的風(fēng)格與優(yōu)良特定。 JDBC技術(shù)的主要思想就是為應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)技術(shù)的主要思想就是為應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)提供統(tǒng)一的接口,屏蔽各種數(shù)據(jù)庫(kù)的異構(gòu)性,保證提供統(tǒng)一的接口,屏蔽各種數(shù)據(jù)庫(kù)的異構(gòu)性,保證Java程序的可移植性。程序的可移植性。JDBC的體系結(jié)構(gòu)示意圖的體系結(jié)構(gòu)示意圖Java數(shù)據(jù)庫(kù)應(yīng)用數(shù)據(jù)庫(kù)應(yīng)用標(biāo)準(zhǔn)標(biāo)準(zhǔn)SQL語(yǔ)句語(yǔ)句JDBC APIJDBC驅(qū)動(dòng)驅(qū)動(dòng)管理器管理器JDBC驅(qū)動(dòng)驅(qū)動(dòng)API特定數(shù)據(jù)庫(kù)的驅(qū)動(dòng)特定數(shù)據(jù)庫(kù)的驅(qū)動(dòng)特定數(shù)
4、據(jù)庫(kù)服務(wù)器特定數(shù)據(jù)庫(kù)服務(wù)器JDBC驅(qū)動(dòng)管理器是驅(qū)動(dòng)管理器是Java虛擬機(jī)一個(gè)組成部分虛擬機(jī)一個(gè)組成部分JDBC驅(qū)動(dòng)類型驅(qū)動(dòng)類型 JDBC驅(qū)動(dòng)有四種類型:驅(qū)動(dòng)有四種類型:JDBC-ODBC橋、本地橋、本地API部分部分Java驅(qū)動(dòng)、網(wǎng)絡(luò)協(xié)議完全驅(qū)動(dòng)、網(wǎng)絡(luò)協(xié)議完全Java驅(qū)動(dòng)、本地驅(qū)動(dòng)、本地協(xié)議完全協(xié)議完全Java驅(qū)動(dòng)。驅(qū)動(dòng)。JDBC-ODBC橋橋 JDBC-ODBC橋是利用了現(xiàn)有的橋是利用了現(xiàn)有的ODBC,將,將JDBC調(diào)調(diào)用翻譯為用翻譯為ODBC調(diào)用。這種類型的驅(qū)動(dòng)可以訪問(wèn)所有調(diào)用。這種類型的驅(qū)動(dòng)可以訪問(wèn)所有支持支持ODBC的的DBMS,簡(jiǎn)單易操作。,簡(jiǎn)單易操作。 由于使用橋需要調(diào)用底層由于使
5、用橋需要調(diào)用底層ODBC驅(qū)動(dòng)管理器、驅(qū)動(dòng)管理器、 ODBC驅(qū)動(dòng)以及數(shù)據(jù)庫(kù)客戶端的本地代碼,會(huì)造成應(yīng)用驅(qū)動(dòng)以及數(shù)據(jù)庫(kù)客戶端的本地代碼,會(huì)造成應(yīng)用程序具有平臺(tái)相關(guān)性、安全性差以及可移植性差等。程序具有平臺(tái)相關(guān)性、安全性差以及可移植性差等。 本地本地API部分部分Java驅(qū)動(dòng)(驅(qū)動(dòng)(native API partly java driver) 該類驅(qū)動(dòng)將該類驅(qū)動(dòng)將JDBC調(diào)用,轉(zhuǎn)換成對(duì)特定調(diào)用,轉(zhuǎn)換成對(duì)特定DBMS客戶客戶端的端的API調(diào)用。同樣也需要調(diào)用本地代碼,也具有調(diào)用。同樣也需要調(diào)用本地代碼,也具有局限性。局限性。網(wǎng)絡(luò)協(xié)議完全網(wǎng)絡(luò)協(xié)議完全Java驅(qū)動(dòng)(驅(qū)動(dòng)(net-protocol full
6、y java driver) 將將JDBC的調(diào)用轉(zhuǎn)換為獨(dú)立于任何的調(diào)用轉(zhuǎn)換為獨(dú)立于任何DBMS的網(wǎng)絡(luò)協(xié)的網(wǎng)絡(luò)協(xié)議命令,并送給一個(gè)網(wǎng)絡(luò)服務(wù)器中的數(shù)據(jù)庫(kù)中間件。議命令,并送給一個(gè)網(wǎng)絡(luò)服務(wù)器中的數(shù)據(jù)庫(kù)中間件。由于網(wǎng)絡(luò)協(xié)議是完全與平臺(tái)無(wú)關(guān)的,使用這種類型驅(qū)由于網(wǎng)絡(luò)協(xié)議是完全與平臺(tái)無(wú)關(guān)的,使用這種類型驅(qū)動(dòng)的動(dòng)的Java應(yīng)用可以與服務(wù)器完全分離。是純應(yīng)用可以與服務(wù)器完全分離。是純Java 應(yīng)應(yīng)用程序用程序本地協(xié)議完全本地協(xié)議完全Java驅(qū)動(dòng)(驅(qū)動(dòng)(native-protocol fully java driver) 該類型的驅(qū)動(dòng)直接將該類型的驅(qū)動(dòng)直接將JDBC的調(diào)用轉(zhuǎn)換為的調(diào)用轉(zhuǎn)換為DBMS使使用的網(wǎng)絡(luò)協(xié)
7、議命令,并且完全有用的網(wǎng)絡(luò)協(xié)議命令,并且完全有Java語(yǔ)言實(shí)現(xiàn)。這語(yǔ)言實(shí)現(xiàn)。這允許一個(gè)客戶端程序直接調(diào)用允許一個(gè)客戶端程序直接調(diào)用DBMS服務(wù)器,在服務(wù)器,在Intranet環(huán)境中是一種很實(shí)用的方式,通常由環(huán)境中是一種很實(shí)用的方式,通常由DBMS廠商提供。廠商提供。JDBC API JDBC API 是實(shí)現(xiàn)是實(shí)現(xiàn)JDBC標(biāo)準(zhǔn)支持?jǐn)?shù)據(jù)庫(kù)操作的類標(biāo)準(zhǔn)支持?jǐn)?shù)據(jù)庫(kù)操作的類與方法的集合,目前與方法的集合,目前 J2dsk1.4.2中支持中支持JDBC3.0。JDBC API包括包括java.sql 和和javax.sql 兩個(gè)包。兩個(gè)包。java.sql 包括包括JDBC2.0核心核心APIjavax.
8、sql包括包括JDBC2.0與與JDBC3.0的擴(kuò)展的擴(kuò)展 APIJDBC API提供的基本功能如下:提供的基本功能如下:建立與一個(gè)數(shù)據(jù)源的連接建立與一個(gè)數(shù)據(jù)源的連接向數(shù)據(jù)源發(fā)送查詢和更新語(yǔ)句向數(shù)據(jù)源發(fā)送查詢和更新語(yǔ)句處理得到的結(jié)果處理得到的結(jié)果主要的類和接口及功能如下主要的類和接口及功能如下驅(qū)動(dòng)程序管理器驅(qū)動(dòng)程序管理器Java.sql.Driver 提供數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序信息,是每個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)器提供數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序信息,是每個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)器類都要實(shí)現(xiàn)的接口。類都要實(shí)現(xiàn)的接口。Java.sql.DriverManager 提供管理一組提供管理一組JDBC驅(qū)動(dòng)所需的基本服務(wù)包括加載驅(qū)動(dòng)所需的基本服務(wù)包括
9、加載所有數(shù)據(jù)庫(kù)驅(qū)動(dòng)器以及建立連接。所有數(shù)據(jù)庫(kù)驅(qū)動(dòng)器以及建立連接。Java.sql.DriverPropertyinfo 提供驅(qū)動(dòng)程序與建立連接相關(guān)的特性。提供驅(qū)動(dòng)程序與建立連接相關(guān)的特性。數(shù)據(jù)庫(kù)連接數(shù)據(jù)庫(kù)連接Java.sql.Conection 表示與特定數(shù)據(jù)庫(kù)的連接表示與特定數(shù)據(jù)庫(kù)的連接SQL語(yǔ)句語(yǔ)句 Java.sql.Statement: 包含了執(zhí)行包含了執(zhí)行SQL語(yǔ)句的方法用來(lái)執(zhí)行語(yǔ)句的方法用來(lái)執(zhí)行SQL語(yǔ)句并返語(yǔ)句并返回結(jié)果?;亟Y(jié)果。Java.sql.PreparedStatement: 表示預(yù)編譯的表示預(yù)編譯的SQL語(yǔ)句,該類的對(duì)象可用來(lái)多次執(zhí)語(yǔ)句,該類的對(duì)象可用來(lái)多次執(zhí)行對(duì)應(yīng)的行對(duì)
10、應(yīng)的SQL語(yǔ)句并可以提高語(yǔ)句的運(yùn)行效率。語(yǔ)句并可以提高語(yǔ)句的運(yùn)行效率。Java.sql.CallableStatement:用來(lái)執(zhí)行用來(lái)執(zhí)行SQL的存儲(chǔ)過(guò)程的存儲(chǔ)過(guò)程Java.sql.ResultSet 表示數(shù)據(jù)庫(kù)結(jié)果集的一個(gè)數(shù)據(jù)表,一般是在執(zhí)行表示數(shù)據(jù)庫(kù)結(jié)果集的一個(gè)數(shù)據(jù)表,一般是在執(zhí)行SQL查詢語(yǔ)句是產(chǎn)生的。查詢語(yǔ)句是產(chǎn)生的。異常異常Java.sql.SQLException 表示數(shù)據(jù)庫(kù)訪問(wèn)異常或其他異常,提供異常的相關(guān)表示數(shù)據(jù)庫(kù)訪問(wèn)異?;蚱渌惓?,提供異常的相關(guān)信息信息Java.sql.SQLWarning表示數(shù)據(jù)庫(kù)訪問(wèn)中的警告,提供相關(guān)警告信息。表示數(shù)據(jù)庫(kù)訪問(wèn)中的警告,提供相關(guān)警告信息。
11、 13.3基于基于JDBC的數(shù)據(jù)庫(kù)應(yīng)用開發(fā)方法的數(shù)據(jù)庫(kù)應(yīng)用開發(fā)方法利用利用JDBC應(yīng)用開發(fā)應(yīng)用程序一般包括如下步驟應(yīng)用開發(fā)應(yīng)用程序一般包括如下步驟加載數(shù)據(jù)庫(kù)驅(qū)動(dòng),建立與數(shù)據(jù)庫(kù)的連接。加載數(shù)據(jù)庫(kù)驅(qū)動(dòng),建立與數(shù)據(jù)庫(kù)的連接。執(zhí)行執(zhí)行SQL語(yǔ)句語(yǔ)句處理結(jié)果集處理結(jié)果集關(guān)閉數(shù)據(jù)庫(kù)連接關(guān)閉數(shù)據(jù)庫(kù)連接加載加載JDBC驅(qū)動(dòng)程序驅(qū)動(dòng)程序JDBC的驅(qū)動(dòng)管理器找到相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序并的驅(qū)動(dòng)管理器找到相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序并加載。加載。加載方法有兩種一是從系統(tǒng)屬性加載方法有兩種一是從系統(tǒng)屬性Java.sql 中讀取中讀取Driver的類名并一一注冊(cè),二是在程序中使用的類名并一一注冊(cè),二是在程序中使用Class.for
12、Name()方法動(dòng)態(tài)裝載并注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)。方法動(dòng)態(tài)裝載并注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)。這種方法用得較多,該方法是靜態(tài)方法參數(shù)是以字這種方法用得較多,該方法是靜態(tài)方法參數(shù)是以字符形式表達(dá)的類符形式表達(dá)的類 長(zhǎng)名,并拋出長(zhǎng)名,并拋出ClassNotFoundException 異常在使用該方法時(shí)異常在使用該方法時(shí)要注意進(jìn)行異常處理。要注意進(jìn)行異常處理。Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);/加載加載JDbc-ODBC橋驅(qū)動(dòng)橋驅(qū)動(dòng)Class.forName(“oracle.jdbc.driver.OracleDriver”);建立數(shù)據(jù)庫(kù)連接建立數(shù)據(jù)庫(kù)連接使數(shù)據(jù)
13、庫(kù)驅(qū)動(dòng)連接到相應(yīng)的使數(shù)據(jù)庫(kù)驅(qū)動(dòng)連接到相應(yīng)的DBMS,使用,使用DriverManager 類的類的getConnection() 方法:方法:Public static Connection getConnection( String url,String user,String password ) throws SQLException參數(shù)含義如下:參數(shù)含義如下:Url =jdbc:odbc:surnames ; subname 為數(shù)據(jù)源名。為數(shù)據(jù)源名。User 數(shù)據(jù)庫(kù)用戶名數(shù)據(jù)庫(kù)用戶名 passward 為相關(guān)的口令為相關(guān)的口令例如:例如:Connection con=DriverMan
14、ager.getConnection( jdbc:odbc:wombat,”sa”,”j8”);執(zhí)行執(zhí)行SQL語(yǔ)句語(yǔ)句執(zhí)行是首先在數(shù)據(jù)庫(kù)連接的基礎(chǔ)上,創(chuàng)建執(zhí)行是首先在數(shù)據(jù)庫(kù)連接的基礎(chǔ)上,創(chuàng)建Statement對(duì)象格式是:對(duì)象格式是:public Statement createStatement() throws SQLException;然后通過(guò)該然后通過(guò)該Statement 對(duì)象的兩個(gè)方法分別執(zhí)行索對(duì)象的兩個(gè)方法分別執(zhí)行索操作和更新操作操作和更新操作Public ResultSet executeQuery(String sql) throws SQLException /執(zhí)行查詢操作方法
15、執(zhí)行查詢操作方法Public int executeUpdate(String sql) throws SQLException /執(zhí)行更新操作方法執(zhí)行更新操作方法例如例如 Class.forName(“sun. jdbc.odbc.JdcOdbcDriver”);Connect con=DriverManager.getConnection( jdbc:odbc:wombat,”sa”,”j8”);Statement stmt=con.createStatement();String createTableCoffees=“CREAT TABLE COFFEES” +”(COF_NAME V
16、ARCHAR(32),SUP_ID INTEGER” + “,PRICE FLOAT,SALES INTEGER,TOTAL INTEGER)”;ResultSet rst=stmt.executeUpdate(createTablecoffees); ResultSet rst=stmt.executeQuery(“SELECT A,B,C FROM TABLE”);處理結(jié)果集處理結(jié)果集 結(jié)果集是保存結(jié)果集是保存SQL的查詢語(yǔ)句返回的結(jié)果記錄的查詢語(yǔ)句返回的結(jié)果記錄表,是表,是ResultSet 類的對(duì)象。該對(duì)象通過(guò)游標(biāo)類的對(duì)象。該對(duì)象通過(guò)游標(biāo)(cursor)控制具體記錄的訪問(wèn)控制具體記錄的
17、訪問(wèn) 一個(gè)結(jié)果集中游標(biāo)的初始位置是在第一行記錄之一個(gè)結(jié)果集中游標(biāo)的初始位置是在第一行記錄之前,隨后可通過(guò)前,隨后可通過(guò) next()方法移動(dòng)游標(biāo)。方法移動(dòng)游標(biāo)。 next()方方法返回值為法返回值為Boolean類型,在表的最后一條記錄時(shí)類型,在表的最后一條記錄時(shí)為為false,否則返回,否則返回true。 讀數(shù)據(jù)用讀數(shù)據(jù)用 getXXX()方法方法舉例舉例ResultSet rs=stmt.executeQuery(“select a,b,c from table”) ;While(rs.next() int x=rs.getInt(“a”);String s=rs.getString(“b
18、”);Float f=getFloat(“c”); 或或 While(rs.next() int x=rs.getInt(1);String s=rs.getString(2);Float f=getFloat(3);關(guān)閉數(shù)據(jù)庫(kù)連接關(guān)閉數(shù)據(jù)庫(kù)連接在數(shù)據(jù)庫(kù)操作完成后要顯式地關(guān)閉連接如下事例:在數(shù)據(jù)庫(kù)操作完成后要顯式地關(guān)閉連接如下事例: Connection con=DriverManager.getConnection( jdbc:odbc:womabt,”sa”,”j8”);Statement stmt=con.createStatement();Stmt.close();Con.close(
19、);例題:例題: 131 JDBC應(yīng)用示例(應(yīng)用示例(P428)JDBC的高級(jí)特征的使用的高級(jí)特征的使用JDBC提供的高級(jí)特性有預(yù)編譯、存儲(chǔ)過(guò)程、事務(wù)等。提供的高級(jí)特性有預(yù)編譯、存儲(chǔ)過(guò)程、事務(wù)等。預(yù)編譯語(yǔ)句預(yù)編譯語(yǔ)句 預(yù)編譯語(yǔ)句預(yù)編譯語(yǔ)句PreparedStatement 是是java.sql 中的中的一個(gè)接口,它是一個(gè)接口,它是Statement的子接口。的子接口。 在用在用Statement 對(duì)象執(zhí)行對(duì)象執(zhí)行SQL時(shí),需要將時(shí),需要將SQL語(yǔ)語(yǔ)句發(fā)送給句發(fā)送給DBMS ,由,由DBMS先進(jìn)行編譯然后再執(zhí)行。先進(jìn)行編譯然后再執(zhí)行。而預(yù)編譯語(yǔ)句則不同,在創(chuàng)建而預(yù)編譯語(yǔ)句則不同,在創(chuàng)建Prepa
20、redStatement 對(duì)象時(shí)就指定了對(duì)象時(shí)就指定了SQL語(yǔ)句,該語(yǔ)句,該SQL語(yǔ)句將立刻發(fā)送給語(yǔ)句將立刻發(fā)送給DBMS進(jìn)行編譯。當(dāng)預(yù)編譯語(yǔ)句被執(zhí)行時(shí),進(jìn)行編譯。當(dāng)預(yù)編譯語(yǔ)句被執(zhí)行時(shí),DBMS可可以直接運(yùn)行編譯后以直接運(yùn)行編譯后SQL語(yǔ)句,無(wú)需編譯。除此外,預(yù)語(yǔ)句,無(wú)需編譯。除此外,預(yù)編譯還支持帶有參數(shù)的編譯還支持帶有參數(shù)的SQL語(yǔ)句,減少執(zhí)行時(shí)間提高語(yǔ)句,減少執(zhí)行時(shí)間提高執(zhí)行效率。執(zhí)行效率。1、預(yù)編譯語(yǔ)句的創(chuàng)建、預(yù)編譯語(yǔ)句的創(chuàng)建 預(yù)編譯語(yǔ)句,用預(yù)編譯語(yǔ)句,用Connection 接口的接口的prepareStatement() 創(chuàng)建,其格式如下:創(chuàng)建,其格式如下:preparedState
21、ment prepareStatement (String sql) throws SQLException參數(shù)參數(shù) sql 是可以包含參數(shù)表示符是可以包含參數(shù)表示符“?”的的SQL語(yǔ)句。語(yǔ)句。例如例如 PreparedStatement updatesales=con. prepareStatement(“UPDATE COFFEES SET SALES=? WHERE COF_NAME=?”) ;2、預(yù)編譯語(yǔ)句參數(shù)值的設(shè)置、預(yù)編譯語(yǔ)句參數(shù)值的設(shè)置 若是預(yù)編譯語(yǔ)句中含有參數(shù),則在執(zhí)行該語(yǔ)句時(shí)需若是預(yù)編譯語(yǔ)句中含有參數(shù),則在執(zhí)行該語(yǔ)句時(shí)需要設(shè)定參數(shù)的值。參數(shù)的設(shè)置是用要設(shè)定參數(shù)的值。參數(shù)的設(shè)置
22、是用PrepateStatement接口的接口的SetXxx()方法,其格式如下:方法,其格式如下: void setXxx(int paramIndex,Xxx x);參數(shù)參數(shù) paramIndex 為為SQL語(yǔ)句所有參數(shù)的序號(hào)語(yǔ)句所有參數(shù)的序號(hào) Xxx 是要設(shè)置的參數(shù)值是要設(shè)置的參數(shù)值例如:例如: updateSales.setInt(1,75); updateSales.setString(2,”Colombian”);經(jīng)過(guò)上述參數(shù)設(shè)置后,等價(jià)于普通的經(jīng)過(guò)上述參數(shù)設(shè)置后,等價(jià)于普通的SQL語(yǔ)句語(yǔ)句3、預(yù)編譯語(yǔ)句的使用、預(yù)編譯語(yǔ)句的使用預(yù)編譯語(yǔ)句的執(zhí)行,是通過(guò)預(yù)編譯語(yǔ)句的執(zhí)行,是通過(guò)Pre
23、pareStatement 的的兩個(gè)方法:兩個(gè)方法:ResultSet executeQuery() throws SQLExceptionint executeUpdate() throws SQLException例題例題132:預(yù)編譯語(yǔ)句示例預(yù)編譯語(yǔ)句示例 存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程是一組存儲(chǔ)過(guò)程是一組SQL語(yǔ)句,它們形成一個(gè)相對(duì)獨(dú)立語(yǔ)句,它們形成一個(gè)相對(duì)獨(dú)立的邏輯單元,可完成特定的任務(wù)。存儲(chǔ)過(guò)程封裝了的邏輯單元,可完成特定的任務(wù)。存儲(chǔ)過(guò)程封裝了對(duì)數(shù)據(jù)庫(kù)的一組更新或查詢操作,可以經(jīng)過(guò)編譯、對(duì)數(shù)據(jù)庫(kù)的一組更新或查詢操作,可以經(jīng)過(guò)編譯、可以帶有參數(shù)。很多可以帶有參數(shù)。很多DBMS都支持存儲(chǔ)過(guò)程
24、但不同都支持存儲(chǔ)過(guò)程但不同的的DBMS之間的存儲(chǔ)過(guò)程相差很大,本書以之間的存儲(chǔ)過(guò)程相差很大,本書以SQL Server 為例對(duì)存儲(chǔ)過(guò)程進(jìn)行介紹。為例對(duì)存儲(chǔ)過(guò)程進(jìn)行介紹。1、存儲(chǔ)過(guò)程的創(chuàng)建、存儲(chǔ)過(guò)程的創(chuàng)建 SQL Server 中使用中使用CREATE PROCEDURE語(yǔ)句語(yǔ)句創(chuàng)建存儲(chǔ)過(guò)程,例如:創(chuàng)建存儲(chǔ)過(guò)程,例如:Create procedure SHOW_SUPPLIERSAs Select SUPPLIERS.SUP_NAME,COFFEES.COF_NAMEFrom SUPPLIERS,XOFFEESWhere SUPPLIERS.SUP_IN=COFFEES.SUP_IDOrder
25、by SUP_NAME存儲(chǔ)過(guò)程的創(chuàng)建示例存儲(chǔ)過(guò)程的創(chuàng)建示例String createProcedure=“create procedure SHOW_SUPPLIERS”+”AS”+ “Select SUPPLIERS.SUP_NAME,COFFEES.COF_NAME”+”From SUPPLIERS,XOFFEES”+”Where SUPPLIERS.SUP_IN=COFFEES.SUP_ID”+”O(jiān)rder by SUP_NAME”Statement stmt=con.createStatement();Stmt.executeUpdate(createProcedure);/創(chuàng)建了存儲(chǔ)
26、過(guò)程創(chuàng)建了存儲(chǔ)過(guò)程 SHOW_SUPPLIERS存儲(chǔ)過(guò)程的調(diào)用存儲(chǔ)過(guò)程的調(diào)用 通過(guò)通過(guò)JDBC可以調(diào)用存儲(chǔ)過(guò)程,過(guò)程如下:可以調(diào)用存儲(chǔ)過(guò)程,過(guò)程如下: 通過(guò)一個(gè)打開的數(shù)據(jù)庫(kù)連接創(chuàng)建一個(gè)通過(guò)一個(gè)打開的數(shù)據(jù)庫(kù)連接創(chuàng)建一個(gè) CallableStatement 類型的對(duì)象,它包含對(duì)存儲(chǔ)類型的對(duì)象,它包含對(duì)存儲(chǔ) 過(guò)程的調(diào)用。過(guò)程的調(diào)用。再調(diào)用該對(duì)象的再調(diào)用該對(duì)象的executeQuery()方法執(zhí)行存儲(chǔ)過(guò)方法執(zhí)行存儲(chǔ)過(guò) 程。程。CallableStatement cs=con.prepareCall(“call SHOW_SUPPLIERS”)ResultSet rs=cs.executeQuery()
27、;存儲(chǔ)過(guò)程的執(zhí)行要根據(jù)起包含的存儲(chǔ)過(guò)程的執(zhí)行要根據(jù)起包含的SQL語(yǔ)句選取不同語(yǔ)句選取不同的方法。的方法。executeQuery() 只包含一個(gè)只包含一個(gè)select語(yǔ)句語(yǔ)句executeUpdate() 只包含一個(gè)更新或數(shù)據(jù)定義語(yǔ)句只包含一個(gè)更新或數(shù)據(jù)定義語(yǔ)句Execute() 多個(gè)多個(gè)SQL語(yǔ)句,可能同時(shí)包含檢語(yǔ)句,可能同時(shí)包含檢索與更新語(yǔ)句會(huì)產(chǎn)生多個(gè)結(jié)果集,這時(shí)需要使用索與更新語(yǔ)句會(huì)產(chǎn)生多個(gè)結(jié)果集,這時(shí)需要使用Execute()方法。方法。 事務(wù)事務(wù)事務(wù)是保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的完整性與一致性的重要事務(wù)是保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的完整性與一致性的重要機(jī)制。事務(wù)具有原子性,由多個(gè)機(jī)制。事務(wù)具有原子性,由多個(gè)SQL語(yǔ)句組成這組語(yǔ)句組成這組語(yǔ)句要么都執(zhí)行,要么都不執(zhí)行。語(yǔ)句要么都執(zhí)行,要么都不執(zhí)行。JDBC中實(shí)現(xiàn)事務(wù)操作關(guān)鍵是中實(shí)現(xiàn)事務(wù)操作關(guān)鍵是Connection 接口的三個(gè)接口的三個(gè)方法:方法: setAutocommit() 一個(gè)連接創(chuàng)建后就采用一種自動(dòng)提交模式,即每一個(gè)一個(gè)連接創(chuàng)建后就采用一種自動(dòng)提交模式,即每一個(gè)SQL語(yǔ)句都被看作是一個(gè)事務(wù)。要吧多個(gè)語(yǔ)句都被看作是一個(gè)事務(wù)。要吧多個(gè)SQL語(yǔ)句作為語(yǔ)句作為一個(gè)事務(wù)就要關(guān)閉這種提交模式,調(diào)用當(dāng)前的一個(gè)事務(wù)就要關(guān)閉這種提交模式,調(diào)用當(dāng)前的setAutoC
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 龍池鎮(zhèn)屋頂防水施工方案
- 三亞市海棠區(qū)青田健康養(yǎng)護(hù)中心項(xiàng)目環(huán)境影響報(bào)告表環(huán)評(píng)報(bào)告表
- 鋪裝廣場(chǎng)專項(xiàng)施工方案
- 庭院洗手池設(shè)計(jì)與施工方案
- 低壓輸電線路搶修施工方案
- 天津陽(yáng)臺(tái)垂直綠化施工方案
- 鄭州餐廳防滑地板施工方案
- 遵義鋁合金防滑條施工方案
- 數(shù)控加工工藝與編程技術(shù)基礎(chǔ) 教案 模塊三 項(xiàng)目一 任務(wù)5 孔的加工
- 茶葉多角度精細(xì)化栽培種植優(yōu)勢(shì)與路徑的建議分析
- 中國(guó)貨幣發(fā)展史-一年級(jí)ppt
- 第3課 中古時(shí)期的歐洲
- 水利監(jiān)理工程師安全生產(chǎn)責(zé)任制度
- 2023年廣安市岳池縣事業(yè)單位考試真題
- 【招標(biāo)控制價(jià)編制研究文獻(xiàn)綜述(論文)4800字】
- 駕駛員應(yīng)急駕駛操作指南
- 細(xì)胞和組織損傷與修復(fù)復(fù)習(xí)題
- 2023年長(zhǎng)沙民政職業(yè)技術(shù)學(xué)院?jiǎn)握忻嬖囶}庫(kù)及答案解析
- 二年級(jí)下冊(cè)科學(xué)課程綱要
- GB/T 9793-2012熱噴涂金屬和其他無(wú)機(jī)覆蓋層鋅、鋁及其合金
- GB/T 30839.33-2015工業(yè)電熱裝置能耗分等第33部分:工頻無(wú)心感應(yīng)爐
評(píng)論
0/150
提交評(píng)論