版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第1010章章 數(shù)據(jù)庫訪問的編程技術(shù)數(shù)據(jù)庫訪問的編程技術(shù) 在開發(fā)企業(yè)級業(yè)務(wù)應(yīng)用系統(tǒng)的過程中在開發(fā)企業(yè)級業(yè)務(wù)應(yīng)用系統(tǒng)的過程中,需要使用數(shù)據(jù)庫管理系統(tǒng)來存儲、,需要使用數(shù)據(jù)庫管理系統(tǒng)來存儲、管理企業(yè)的業(yè)務(wù)數(shù)據(jù)。管理企業(yè)的業(yè)務(wù)數(shù)據(jù)。jdbcjdbc為在為在javajava中開發(fā)數(shù)據(jù)庫應(yīng)用程序提供了良好的中開發(fā)數(shù)據(jù)庫應(yīng)用程序提供了良好的工具,掌握工具,掌握jdbcjdbc能夠使得開發(fā)人員方能夠使得開發(fā)人員方便快捷地編寫數(shù)據(jù)庫應(yīng)用程序。便快捷地編寫數(shù)據(jù)庫應(yīng)用程序。10.1 jdbc概述10.1 jdbc概述 jdbc(java database connectivity,java數(shù)據(jù)庫數(shù)據(jù)庫連接連接)
2、 是一種可用于執(zhí)行是一種可用于執(zhí)行sql語句的語句的java api,它為數(shù)據(jù)庫應(yīng)用開發(fā)人員、數(shù)據(jù)庫前臺工具開發(fā)它為數(shù)據(jù)庫應(yīng)用開發(fā)人員、數(shù)據(jù)庫前臺工具開發(fā)人員提供了一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計接口,使開人員提供了一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計接口,使開發(fā)人員可以方便地將各種發(fā)人員可以方便地將各種sql語句傳送到任何關(guān)語句傳送到任何關(guān)系數(shù)據(jù)庫中。系數(shù)據(jù)庫中。 jdbc由一些由一些java語言編寫的類和接口組成。用語言編寫的類和接口組成。用戶使用這些類和接口就可以用統(tǒng)一的形式訪問各戶使用這些類和接口就可以用統(tǒng)一的形式訪問各種不同的關(guān)系數(shù)據(jù)庫,并開發(fā)訪問不同廠商數(shù)據(jù)種不同的關(guān)系數(shù)據(jù)庫,并開發(fā)訪問不同廠商數(shù)據(jù)庫的應(yīng)
3、用程序。庫的應(yīng)用程序。 jdbcjdbc的基本結(jié)構(gòu)如圖所示。從圖中可以的基本結(jié)構(gòu)如圖所示。從圖中可以看出:頂層是看出:頂層是javajava應(yīng)用程序,它既可以應(yīng)用程序,它既可以是是appletapplet應(yīng)用程序,也可以是獨立運行應(yīng)用程序,也可以是獨立運行的的applicationapplication應(yīng)用程序,甚至還可以是應(yīng)用程序,甚至還可以是服務(wù)器端運行的服務(wù)器端運行的severletseverlet和和ejbejb組件等。組件等。其他兩層是其他兩層是jdbcjdbc接口,分別是面向程序接口,分別是面向程序員的員的jdbc apijdbc api及面向數(shù)據(jù)庫廠商的及面向數(shù)據(jù)庫廠商的jdbc
4、 jdbc driver apidriver api。10.1.1 jdbc的基本結(jié)構(gòu)的基本結(jié)構(gòu)jdbcjdbc的基本結(jié)構(gòu)的基本結(jié)構(gòu) java應(yīng)用程序通過應(yīng)用程序通過jdbc api接口,經(jīng)由接口,經(jīng)由jdbc驅(qū)動程序管理器、驅(qū)動程序管理器、jdbc driver api和和jdbc驅(qū)動程序訪問下層的數(shù)據(jù)庫驅(qū)動程序訪問下層的數(shù)據(jù)庫。jdbc api屏蔽了不同的數(shù)據(jù)庫驅(qū)動程屏蔽了不同的數(shù)據(jù)庫驅(qū)動程序之間的差異,使得程序設(shè)計人員只能序之間的差異,使得程序設(shè)計人員只能用一個標(biāo)準(zhǔn)的、純用一個標(biāo)準(zhǔn)的、純java的數(shù)據(jù)庫程序設(shè)的數(shù)據(jù)庫程序設(shè)計接口,為在計接口,為在java中訪問任意類型的數(shù)中訪問任意類型的
5、數(shù)據(jù)庫提供支持。據(jù)庫提供支持。 jdbc驅(qū)動程序程序管理器為應(yīng)用程序裝驅(qū)動程序程序管理器為應(yīng)用程序裝載數(shù)據(jù)庫驅(qū)動程序,它與具體的數(shù)據(jù)庫載數(shù)據(jù)庫驅(qū)動程序,它與具體的數(shù)據(jù)庫有關(guān),用于向數(shù)據(jù)庫提交有關(guān),用于向數(shù)據(jù)庫提交sql請求。請求。 數(shù)據(jù)庫驅(qū)動程序一般是由生產(chǎn)數(shù)據(jù)庫的廠數(shù)據(jù)庫驅(qū)動程序一般是由生產(chǎn)數(shù)據(jù)庫的廠家提供。不同的廠商為數(shù)據(jù)庫提供不同的家提供。不同的廠商為數(shù)據(jù)庫提供不同的驅(qū)動程序,從而把訪問操作數(shù)據(jù)庫的復(fù)雜驅(qū)動程序,從而把訪問操作數(shù)據(jù)庫的復(fù)雜操作封裝在自己的驅(qū)動程序中。例如,數(shù)操作封裝在自己的驅(qū)動程序中。例如,數(shù)據(jù)庫廠商據(jù)庫廠商oracleoracle為為oracle10oracle10數(shù)據(jù)
6、庫提供了數(shù)據(jù)庫提供了不同的驅(qū)動程序,但都實現(xiàn)了不同的驅(qū)動程序,但都實現(xiàn)了jdbcjdbc接口。接口。 對于應(yīng)用程序開發(fā)人員而言,不必關(guān)心特對于應(yīng)用程序開發(fā)人員而言,不必關(guān)心特定數(shù)據(jù)庫的復(fù)雜操作,只需要掌握定數(shù)據(jù)庫的復(fù)雜操作,只需要掌握javajava提提供的訪問數(shù)據(jù)庫的接口,就可以編寫訪問供的訪問數(shù)據(jù)庫的接口,就可以編寫訪問不同類型的數(shù)據(jù)庫的應(yīng)用程序。不同類型的數(shù)據(jù)庫的應(yīng)用程序。10.1.2 jdbc 10.1.2 jdbc 驅(qū)動程序驅(qū)動程序(1)jdbc-odbc 橋接器橋接器(bridge)。它負(fù)責(zé)將它負(fù)責(zé)將jdbc調(diào)用轉(zhuǎn)換為調(diào)用轉(zhuǎn)換為odbc調(diào)用,應(yīng)用程序是通過調(diào)用,應(yīng)用程序是通過jdb
7、c調(diào)用連接到一個使用調(diào)用連接到一個使用odbc驅(qū)動程序的數(shù)驅(qū)動程序的數(shù)據(jù)庫。要求每個客戶端都安裝上數(shù)據(jù)庫對應(yīng)的據(jù)庫。要求每個客戶端都安裝上數(shù)據(jù)庫對應(yīng)的odbc和和jdbc-odbc bridge兩種驅(qū)動程序。兩種驅(qū)動程序。(2) 本地本地api,部分,部分java驅(qū)動程序驅(qū)動程序(native api, partly java driver)。它是部分使用它是部分使用java語言編語言編寫和部分使用本機代碼編寫的驅(qū)動程序,它將寫和部分使用本機代碼編寫的驅(qū)動程序,它將數(shù)據(jù)庫廠商的特殊協(xié)議轉(zhuǎn)換成數(shù)據(jù)庫廠商的特殊協(xié)議轉(zhuǎn)換成java代碼及二進(jìn)代碼及二進(jìn)制類碼,即把客戶端的制類碼,即把客戶端的jdbc調(diào)
8、用轉(zhuǎn)換為調(diào)用轉(zhuǎn)換為oracle、sybase、db2或其他或其他dbms的調(diào)用,使的調(diào)用,使java 數(shù)據(jù)庫客戶端與數(shù)據(jù)庫服務(wù)器端通信。數(shù)據(jù)庫客戶端與數(shù)據(jù)庫服務(wù)器端通信。10.1.2 jdbc 驅(qū)動程序驅(qū)動程序 (3)jdbc-net,純,純java驅(qū)動程序。驅(qū)動程序。它是純它是純java的驅(qū)動程序,通過一定的網(wǎng)絡(luò)協(xié)議與數(shù)據(jù)庫服的驅(qū)動程序,通過一定的網(wǎng)絡(luò)協(xié)議與數(shù)據(jù)庫服務(wù)器上的務(wù)器上的jdbc中間件通信,由中間件程序?qū)⒕W(wǎng)中間件通信,由中間件程序?qū)⒕W(wǎng)絡(luò)協(xié)議指令轉(zhuǎn)換成數(shù)據(jù)庫指令。中間件可支持絡(luò)協(xié)議指令轉(zhuǎn)換成數(shù)據(jù)庫指令。中間件可支持多種數(shù)據(jù)庫,適合具有中間件的分布式應(yīng)用。多種數(shù)據(jù)庫,適合具有中間件的分
9、布式應(yīng)用。(4)本地協(xié)議,純)本地協(xié)議,純java驅(qū)動程序。驅(qū)動程序。可這類驅(qū)動程可這類驅(qū)動程序通過實現(xiàn)一定的數(shù)據(jù)庫協(xié)議序通過實現(xiàn)一定的數(shù)據(jù)庫協(xié)議(如如oracle公司的公司的sqlnet)能將能將jdbc調(diào)用轉(zhuǎn)換為數(shù)據(jù)庫直接使用調(diào)用轉(zhuǎn)換為數(shù)據(jù)庫直接使用的網(wǎng)絡(luò)協(xié)議,使的網(wǎng)絡(luò)協(xié)議,使java數(shù)據(jù)庫客戶端直接與數(shù)據(jù)數(shù)據(jù)庫客戶端直接與數(shù)據(jù)庫服務(wù)器通信。它不需要安裝客戶端軟件,它庫服務(wù)器通信。它不需要安裝客戶端軟件,它是是100%的的java程序,所以其效率很高。程序,所以其效率很高。10.2 jdbc中的主要類和接口 jdbc由一系列的類和接口組成,包括:由一系列的類和接口組成,包括: 連接連接(c
10、onnection):實現(xiàn)建立與數(shù)據(jù)庫的連接實現(xiàn)建立與數(shù)據(jù)庫的連接 sql語句語句(statement):向數(shù)據(jù)庫發(fā)起查詢請求向數(shù)據(jù)庫發(fā)起查詢請求 結(jié)果集(結(jié)果集(resultset):):處理數(shù)據(jù)庫返回結(jié)果處理數(shù)據(jù)庫返回結(jié)果 其中核心的類和接口包含在其中核心的類和接口包含在java.sql包和包和javax.sql包中。表中列出了包中。表中列出了java.sql包中訪問數(shù)包中訪問數(shù)據(jù)庫的重要類和接口及它們的功能說明。據(jù)庫的重要類和接口及它們的功能說明。訪問數(shù)據(jù)庫的重要類和接口訪問數(shù)據(jù)庫的重要類和接口類名類名功能說明功能說明java.sql.drivermanager 用于加載驅(qū)動程序,建立與
11、數(shù)據(jù)庫的連接。在用于加載驅(qū)動程序,建立與數(shù)據(jù)庫的連接。在jdbc 2.0中建議使用中建議使用datasource接口來連接包接口來連接包括數(shù)據(jù)庫在內(nèi)的數(shù)據(jù)源。括數(shù)據(jù)庫在內(nèi)的數(shù)據(jù)源。java.sql.driver 驅(qū)動程序接口。驅(qū)動程序接口。java.sql.connection 用于建立與數(shù)據(jù)庫的連接。用于建立與數(shù)據(jù)庫的連接。java.sql.statement 用于執(zhí)行用于執(zhí)行sql語句并返回結(jié)果。它有兩個子類:語句并返回結(jié)果。它有兩個子類:java.sql.preparedstatement:用于執(zhí)行預(yù)編譯:用于執(zhí)行預(yù)編譯的的sql語句;語句;java.sql.callablestatem
12、ent:用于:用于執(zhí)行對于一個數(shù)據(jù)庫的內(nèi)嵌過程的調(diào)用執(zhí)行對于一個數(shù)據(jù)庫的內(nèi)嵌過程的調(diào)用java.sql.resultset 控制控制sql查詢返回的結(jié)果集。查詢返回的結(jié)果集。java.sql.sqlexception sql異常處理類,其父類是異常處理類,其父類是java.lang.exception。 訪問數(shù)據(jù)庫的第一步是與數(shù)據(jù)源建立連訪問數(shù)據(jù)庫的第一步是與數(shù)據(jù)源建立連接,只有建立了連接,才能在數(shù)據(jù)庫和接,只有建立了連接,才能在數(shù)據(jù)庫和應(yīng)用程序之間移動數(shù)據(jù)。應(yīng)用程序之間移動數(shù)據(jù)。 drivermanager類是類是java.sql包中用于數(shù)包中用于數(shù)據(jù)庫驅(qū)動程序管理的類,用于在數(shù)據(jù)庫據(jù)庫驅(qū)動
13、程序管理的類,用于在數(shù)據(jù)庫和相應(yīng)驅(qū)動程序之間建立連接,也處理和相應(yīng)驅(qū)動程序之間建立連接,也處理像驅(qū)動程序登錄時間限制、登錄和跟蹤像驅(qū)動程序登錄時間限制、登錄和跟蹤消息的顯示等事務(wù)。消息的顯示等事務(wù)。10.2.1 drivermanager類類drivermanager類的主要成員方法類的主要成員方法類、接口或方法名類、接口或方法名功能說明功能說明static void registerdriver(driver driver)注冊數(shù)據(jù)庫驅(qū)動程序注冊數(shù)據(jù)庫驅(qū)動程序static void deregisterdriver(driver driver)從數(shù)據(jù)庫驅(qū)動程序列表中刪除指定的數(shù)據(jù)從數(shù)據(jù)庫驅(qū)動
14、程序列表中刪除指定的數(shù)據(jù)庫驅(qū)動程序庫驅(qū)動程序static connection getconnection(string url)創(chuàng)建與指定的數(shù)據(jù)庫創(chuàng)建與指定的數(shù)據(jù)庫url的連接的連接static connection getconnection(string url, properties info)通過指定的數(shù)據(jù)庫通過指定的數(shù)據(jù)庫url及屬性信息創(chuàng)建數(shù)據(jù)及屬性信息創(chuàng)建數(shù)據(jù)庫連接庫連接static connection getconnection(string url,string username,string password)通過指定的數(shù)據(jù)庫通過指定的數(shù)據(jù)庫url及用戶名、密碼創(chuàng)建及用
15、戶名、密碼創(chuàng)建數(shù)據(jù)庫連接數(shù)據(jù)庫連接static driver getdrive(string url)獲取獲取url指定的數(shù)據(jù)庫驅(qū)動程序指定的數(shù)據(jù)庫驅(qū)動程序 drivermanager 對象提供了三種建立數(shù)據(jù)庫連接的對象提供了三種建立數(shù)據(jù)庫連接的方法。每種方法都返回一個方法。每種方法都返回一個 connection 對象實例,對象實例,區(qū)別是它們接收的參數(shù)不同。區(qū)別是它們接收的參數(shù)不同。 url用于指定數(shù)據(jù)源和用于連接到該數(shù)據(jù)源的數(shù)據(jù)用于指定數(shù)據(jù)源和用于連接到該數(shù)據(jù)源的數(shù)據(jù)庫的連接類型。其格式如下:庫的連接類型。其格式如下:jdbc:其中:其中: jdbc: 表示使用的協(xié)議是表示使用的協(xié)議是j
16、dbc。 :驅(qū)動程序或者連接機制的名稱,可以有一個驅(qū)動程序或者連接機制的名稱,可以有一個或者多個驅(qū)動程序支持或者多個驅(qū)動程序支持:數(shù)據(jù)庫的唯一標(biāo)識符數(shù)據(jù)庫的唯一標(biāo)識符例如:通過例如:通過jdbc-odbc橋和數(shù)據(jù)庫的標(biāo)識符橋和數(shù)據(jù)庫的標(biāo)識符dbtest來訪來訪問數(shù)據(jù)庫的問數(shù)據(jù)庫的url為:為:“jdbc:odbc:dbtest” java.sql.driver接口規(guī)定了所有接口規(guī)定了所有jdbc驅(qū)驅(qū)動程序必須實現(xiàn)的方法。加載或注冊一動程序必須實現(xiàn)的方法。加載或注冊一個數(shù)據(jù)庫驅(qū)動程序,實際上就是創(chuàng)建了個數(shù)據(jù)庫驅(qū)動程序,實際上就是創(chuàng)建了數(shù)據(jù)庫驅(qū)動程序的一個實例,從而保證數(shù)據(jù)庫驅(qū)動程序的一個實例,從
17、而保證java程序使用統(tǒng)一的形式,通過不同的程序使用統(tǒng)一的形式,通過不同的數(shù)據(jù)庫驅(qū)動器訪問各種數(shù)據(jù)庫。數(shù)據(jù)庫驅(qū)動器訪問各種數(shù)據(jù)庫。10.2.2 driver driver接口接口 java.sql.connection是是java.sql包中定義的包中定義的一個接口,其功能是建立與數(shù)據(jù)庫的連一個接口,其功能是建立與數(shù)據(jù)庫的連接。只有成功地建立與數(shù)據(jù)庫的連接,接。只有成功地建立與數(shù)據(jù)庫的連接,才能夠創(chuàng)建用于執(zhí)行才能夠創(chuàng)建用于執(zhí)行sql語句的語句的statement對象,進(jìn)而獲取數(shù)據(jù)庫執(zhí)行對象,進(jìn)而獲取數(shù)據(jù)庫執(zhí)行sql語句后返回的結(jié)果。語句后返回的結(jié)果。10.2.3 connection10.2.
18、3 connection接口接口類或接口名類或接口名功能說明功能說明statement createstatement() 創(chuàng)建一個創(chuàng)建一個statement對象,它將生成具有對象,它將生成具有特定類型和并發(fā)性的結(jié)果集特定類型和并發(fā)性的結(jié)果集void commit()提交對數(shù)據(jù)庫的改動并釋放當(dāng)前連接持提交對數(shù)據(jù)庫的改動并釋放當(dāng)前連接持有的數(shù)據(jù)庫的鎖有的數(shù)據(jù)庫的鎖void rollback() 回滾當(dāng)前事務(wù)中所有改動,釋放當(dāng)前連回滾當(dāng)前事務(wù)中所有改動,釋放當(dāng)前連接持有的數(shù)據(jù)庫的鎖接持有的數(shù)據(jù)庫的鎖string getcatalog()獲取連接對象的當(dāng)前目錄名獲取連接對象的當(dāng)前目錄名boolean
19、 isclosed()判斷連接是否已關(guān)閉判斷連接是否已關(guān)閉void close()立即釋放連接對象的數(shù)據(jù)庫和立即釋放連接對象的數(shù)據(jù)庫和jdbc資資源源connection接口的主要成員方法10.2.4 statement接口接口 statementstatement是在已經(jīng)建立的連接的基礎(chǔ)上向是在已經(jīng)建立的連接的基礎(chǔ)上向數(shù)據(jù)庫發(fā)送數(shù)據(jù)庫發(fā)送sqlsql語句的對象。語句的對象。 statementstatement接口定義了執(zhí)行接口定義了執(zhí)行sqlsql語句和獲取語句和獲取返回結(jié)果的成員方法。它們都作為在給定返回結(jié)果的成員方法。它們都作為在給定連接上執(zhí)行連接上執(zhí)行 sql sql 語句的容器,每
20、個都專用語句的容器,每個都專用于發(fā)送特定類型的于發(fā)送特定類型的 sql sql 語句。由于語句。由于statementstatement為一個接口,它本身不能被實例為一個接口,它本身不能被實例化,必須通過調(diào)用化,必須通過調(diào)用connectionconnection對象的對象的createstatement()createstatement()方法創(chuàng)建一個方法創(chuàng)建一個statementstatement對象。對象。satatementsatatement接口的主要成員方法接口的主要成員方法成員方法名成員方法名功能說明功能說明void close()關(guān)閉關(guān)閉statement對象對象int exe
21、cutebatch()執(zhí)行多個執(zhí)行多個sql語句語句boolean execute(string sql)執(zhí)行執(zhí)行sql語句語句resultset executequery(string sql)進(jìn)行數(shù)據(jù)庫查詢的進(jìn)行數(shù)據(jù)庫查詢的sql語句語句int executeupdate(string sql)進(jìn)行數(shù)據(jù)庫更新的進(jìn)行數(shù)據(jù)庫更新的 sql語句語句connection getconnection()獲取對數(shù)據(jù)庫的連接獲取對數(shù)據(jù)庫的連接int getmaxrows()返回數(shù)據(jù)庫結(jié)果集最大行數(shù)返回數(shù)據(jù)庫結(jié)果集最大行數(shù)boolean getmoreresults()移動到移動到statement的下一
22、個結(jié)果處,返回多個的下一個結(jié)果處,返回多個結(jié)果的結(jié)果的sql語句語句int getquerytimeout()返回查詢超時設(shè)置返回查詢超時設(shè)置resultset getresultset()獲取結(jié)果集獲取結(jié)果集 statement 接口提供了接口提供了3種執(zhí)行種執(zhí)行sql語句的方法:語句的方法: (1)executequery( )方法:方法:執(zhí)行返回單個執(zhí)行返回單個resultset的的sql語句,如語句,如select語句。語句。 (2)executeupdate( )方法:方法:用于執(zhí)行用于執(zhí)行insert、update、delete、create table以及以及 drop tabl
23、e語句返回值是一個整數(shù),表示它語句返回值是一個整數(shù),表示它執(zhí)行的執(zhí)行的sql語句所影響的數(shù)據(jù)庫中的表的行數(shù)。語句所影響的數(shù)據(jù)庫中的表的行數(shù)。 (3)execute( )方法:方法:用于執(zhí)行返回多個結(jié)果集或多用于執(zhí)行返回多個結(jié)果集或多個更新計數(shù)的語句,它的執(zhí)行結(jié)果可能會產(chǎn)生多個更新計數(shù)的語句,它的執(zhí)行結(jié)果可能會產(chǎn)生多個個resultset,或者改變多條記錄。所以一般只有,或者改變多條記錄。所以一般只有在用戶不知道執(zhí)行在用戶不知道執(zhí)行sql聲明后會產(chǎn)生什么結(jié)果或聲明后會產(chǎn)生什么結(jié)果或可能有多種類型的結(jié)果產(chǎn)生時才會使用??赡苡卸喾N類型的結(jié)果產(chǎn)生時才會使用。10.2.5 resultset接口接口 結(jié)
24、果集結(jié)果集resultset是用來暫時存放執(zhí)行是用來暫時存放執(zhí)行sql語句語句后產(chǎn)生的結(jié)果集合。它的實例對象一般是后產(chǎn)生的結(jié)果集合。它的實例對象一般是statement類的子類通過方法類的子類通過方法execute( )或或executequery( )執(zhí)行執(zhí)行sql語句后產(chǎn)生的,包含有語句后產(chǎn)生的,包含有這些語句的執(zhí)行結(jié)果。這些語句的執(zhí)行結(jié)果。resultset類似于數(shù)據(jù)庫中類似于數(shù)據(jù)庫中的表,包含符合查詢要求的所有行的表,包含符合查詢要求的所有行 。 resultset類提供了一套類提供了一套getxxx()方法對這些行中方法對這些行中的數(shù)據(jù)進(jìn)行訪問。的數(shù)據(jù)進(jìn)行訪問。 如:如:boolea
25、n getboolean(int columnindex)、int getint(int columnindex)等,用于獲取當(dāng)前行中某一等,用于獲取當(dāng)前行中某一列的值,返回相應(yīng)類型的值。列的值,返回相應(yīng)類型的值。 它還提供了很多移動游標(biāo)它還提供了很多移動游標(biāo)(cursor)的方法。的方法。cursor是是resultset 維護(hù)的指向當(dāng)前數(shù)據(jù)行的指針。最初它位維護(hù)的指向當(dāng)前數(shù)據(jù)行的指針。最初它位于第一行之前,因此第一次訪問結(jié)果集時通常調(diào)用于第一行之前,因此第一次訪問結(jié)果集時通常調(diào)用 next()方法將游標(biāo)置于第一行上,使它成為當(dāng)前行方法將游標(biāo)置于第一行上,使它成為當(dāng)前行。隨后每次調(diào)用。隨后每
26、次調(diào)用 next()使游標(biāo)向下移動一行。使游標(biāo)向下移動一行。 另外,還提供了另外,還提供了isbeforefirst()、isafterlast()、isfirst()、islast()等方法用于判斷游標(biāo)是否在結(jié)果等方法用于判斷游標(biāo)是否在結(jié)果集的頭部、結(jié)果集的末尾、結(jié)果集的第一行和結(jié)果集的頭部、結(jié)果集的末尾、結(jié)果集的第一行和結(jié)果集的最后一行等。集的最后一行等。10.2.6 preparedstatement接口接口 當(dāng)使用當(dāng)使用statement對象執(zhí)行對象執(zhí)行sql語句時,數(shù)語句時,數(shù)據(jù)庫中的據(jù)庫中的sql語句解釋器首先將語句解釋器首先將sql語句進(jìn)語句進(jìn)行編譯,生成底層可理解的內(nèi)部命令,然
27、后行編譯,生成底層可理解的內(nèi)部命令,然后執(zhí)行。為了減少重復(fù)編譯執(zhí)行。為了減少重復(fù)編譯sql語句所產(chǎn)生的語句所產(chǎn)生的開銷,開銷,jdbc提供了提供了preparedstatement接口接口,由于,由于preparedstatement語句中包含了經(jīng)過語句中包含了經(jīng)過預(yù)編譯的預(yù)編譯的sql語句,因此可以獲得更高的執(zhí)語句,因此可以獲得更高的執(zhí)行效率。特別是當(dāng)需要反復(fù)調(diào)用某些行效率。特別是當(dāng)需要反復(fù)調(diào)用某些sql語語句時,使用該接口具有明顯的優(yōu)勢。句時,使用該接口具有明顯的優(yōu)勢。1、創(chuàng)建、創(chuàng)建preparedstatement 對于對于jdbc,當(dāng)使用,當(dāng)使用connection與某個數(shù)據(jù)庫建與某個
28、數(shù)據(jù)庫建立了連接對象立了連接對象con后,則后,則con可以調(diào)用可以調(diào)用preparedstatement()方法創(chuàng)建方法創(chuàng)建preparedstatement對象。例如:對象。例如: stmt=con.preparestatement(select * from student);2、執(zhí)行、執(zhí)行preparedstatement 創(chuàng)建了創(chuàng)建了preparedstatement對象后,就可以執(zhí)行對象后,就可以執(zhí)行它了,調(diào)用表它了,調(diào)用表10-4所示的成員方法進(jìn)行各種操所示的成員方法進(jìn)行各種操作。如:作。如: stmt.executeupdate(); 在在preparedstatement語句
29、中可以包含多個用通配語句中可以包含多個用通配符符“?”代表的字段。在執(zhí)行之前,必須為在創(chuàng)建代表的字段。在執(zhí)行之前,必須為在創(chuàng)建preparedstatement時定義的通配符提供實際的數(shù)時定義的通配符提供實際的數(shù)據(jù)??梢岳脫?jù)??梢岳胹etxxx()方法設(shè)置該字段的內(nèi)容,從方法設(shè)置該字段的內(nèi)容,從而增強程序設(shè)計的動態(tài)性。而增強程序設(shè)計的動態(tài)性。 例如:如果要替換的值是一個例如:如果要替換的值是一個int型,則可調(diào)用型,則可調(diào)用setint()方法?;旧峡梢哉业剿蟹椒ā;旧峡梢哉业剿衘ava類型的類型的setxxx()方法。方法。setxxx()方法的第一個參數(shù)指定要方法的第一個參數(shù)指
30、定要替換的占位符的索引替換的占位符的索引(索引從索引從1開始開始)。通配符在預(yù)。通配符在預(yù)處理處理sql語句中從左到右依次出現(xiàn)的順序分別稱為語句中從左到右依次出現(xiàn)的順序分別稱為第第1個,第個,第2個個第第m個通配符。個通配符。 10.2.7 callablestatement接口接口 callablestatement接口繼承了接口繼承了preparedstatement接口,用于執(zhí)行對數(shù)據(jù)接口,用于執(zhí)行對數(shù)據(jù)庫存儲過程的調(diào)用。它提供了庫存儲過程的調(diào)用。它提供了gettxxx()方方法獲取某字段的內(nèi)容。如果要獲取的值是法獲取某字段的內(nèi)容。如果要獲取的值是一個一個int型,則可調(diào)用型,則可調(diào)用g
31、etint()方法。方法。setxxx()方法的第一個參數(shù)指定要替換的占方法的第一個參數(shù)指定要替換的占位符的索引位符的索引(索引從索引從1開始開始)。通配符在預(yù)處。通配符在預(yù)處理理sql語句中從左到右依次出現(xiàn)的順序分語句中從左到右依次出現(xiàn)的順序分別稱為第別稱為第1個,第個,第2個個第第m個通配符。個通配符。1、創(chuàng)建、創(chuàng)建callablestatement 對象對象callablestatement對象是用對象是用connection接口接口的的preparecall()方法創(chuàng)建的。例如:方法創(chuàng)建的。例如: callablestatement cstm= con.preparecall(call
32、 gettestdata(?, ?); 其中被調(diào)用的存儲過程的名字為其中被調(diào)用的存儲過程的名字為gettestdata。該存儲過程有兩個變量,但。該存儲過程有兩個變量,但不含結(jié)果參數(shù)。不含結(jié)果參數(shù)。 “?”通配符為通配符為in、out或或inout參數(shù),參數(shù),取決于存儲過程本身。取決于存儲過程本身。在在jdbc中調(diào)用存儲過程的語法如下:中調(diào)用存儲過程的語法如下:call 過程名過程名:不帶參數(shù)的存儲過程的調(diào)用不帶參數(shù)的存儲過程的調(diào)用。call 過程名過程名(?, ?, .) :需要若干參數(shù)的存需要若干參數(shù)的存儲過程的調(diào)用。儲過程的調(diào)用。? = call 過程名過程名(?, ?, .): 需要若
33、干參數(shù)并需要若干參數(shù)并返回結(jié)果參數(shù)的存儲過程的調(diào)用。返回結(jié)果參數(shù)的存儲過程的調(diào)用。2、執(zhí)行、執(zhí)行callablestatement 對象對象創(chuàng)建創(chuàng)建callablestatement 對象后,就可以調(diào)用其相關(guān)成員對象后,就可以調(diào)用其相關(guān)成員方法完成所需的操作。例如:方法完成所需的操作。例如: try callablestatement cstm= con.preparecall(call getstudentid(?, ?); cstm.setstring(1, 06070010);/向存儲過程傳遞參數(shù)向存儲過程傳遞參數(shù) cstm.registeroutparameter(2,type.rea
34、l);/如需存儲過程如需存儲過程返回結(jié)果,需先調(diào)用返回結(jié)果,需先調(diào)用registeroutparameter()方法設(shè)置輸方法設(shè)置輸出參數(shù)類型出參數(shù)類型 cstm.executequery(); float x = cstmt.getfloat(1); /用用get方法獲取執(zhí)行結(jié)果方法獲取執(zhí)行結(jié)果catch(sqlexception e) 10.3 jdbc 10.3 jdbc 訪問數(shù)據(jù)庫的訪問數(shù)據(jù)庫的基本過程基本過程 利用利用jdbc訪問數(shù)據(jù)庫需要經(jīng)歷下面幾訪問數(shù)據(jù)庫需要經(jīng)歷下面幾個基本步驟:個基本步驟:(1) 注冊數(shù)據(jù)源;注冊數(shù)據(jù)源;(2) 加載加載jdbc驅(qū)動程序;驅(qū)動程序;(3) 創(chuàng)建
35、數(shù)據(jù)庫連接;創(chuàng)建數(shù)據(jù)庫連接;(4) 創(chuàng)建創(chuàng)建statement;(5) 執(zhí)行執(zhí)行statement;(6) 處理查詢結(jié)果集;處理查詢結(jié)果集;(7) 關(guān)閉數(shù)據(jù)庫連接。關(guān)閉數(shù)據(jù)庫連接。 一、注冊一、注冊odbcodbc數(shù)據(jù)源數(shù)據(jù)源 在創(chuàng)建數(shù)據(jù)庫連接之前,必須要先創(chuàng)建在創(chuàng)建數(shù)據(jù)庫連接之前,必須要先創(chuàng)建數(shù)據(jù)源。下面以數(shù)據(jù)源。下面以windows xp為例說明注為例說明注冊冊odbc數(shù)據(jù)源的過程。我們要把一個數(shù)據(jù)源的過程。我們要把一個oracle 10i的數(shù)據(jù)庫的數(shù)據(jù)庫student注冊為一個注冊為一個odbc數(shù)據(jù)源,命名成數(shù)據(jù)源,命名成dbtest。 注冊步驟如下:注冊步驟如下: 1在在windows
36、 xp中選擇中選擇“控制面板控制面板”、“性能和維護(hù)性能和維護(hù)”、“管理工具管理工具”和和“數(shù)據(jù)源(數(shù)據(jù)源(odbc)”,彈出如圖所示的,彈出如圖所示的“odbc數(shù)據(jù)源管理器數(shù)據(jù)源管理器”對話框。對話框。 2單擊其中的某個驅(qū)動程序,或者選擇單擊其中的某個驅(qū)動程序,或者選擇“用戶用戶dsn”選項卡,然后單擊選項卡,然后單擊“添加添加(d)”按鈕,彈出如圖所示的按鈕,彈出如圖所示的“創(chuàng)建新創(chuàng)建新數(shù)據(jù)源數(shù)據(jù)源”對話框。對話框。 在這個對話框中,選擇在這個對話框中,選擇oracle公司提供公司提供的驅(qū)動程序的驅(qū)動程序oracle oradb10g_home1(如果要創(chuàng)建其他數(shù)據(jù)庫的數(shù)據(jù)源,例如如果要創(chuàng)
37、建其他數(shù)據(jù)庫的數(shù)據(jù)源,例如microsoft sql server 或或microsoft access數(shù)據(jù)庫的數(shù)據(jù)源,可以在數(shù)據(jù)庫的數(shù)據(jù)源,可以在“創(chuàng)建新數(shù)據(jù)創(chuàng)建新數(shù)據(jù)源源”對話框中選擇對話框中選擇sql server或或microsoft access驅(qū)動程序)。驅(qū)動程序)。 3 3單擊單擊“完成完成”按鈕,出現(xiàn)如圖所示的按鈕,出現(xiàn)如圖所示的“oracle odbc driver configuration”oracle odbc driver configuration”對話框。對話框。 在圖示的對話框中的在圖示的對話框中的“data source name”(數(shù)據(jù)源名)輸入框中輸入數(shù)據(jù)
38、源(數(shù)據(jù)源名)輸入框中輸入數(shù)據(jù)源的名字(如:的名字(如:dbtest),該名字將被用來),該名字將被用來在在java程序中建立與數(shù)據(jù)庫的連接。程序中建立與數(shù)據(jù)庫的連接。 可以在可以在“服務(wù)器服務(wù)器”(tns server name)輸入框中輸入相應(yīng)的數(shù)據(jù)庫服務(wù)器的名稱輸入框中輸入相應(yīng)的數(shù)據(jù)庫服務(wù)器的名稱或者或者ip地址(如:地址(如:myserver),然后單擊),然后單擊“test connection”按鈕,以測試連接是按鈕,以測試連接是否可用。測試成功后,否可用。測試成功后,java程序才能夠通程序才能夠通過過jdbc訪問該數(shù)據(jù)源。訪問該數(shù)據(jù)源。 在訪問數(shù)據(jù)庫之前,必須將在訪問數(shù)據(jù)庫之前
39、,必須將jdbc驅(qū)動程序驅(qū)動程序加載到加載到j(luò)ava虛擬機中。加載驅(qū)動程序有兩種虛擬機中。加載驅(qū)動程序有兩種基本方法:基本方法: (1)使用)使用drivermanager 類類的靜態(tài)方法的靜態(tài)方法registerdriver加載;加載; (2)使用)使用 java.lang.class類類的的forname 方方法加載。法加載。二、加載二、加載jdbcjdbc驅(qū)動程序驅(qū)動程序 使用使用drivermanager類加載類加載oracle jdbc驅(qū)動程序的驅(qū)動程序的java代碼如下:代碼如下: drivermanager.registerdriver (new oracle.jdbc.driv
40、er.oracledriver(); 如果加載的驅(qū)動程序不存在,就會出現(xiàn)如果加載的驅(qū)動程序不存在,就會出現(xiàn)異常,此時需要應(yīng)用程序?qū)@種異常進(jìn)異常,此時需要應(yīng)用程序?qū)@種異常進(jìn)行處理。行處理。 1)加載)加載oracle jdbc驅(qū)動程序驅(qū)動程序 使用使用 java.lang.class類加載類加載oracle jdbc驅(qū)驅(qū)動程序的動程序的java代碼如下所示:代碼如下所示: class c = class.forname(oracle.jdbc.driver.oracledriver); 如果加載的的驅(qū)動程序不存在,如果加載的的驅(qū)動程序不存在,class.forname() 方法將會拋出方法將
41、會拋出classnotfoundexception 異常。此時同樣異常。此時同樣需要應(yīng)用程序處理異常。需要應(yīng)用程序處理異常。 2)加載)加載microsoft sql server jdbc驅(qū)動程序驅(qū)動程序 用用drivermanager類加載類加載microsoft sql server jdbc驅(qū)動程序的驅(qū)動程序的java代碼如下所示:代碼如下所示: drivermanager.registerdriver (new com.microsoft.jdbc.sqlserver.sqlserverdriver(); 使用使用 java.lang.class類加載類加載microsoft sql
42、 server jdbc驅(qū)動程序的驅(qū)動程序的java代碼如下所示:代碼如下所示:class.forname(com.microsoft.jdbc.sqlserver.sqlserverdriver); 其中,其中,“com.microsoft.jdbc.sqlserver.sqlserverdriver”是是microsoft sql server jdbc驅(qū)動程序的類名。驅(qū)動程序的類名。 3)加載)加載interclient jdbc驅(qū)動程序驅(qū)動程序 interclient jdbc驅(qū)動程序的類名是驅(qū)動程序的類名是erclient.driver。用。用driverm
43、anager類加載類加載interclient jdbc驅(qū)動程序的驅(qū)動程序的java代碼如代碼如下所示:下所示: drivermanager.registerdriver(new erclient.driver(); 使用使用 java.lang.class類加載類加載jdbc-odbc驅(qū)動程序驅(qū)動程序的的java代碼如下所示:代碼如下所示: class.forname(erclient.driver);4)加載)加載postgresql jdbc 驅(qū)動程序驅(qū)動程序 postgresql jdbc驅(qū)動程序的類名是驅(qū)動程序的類名是org.pos
44、tgresql.driver。用。用drivermanager類加載類加載postgresql jdbc驅(qū)動程序的驅(qū)動程序的java代碼如下所示:代碼如下所示:drivermanager.registerdriver (new corg.postgresql.driver ();使用使用 java.lang.class類加載類加載postgresql jdbc驅(qū)動程驅(qū)動程序的序的java代碼如下所示:代碼如下所示:class.forname(org.postgresql.driver).newinstance(); 其中,其中,org.postgresql.driver是是postgresql
45、 jdbc驅(qū)驅(qū)動程序的類名。動程序的類名。5)加載)加載mysql jdbc驅(qū)動程序驅(qū)動程序mysql jdbc驅(qū)動程序的類名是驅(qū)動程序的類名是org.gjt.mm.mysql.driver。用。用drivermanager類加類加載載mysql jdbc驅(qū)動程序的驅(qū)動程序的java代碼如下所示:代碼如下所示:drivermanager.registerdriver (new org.gjt.mm.mysql.driver ();使用使用 java.lang.class類加載類加載mysql jdbc驅(qū)動程序驅(qū)動程序的的java代碼如下所示:代碼如下所示:class.forname(org.g
46、jt.mm.mysql.driver).newinstance(); 其中,其中,org.gjt.mm.mysql.driver是是mysql jdbc驅(qū)動程序的類名。驅(qū)動程序的類名。6)加載)加載jdbc-odbc橋驅(qū)動程序橋驅(qū)動程序用用drivermanager類加載類加載jdbc-odbc橋驅(qū)動程序橋驅(qū)動程序的的java代碼如下所示:代碼如下所示:drivermanager.registerdriver(new sun.jdbc.jdbcodbcdriver();使用使用 java.lang.class類加載類加載jdbc-odbc驅(qū)動程序驅(qū)動程序的的java代碼如下所示:代碼如下所示:
47、class.forname(sun.jdbc.odbc.jdbcodbcdriver);其中,其中,sun.jdbc.odbc.jdbcodbcdriver是數(shù)據(jù)庫是數(shù)據(jù)庫驅(qū)動程序的類名。驅(qū)動程序的類名。 加載了數(shù)據(jù)庫的加載了數(shù)據(jù)庫的jdbc驅(qū)動程序之后,就可以驅(qū)動程序之后,就可以創(chuàng)建與數(shù)據(jù)庫的連接了。創(chuàng)建與數(shù)據(jù)庫的連接了。 與數(shù)據(jù)庫建立連接的常用方法是調(diào)用與數(shù)據(jù)庫建立連接的常用方法是調(diào)用drivermanager 類的靜態(tài)方法類的靜態(tài)方法getconnection(string connect_string)。其代碼。其代碼如下:如下: connection conn = driverman
48、ager.getconnection(url, user, password); 其中,其中,url、user、password是連接數(shù)據(jù)庫需是連接數(shù)據(jù)庫需要指定的連接參數(shù)。要指定的連接參數(shù)。三三、創(chuàng)建數(shù)據(jù)庫連接、創(chuàng)建數(shù)據(jù)庫連接、加載、加載jdbcjdbc驅(qū)驅(qū)動程序動程序 連接參數(shù)說明及示例url數(shù)據(jù)庫的url,用于定位數(shù)據(jù)庫,該參數(shù)的一般格式如下:jdbc:其中,jdbc是一種協(xié)議;subprotocol是協(xié)議,表示數(shù)據(jù)庫驅(qū)動程序名或數(shù)據(jù)庫連接機制。例如,oracle jdbc 驅(qū)動程序的子協(xié)議都是oracle;是子名稱,用于標(biāo)識要連接的數(shù)據(jù)庫,子名稱的結(jié)構(gòu)和內(nèi)容由各驅(qū)動程序開發(fā)商規(guī)定use
49、r訪問數(shù)據(jù)庫的用戶賬號。如sys、lucy、sa、admin等password特定用戶賬號的密碼。如hero、mypasswords。如果未設(shè)置密碼,該參數(shù)為連接數(shù)據(jù)庫的連接參數(shù)連接數(shù)據(jù)庫的連接參數(shù) 在建立了與數(shù)據(jù)庫的連接后,應(yīng)用程序可在建立了與數(shù)據(jù)庫的連接后,應(yīng)用程序可以在此連接上創(chuàng)建以在此連接上創(chuàng)建sql語句對象,以便執(zhí)語句對象,以便執(zhí)行用戶定義的行用戶定義的sql語句。語句。 10.4 sql查詢語言的執(zhí)行 在建立了與數(shù)據(jù)庫的連接后,應(yīng)用程序可以在此連接上在建立了與數(shù)據(jù)庫的連接后,應(yīng)用程序可以在此連接上創(chuàng)建創(chuàng)建sql語句對象,以便執(zhí)行用戶定義的語句對象,以便執(zhí)行用戶定義的sql語句。在語
50、句。在connection中,提供了中,提供了3種種createstatement()成員方法,成員方法,用于創(chuàng)建用于創(chuàng)建statement對象:對象: statement createstatement() throws sqlexception; statement createstatement(int resultsettype, int resultsetconcurrency) throws sqlexception; statement createstatement(int resultsettype, int resultsetconcurrency,int resultse
51、tholdability) throws sqlexception;10.4.1 創(chuàng)建statement對象 例如:利用不帶參數(shù)的例如:利用不帶參數(shù)的createstatement方方法創(chuàng)建法創(chuàng)建statement對象的代碼如下:對象的代碼如下: statement stmt = conn.createstatement() /conn是已經(jīng)建立好的數(shù)據(jù)庫連接是已經(jīng)建立好的數(shù)據(jù)庫連接 另外,還可以利用另外,還可以利用jdbc提供的提供的preparedstatement接口和接口和callablestatement接口來創(chuàng)建接口來創(chuàng)建sql語句對語句對象。象。 由于由于sql語句可以分成兩大類
52、:一類是數(shù)語句可以分成兩大類:一類是數(shù)據(jù)定義和更新語句,如據(jù)定義和更新語句,如create、insert、update和和delete等語句;等語句;另一類是另一類是select查詢語句。查詢語句。 因此,因此,jdbc中的中的statement對象提供了執(zhí)對象提供了執(zhí)行不同行不同sql語句的基本處理方法:語句的基本處理方法:statement中定義的中定義的executeupdate()成員方成員方法用于執(zhí)行數(shù)據(jù)定義和更新語句,法用于執(zhí)行數(shù)據(jù)定義和更新語句,statement中定義的中定義的executequery()成員方成員方法用于執(zhí)行法用于執(zhí)行select查詢語句。查詢語句。10.4.
53、2 執(zhí)行執(zhí)行statementsql中的中的select查詢語句,可以使用如下代碼:查詢語句,可以使用如下代碼:statement stmt = conn.createstatement(); /創(chuàng)建創(chuàng)建statement對象對象resultset rset = stmt.executequery(select name, major from student); /執(zhí)行查詢語句執(zhí)行查詢語句sql中的數(shù)據(jù)更新語句,如中的數(shù)據(jù)更新語句,如delete語句,則可以語句,則可以使用如下的代碼片段:使用如下的代碼片段:statement stmt = conn.createstatement(); /
54、創(chuàng)建創(chuàng)建statement對象對象int rowcount = stmt.executeupdate(delete from student where number= 06070001); /執(zhí)行更新語句執(zhí)行更新語句10.4.2 執(zhí)行執(zhí)行statement 如果只能在運行時才能確定如果只能在運行時才能確定sql語句的類語句的類型,則可以使用型,則可以使用statement 中的中的execute()成員方法動態(tài)地執(zhí)行未知類型的成員方法動態(tài)地執(zhí)行未知類型的sql語句語句。這個成員方法將返回一個表示。這個成員方法將返回一個表示sql語句語句類型的布爾值。如果返回真,說明類型的布爾值。如果返回真,
55、說明sql語語句是查詢語句,否則是更新語句或數(shù)據(jù)定句是查詢語句,否則是更新語句或數(shù)據(jù)定義語句。示例代碼如下:義語句。示例代碼如下:statement stmt = conn.createstatement();/用用execute方法執(zhí)行方法執(zhí)行sql語句語句boolean result = stmt.execute(statement);if (result) / statement是一個查詢語句是一個查詢語句 /獲取結(jié)果集獲取結(jié)果集resultset rset = stmt.getresultset(); / 處理結(jié)果處理結(jié)果/.else / statement 是更新語句或數(shù)據(jù)定義語句是
56、更新語句或數(shù)據(jù)定義語句 int updatecount = stmt.getupdatecount(); /處理結(jié)果處理結(jié)果 /. statement執(zhí)行執(zhí)行sql語句之后,將返回一語句之后,將返回一個結(jié)果集對象個結(jié)果集對象resultset。每一個。每一個resultset對象都有一個游標(biāo)對象都有一個游標(biāo)(cursor)指向結(jié)果集的指向結(jié)果集的當(dāng)前位置,游標(biāo)的初始位置是在結(jié)果集的當(dāng)前位置,游標(biāo)的初始位置是在結(jié)果集的第一行之前。第一次調(diào)用第一行之前。第一次調(diào)用next()方法使游方法使游標(biāo)移動到第一行,它返回一個標(biāo)移動到第一行,它返回一個boolean型型的數(shù)據(jù),當(dāng)游標(biāo)移動到最后一行之后返回的
57、數(shù)據(jù),當(dāng)游標(biāo)移動到最后一行之后返回false。 10.4.3 10.4.3 處理查詢結(jié)果集處理查詢結(jié)果集 用戶可以通過用戶可以通過resultset對象提供的定位游對象提供的定位游標(biāo)的成員方法對結(jié)果集進(jìn)行遍歷,進(jìn)而用標(biāo)的成員方法對結(jié)果集進(jìn)行遍歷,進(jìn)而用一組一組getxxx方法獲取,或用一組方法獲取,或用一組updatexxx方法更新結(jié)果集中每一個記錄方法更新結(jié)果集中每一個記錄(record)中的屬性值。中的屬性值。 定位游標(biāo)的成員方法定位游標(biāo)的成員方法功能說明功能說明boolean absolute(int row)將游標(biāo)移動到將游標(biāo)移動到resultset中由中由row指定的行指定的行voi
58、d afterlast()將游標(biāo)移動到將游標(biāo)移動到resultset對象緊靠最后一行之后的位置對象緊靠最后一行之后的位置void beforefirst()將游標(biāo)移動到將游標(biāo)移動到resultset對象緊靠第一行之前的位置對象緊靠第一行之前的位置boolean first()將游標(biāo)移動到將游標(biāo)移動到resultset對象的第一行對象的第一行boolean isafterlast()判斷游標(biāo)是否在結(jié)果集中的最后一行之后判斷游標(biāo)是否在結(jié)果集中的最后一行之后boolean isbeforefirst()判斷游標(biāo)是否在結(jié)果集中的第一行之前判斷游標(biāo)是否在結(jié)果集中的第一行之前boolean isfirst
59、()判斷游標(biāo)是否指向結(jié)果集中的第一行判斷游標(biāo)是否指向結(jié)果集中的第一行boolean islast()判斷游標(biāo)是否指向結(jié)果集中的第一行判斷游標(biāo)是否指向結(jié)果集中的第一行boolean last() 將游標(biāo)移動到將游標(biāo)移動到resultset對象的最后一行。對象的最后一行。 boolean next()將將resultset對象的當(dāng)前游標(biāo)從當(dāng)前位置下移一行。對象的當(dāng)前游標(biāo)從當(dāng)前位置下移一行。boolean previous()將將resultset對象的當(dāng)前游標(biāo)從當(dāng)前位置上移一行。對象的當(dāng)前游標(biāo)從當(dāng)前位置上移一行。resultset中定位游標(biāo)的方法中定位游標(biāo)的方法 在完成任務(wù)之后,程序必須自己關(guān)閉結(jié)
60、果在完成任務(wù)之后,程序必須自己關(guān)閉結(jié)果集集resultset對象和對象和statement對象,而不能對象,而不能像一般的像一般的java對象那樣等待對象那樣等待java虛擬機進(jìn)行虛擬機進(jìn)行垃圾回收。因為這些對象并不是利用垃圾回收。因為這些對象并不是利用new運運算符創(chuàng)建的對象,而是由底層算符創(chuàng)建的對象,而是由底層jdbc驅(qū)動程驅(qū)動程序創(chuàng)建的,因此必須用序創(chuàng)建的,因此必須用java代碼通知底層驅(qū)代碼通知底層驅(qū)動程序釋放它們,否則就有可能造成內(nèi)存動程序釋放它們,否則就有可能造成內(nèi)存的泄漏,導(dǎo)致數(shù)據(jù)庫服務(wù)器資源不足。的泄漏,導(dǎo)致數(shù)據(jù)庫服務(wù)器資源不足。 10.4.4 關(guān)閉數(shù)據(jù)庫連接關(guān)閉數(shù)據(jù)庫連接 下
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024幼兒園特色課程開發(fā)與教師聘用合同2篇
- 2025年度城市道路橋梁養(yǎng)護(hù)與維修合同范本3篇
- 2024年餐館承包經(jīng)營協(xié)議6篇
- 2024年車聯(lián)網(wǎng)技術(shù)研究與應(yīng)用合同
- 2025年度化學(xué)品船運輸安全責(zé)任協(xié)議書模板3篇
- 2024版文化創(chuàng)意產(chǎn)業(yè)項目投資與合作協(xié)議
- (完整版)信號與系統(tǒng)(吳大正)-完整版答案-糾錯修改后版本
- 世界現(xiàn)代設(shè)計史簡述
- 克雷洛夫寓言中的狐貍和烏鴉好詞好句讀后感
- 浙江理工大學(xué)《城市經(jīng)濟學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 體育單杠課件教學(xué)課件
- 新版浙教版2024-2025學(xué)年度八年級數(shù)學(xué)上冊幾何復(fù)習(xí)專題卷含答案
- 《現(xiàn)代控制理論》全套課件(東北大學(xué))
- 建筑信息模型(BIM)技術(shù)應(yīng)用示范項目申報表
- 2025屆陜西省咸陽市禮泉縣數(shù)學(xué)高一上期末考試試題含解析
- 查理和巧克力工廠微課公開課獲獎?wù)n件省賽課一等獎?wù)n件
- 附著式升降腳手架(爬架)安全技術(shù)交底
- 六年級下冊道德與法治-【說課稿】9 日益重要的國際組織
- 2024年中國作家協(xié)會所屬單位公開招聘工作人員14人歷年高頻難、易錯點500題模擬試題附帶答案詳解
- 術(shù)后鎮(zhèn)痛講解
- 北師大版九年級數(shù)學(xué)上冊期末考試題(帶答案)
評論
0/150
提交評論