




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、13.JDBC編程本章要點(diǎn)關(guān)系數(shù)據(jù)庫(kù)與SQL語(yǔ)句SQL語(yǔ)法JDBC核心API使用JDBC執(zhí)行SQL語(yǔ)句分析數(shù)據(jù)庫(kù)的兩種方式事務(wù)JDBC中的事務(wù)控制JDBC概述通過(guò)使用JDBC API,Java程序可以非常方便地操作各種主流數(shù)據(jù)庫(kù),這是是Java語(yǔ)言的巨大魅力所在。而且由于Java語(yǔ)言的跨平臺(tái)特性,所以使用JDBC API所編寫的程序不僅可以實(shí)現(xiàn)跨數(shù)據(jù)庫(kù),還可以跨平臺(tái),具有非常優(yōu)秀的可移植性。程序使用JDBC API以統(tǒng)一的方式來(lái)連接不同的數(shù)據(jù)庫(kù),然后通過(guò)Statement對(duì)象來(lái)執(zhí)行標(biāo)準(zhǔn)SQL語(yǔ)句,并可以獲得SQL語(yǔ)句訪問數(shù)據(jù)庫(kù)的結(jié)果。因此掌握標(biāo)準(zhǔn)SQL語(yǔ)句是學(xué)習(xí)JDBC編程的基礎(chǔ),本章將會(huì)簡(jiǎn)要
2、介紹關(guān)系數(shù)據(jù)庫(kù)理論基礎(chǔ),并以MySQL數(shù)據(jù)庫(kù)為例來(lái)講解標(biāo)準(zhǔn)SQL語(yǔ)句的語(yǔ)法細(xì)節(jié)。包括基本查詢語(yǔ)句,多表連接查詢和子查詢等。JDBC驅(qū)動(dòng)示意為了JDBC程序可以跨平臺(tái),則需要不同數(shù)據(jù)庫(kù)廠商提供相應(yīng)的驅(qū)動(dòng),下圖顯示了JDBC驅(qū)動(dòng)的示意圖。JDBC驅(qū)動(dòng)程序類型 第一種JDBC驅(qū)動(dòng):稱為JDBCODBC橋,這種驅(qū)動(dòng)是最早實(shí)現(xiàn)的JDBC驅(qū)動(dòng)程序,主要目的是為了快速推廣JDBC。這種驅(qū)動(dòng)程序?qū)DBC API映射到ODBC API。JDBC-ODBC也需要驅(qū)動(dòng),這種驅(qū)動(dòng)由Sun公司提供實(shí)現(xiàn)。第二種JDBC驅(qū)動(dòng):直接將JDBC API映射成數(shù)據(jù)庫(kù)特定的客戶端API。這種驅(qū)動(dòng)程序包含特定數(shù)據(jù)庫(kù)的本地代碼,用于
3、訪問特定數(shù)據(jù)庫(kù)的客戶端。第三種JDBC驅(qū)動(dòng):支持三層結(jié)構(gòu)的JDBC訪問方式。主要用于Applet階段,通過(guò)Applet訪問數(shù)據(jù)庫(kù)。第四種JDBC驅(qū)動(dòng):是純Java的,直接與數(shù)據(jù)庫(kù)實(shí)例交互。這種驅(qū)動(dòng)是智能的,它知道數(shù)據(jù)庫(kù)使用的底層協(xié)議。這種驅(qū)動(dòng)是目前最流行的JDBC驅(qū)動(dòng)。安裝MySQL(1)下載MySQL安裝文件(2)開始安裝MySQL后,在出現(xiàn)的對(duì)話框中單擊“Next”按鈕。(3)單擊對(duì)話框的“Next”按鈕,將出現(xiàn)選擇安裝組件和安裝路徑的對(duì)話框。 (4)單擊對(duì)話框中的“Next”按鈕,將可開始安裝MySQL數(shù)據(jù)庫(kù)系統(tǒng)。安裝成功后,系統(tǒng)還要求配置MySQL數(shù)據(jù)庫(kù)。(5)配置數(shù)據(jù)庫(kù)時(shí)注意選擇合適
4、的字符集,并設(shè)置密碼。MySQL的常見命令show databases;drop database 數(shù)據(jù)庫(kù)名;use 數(shù)據(jù)庫(kù)名show tables;desc 表名MySQL的兩種存儲(chǔ)機(jī)制MyISAM:這是MySQL早期默認(rèn)的存儲(chǔ)機(jī)制,對(duì)事務(wù)支持不夠好。InnoDB:InnoDB提供事務(wù)安全的存儲(chǔ)機(jī)制。InnoDB通過(guò)建立行級(jí)鎖來(lái)保證事務(wù)完整性,并以O(shè)racle風(fēng)格的共享鎖來(lái)處理Select語(yǔ)句。 系統(tǒng)默認(rèn)啟動(dòng)InnoDB機(jī)制,如果不想使用 InnoDB表,可以使用skip-innodb 選項(xiàng)。SQL語(yǔ)句 SQL的全稱是Structured Query Language,也就是結(jié)構(gòu)化查詢語(yǔ)言。
5、SQL是操作和檢索關(guān)系型數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言,標(biāo)準(zhǔn)SQL語(yǔ)句可用于操作任何關(guān)系數(shù)據(jù)庫(kù)。使用SQL語(yǔ)句,程序員和數(shù)據(jù)庫(kù)管理員(DBA)可以完成如下的任務(wù):在數(shù)據(jù)庫(kù)中檢索需要的信息。對(duì)數(shù)據(jù)庫(kù)的信息進(jìn)行更新。改變數(shù)據(jù)庫(kù)的結(jié)構(gòu)。更改系統(tǒng)的安全設(shè)置。增加用戶對(duì)數(shù)據(jù)庫(kù)或表的許可權(quán)限。SQL語(yǔ)句分類查詢語(yǔ)句:主要由于select關(guān)鍵字完成,查詢語(yǔ)句是SQL語(yǔ)句中最復(fù)雜,功能也最豐富的語(yǔ)句。DML語(yǔ)句(Data Manipulation Language,即數(shù)據(jù)操作語(yǔ)言):主要由insert、update和delete三個(gè)關(guān)鍵字完成。DDL語(yǔ)句(Data Definition Language,即使數(shù)據(jù)定義語(yǔ)言)
6、:主要由create、alter、drop和truncate四個(gè)關(guān)鍵字完成。DCL語(yǔ)句(Data Control Language,即使數(shù)據(jù)控制語(yǔ)言):主要由grant 和revoke兩個(gè)關(guān)鍵字完成。事務(wù)控制語(yǔ)句:主要由commit、rollback和savepoint三個(gè)關(guān)鍵字完成。DDL語(yǔ)句 DDL語(yǔ)句是操作數(shù)據(jù)庫(kù)對(duì)象的語(yǔ)句,包括創(chuàng)建(create)刪除(drop)修改(alter)數(shù)據(jù)庫(kù)對(duì)象。 數(shù)據(jù)庫(kù)對(duì)象對(duì)象名稱對(duì)應(yīng)關(guān)鍵字描述表table表是存儲(chǔ)數(shù)據(jù)的邏輯單元,以行和列的形式存在;列就是字段,行就是記錄。數(shù)據(jù)字典就是系統(tǒng)表,存放數(shù)據(jù)庫(kù)相關(guān)信息的表。系統(tǒng)表里的數(shù)據(jù)通常由數(shù)據(jù)庫(kù)系統(tǒng)維護(hù)。程序
7、員通常不應(yīng)該手動(dòng)修改系統(tǒng)表及內(nèi)部數(shù)據(jù),程序員只可查看系統(tǒng)表的數(shù)據(jù)。約束constraint執(zhí)行數(shù)據(jù)校驗(yàn)的規(guī)則,用于保證了數(shù)據(jù)完整性的規(guī)則。視圖view一個(gè)或者多個(gè)數(shù)據(jù)表里數(shù)據(jù)的邏輯顯示。視圖并不存儲(chǔ)數(shù)據(jù)。索引index用于提高查詢的性能,相當(dāng)于書的目錄。函數(shù)function用于完成一次特定的計(jì)算,具有一個(gè)返回值。存儲(chǔ)過(guò)程procedure用于完成一次完整的業(yè)務(wù)處理,沒有返回值,但可通過(guò)傳出參數(shù)將多個(gè)值傳給調(diào)用環(huán)境。觸發(fā)器trigger相當(dāng)于一個(gè)事件監(jiān)聽器,當(dāng)數(shù)據(jù)庫(kù)發(fā)生特定事件后,觸發(fā)器被觸發(fā),完成響應(yīng)的處理。創(chuàng)建表的語(yǔ)法create table 模式名.表名(- 可以有多個(gè)列定義columnN
8、ame1 datatype default expr , )修改表(增加列)的語(yǔ)法alter table 表名add (- 可以有多個(gè)列定義column_name1 datatype default expr , );修改表(修改列)的語(yǔ)法alter table 表名modify column_name datatype default expr first|after col_name;修改表(刪除列)的語(yǔ)法alter table 表名drop column_name刪除表的語(yǔ)法drop table 表名;約束大部分?jǐn)?shù)據(jù)庫(kù)支持下面五類完整性約束:NOT NULL:非空約束,指定某列不能為空。
9、UNIQUE:唯一約束,指定某列或者幾列組合不能重復(fù)。PRIMARY KEY:主鍵,指定該列的值可以唯一地表示該條記錄。FOREIGN KEY:外鍵,指定該行記錄從屬于主表中的一條記錄,主要用于保證參照完整性。CHECK:檢查,指定一個(gè)布爾表達(dá)式,用于指定對(duì)應(yīng)列的值必須滿足該表達(dá)式。索引索引是存放在模式(schema)中的一個(gè)數(shù)據(jù)庫(kù)對(duì)象,雖然索引總是從屬于數(shù)據(jù)表,但它也和數(shù)據(jù)表一樣,屬于數(shù)據(jù)庫(kù)對(duì)象。創(chuàng)建索引唯一的作用就是加速對(duì)表的查詢,索引通過(guò)使用快速路徑訪問方法來(lái)快速定位數(shù)據(jù),從而減少了磁盤的I/O。創(chuàng)建索引有兩種方式:自動(dòng):當(dāng)在表上定義主鍵約束、唯一約束和外鍵約束時(shí),系統(tǒng)會(huì)為該數(shù)據(jù)列自動(dòng)創(chuàng)
10、建對(duì)應(yīng)的索引。手動(dòng):用戶可以手動(dòng)創(chuàng)建索引來(lái)加速查詢。刪除索引也有兩種方式:自動(dòng):數(shù)據(jù)表被刪除時(shí),該表上的索引自動(dòng)被刪除。手動(dòng):用戶可以手動(dòng)刪除指定數(shù)據(jù)表上的指定索引。視圖視圖看上去非常像一個(gè)數(shù)據(jù)表,但它不是數(shù)據(jù)表,因?yàn)樗⒉荒艽鎯?chǔ)數(shù)據(jù)。視圖只是一個(gè)或多個(gè)數(shù)據(jù)表中數(shù)據(jù)的邏輯顯示。使用視圖有如下幾個(gè)好處:可以限制對(duì)數(shù)據(jù)的訪問??梢允箯?fù)雜的查詢變得簡(jiǎn)單。提供了數(shù)據(jù)的獨(dú)立性。提供了對(duì)相同數(shù)據(jù)的不同顯示。創(chuàng)建視圖的語(yǔ)法create or replace view 視圖名assubqueryDML語(yǔ)句與DDL操作數(shù)據(jù)庫(kù)對(duì)象不同,DML主要操作數(shù)據(jù)表里的數(shù)據(jù),使用DML可以完成如下三個(gè)任務(wù):插入新數(shù)據(jù)。修改
11、已有數(shù)據(jù)。刪除不需要的數(shù)據(jù)。insert intoinsert into用于向指定數(shù)據(jù)表中插入記錄。對(duì)于標(biāo)準(zhǔn)SQL語(yǔ)句而言,每次只能插入一條記錄。insert into命令的語(yǔ)法格式如下:insert into table_name (column , column.)values(value , value.);update語(yǔ)句update語(yǔ)句用于修改數(shù)據(jù)庫(kù)記錄,每次修改可以修改多條記錄,可通過(guò)使用where子句限定修改哪些記錄。where子句是一個(gè)條件表達(dá)式,該條件表達(dá)式類似于Java編程語(yǔ)言的if,只有符合該條件的記錄才會(huì)被修改。如果沒有where子句意味著where子句的表達(dá)式值總是t
12、rue,即該表的所有記錄都會(huì)被修改。update語(yǔ)句的語(yǔ)法格式如下:update table_nameset column1= value1, column2 = value2 WHERE condition;delete from語(yǔ)句delete from語(yǔ)句用于刪除指定數(shù)據(jù)表的記錄,使用delete from刪除時(shí)不需要指定列名,因?yàn)閯h除總是整行整行地刪除。delete from刪除可以一次刪除多行,刪除哪些行采用where子句限定,只刪除滿足where條件的記錄。沒有where子句將會(huì)把表里的全部記錄刪除。delete from語(yǔ)句的語(yǔ)法格式如下:delete from table_na
13、meWHERE condition;SELECT語(yǔ)句select語(yǔ)句功能就是查詢數(shù)據(jù),select語(yǔ)句也是SQL語(yǔ)句中功能最豐富的語(yǔ)句,select語(yǔ)句不僅可以執(zhí)行單表查詢,還可以執(zhí)行多表連接查詢,還可以進(jìn)行子查詢,select語(yǔ)句用于從一個(gè)或多個(gè)數(shù)據(jù)表中選出特定行、特定列的交集。最簡(jiǎn)單的select語(yǔ)句的語(yǔ)法格式如下:select column1, column2 .from 數(shù)據(jù)源where conditionSELECT語(yǔ)句的規(guī)則當(dāng)使用select語(yǔ)句進(jìn)行查詢時(shí),還可以在select語(yǔ)句中使用算術(shù)運(yùn)算符(+ - * /),從而形成算術(shù)表達(dá)式,使用算數(shù)表達(dá)式的規(guī)則如下:對(duì)數(shù)值型數(shù)據(jù)列、變量
14、、常量可以使用算數(shù)操作符(+ - * /)創(chuàng)建表達(dá)式。對(duì)日期型數(shù)據(jù)列、變量、常量可以使用部分算數(shù)操作符創(chuàng)建表達(dá)式 (+ -),兩個(gè)日期之間可以進(jìn)行減法運(yùn)算,日期和數(shù)值之間可進(jìn)行加、減運(yùn)算。運(yùn)算符不僅可以在列和常量、變量之間進(jìn)行運(yùn)算,也可以在兩列之間進(jìn)行運(yùn)算。特殊比較運(yùn)算符運(yùn)算符含義between val1 and val2大于等于val1,且小于等于val2。in(list)等于括號(hào)里多個(gè)值的任意之一。like字符串匹配,like后的字符串支持通配符。is null要求指定值等于null。數(shù)據(jù)庫(kù)函數(shù)每個(gè)數(shù)據(jù)庫(kù)都會(huì)在標(biāo)準(zhǔn)SQL基礎(chǔ)上擴(kuò)展一些函數(shù),這些函數(shù)用于進(jìn)行數(shù)據(jù)處理或復(fù)雜計(jì)算,根據(jù)函數(shù)對(duì)多行
15、數(shù)據(jù)的處理方式,函數(shù)被分為單行函數(shù)和多行函數(shù),單行函數(shù)對(duì)每行輸入值單獨(dú)計(jì)算,每行得到一個(gè)計(jì)算結(jié)果返回給用戶。多行函數(shù)對(duì)多行輸入值整體計(jì)算,最后只會(huì)得到一個(gè)結(jié)果。單行函數(shù)和的多行函數(shù)的示意如圖所示:組函數(shù)組函數(shù)也就是前面提到多行函數(shù),組函數(shù)將一組記錄作為整體計(jì)算,每一組記錄返回一個(gè)結(jié)果,而不是每一條記錄返回一個(gè)結(jié)果。常用的組函數(shù)有如下5個(gè):avg(distinct|allexpr):計(jì)算多行expr的平均值,其中expr可以是變量、常量或數(shù)據(jù)列,但其數(shù)據(jù)類型必須數(shù)值型。還可以在變量、列前使用distinct或all關(guān)鍵字,如果使用distinct表明不計(jì)算重復(fù)值;all用和不用的效果完全一樣,表
16、明需要計(jì)算重復(fù)值。count( *|distinct|allexpr):計(jì)算多行expr的平均值,其中expr可以是變量、常量或數(shù)據(jù)列,其數(shù)據(jù)類型可以是任意類型。用星號(hào)(*)表示統(tǒng)計(jì)該表內(nèi)的記錄行數(shù)。其中distinct表示不計(jì)算重復(fù)值。max(distinctexpr):計(jì)算多行expr的平均值,其中expr可以是變量、常量或數(shù)據(jù)列,其數(shù)據(jù)類型可以是任意類型。其中distinct表示不計(jì)算重復(fù)值。min(distinctexpr):計(jì)算多行expr的平均值,其中expr可以是變量、常量或數(shù)據(jù)列,其數(shù)據(jù)類型可以是任意類型。其中distinct表示不計(jì)算重復(fù)值。sum(distinct|alle
17、xpr):計(jì)算多行expr的總和,其中expr可以是變量、常量或數(shù)據(jù)列,但其數(shù)據(jù)類型必須數(shù)值型。其中distinct表示不計(jì)算重復(fù)值。多表連接查詢 多表連接查詢有兩種規(guī)范,較早的SQL92規(guī)范中支持如下幾種多表連接查詢:等值連接。非等值連接。外連接。廣義笛卡爾積。SQL99的多表連接查詢SQL99規(guī)則提供了可讀性更好的多表連接語(yǔ)法,并提供更多類型的連接查詢,SQL99支持如下幾種多表連接查詢:交叉連接。自然連接。使用using子句的連接。使用on子句的連接。全外連接或者左右外連接。 子查詢子查詢就是指在查詢語(yǔ)句中嵌套另一個(gè)查詢,子查詢可以支持多層嵌套。對(duì)于一個(gè)普通查詢語(yǔ)句而言,子查詢可以出現(xiàn)在
18、兩個(gè)位置:出現(xiàn)在from語(yǔ)句后當(dāng)成數(shù)據(jù)表,這種用法也被稱為行內(nèi)視圖,因?yàn)樵撟硬樵兊膶?shí)質(zhì)就是一個(gè)臨時(shí)視圖。出現(xiàn)在where條件后作為過(guò)濾條件的值。使用子查詢的注意點(diǎn)使用子查詢時(shí)有如下幾個(gè)注意點(diǎn):子查詢要用括號(hào)括起來(lái)。子查詢當(dāng)成數(shù)據(jù)表時(shí),可以為該子查詢起別名,尤其是要作為前綴來(lái)限定數(shù)據(jù)列時(shí),必須給子查詢起別名。子查詢當(dāng)過(guò)濾條件時(shí),將子查詢放在比較運(yùn)算符的右邊,這樣可以增強(qiáng)查詢的可讀性。子查詢當(dāng)過(guò)濾條件時(shí),單行子查詢使用單行運(yùn)算符,多行子查詢使用多行運(yùn)算符。JDBC常用接口和類 DriverManagerConnectionStatementPreparedStatementResultSetJDB
19、C編程步驟 (1)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)。(2)通過(guò)DriverManager獲取數(shù)據(jù)庫(kù)連接。(3)通過(guò)Connection對(duì)象創(chuàng)建Statement對(duì)象。(4)使用Statement執(zhí)行SQL語(yǔ)句。所有Statement都有如下三個(gè)方法來(lái)執(zhí)行SQL語(yǔ)句。(5)操作結(jié)果集。如果執(zhí)行的SQL語(yǔ)句是查詢語(yǔ)句,執(zhí)行結(jié)果將返回一個(gè)ResultSet對(duì)象,該對(duì)象里保存了SQL語(yǔ)句查詢的結(jié)果。程序可以通過(guò)操作該ResultSet對(duì)象來(lái)取出查詢結(jié)果。 JDBC執(zhí)行SQL語(yǔ)句的方式使用executeUpdate執(zhí)行DDL和DML語(yǔ)句使用execute方法執(zhí)行SQL語(yǔ)句使用executeQuery方法執(zhí)行查詢語(yǔ)句 Pr
20、eparedStatementJDBC提供了PreparedStatement接口,它是Statement接口的子接口,它可以預(yù)編譯SQL語(yǔ)句,預(yù)編譯后的SQL語(yǔ)句被存儲(chǔ)在PreparedStatement對(duì)象中。然后可以使用該對(duì)象多次高效地執(zhí)行該語(yǔ)句。簡(jiǎn)而言之,使用PreparedStatement比使用Statement的效率要高。使用PreparedStatement比使用Statement多了如下三個(gè)好處:PreparedStatement預(yù)編譯SQL語(yǔ)句,性能更好。PreparedStatment無(wú)需“拼接”SQL語(yǔ)句,編程更簡(jiǎn)單。PreparedStatement可以防止SQL注入
21、,安全性更好。CallableStatment調(diào)用存儲(chǔ)過(guò)程使用CallableStatement,可以通過(guò)Connection的prepareCall方法來(lái)創(chuàng)建CallableStatement對(duì)象,創(chuàng)建該對(duì)象時(shí)需要傳入調(diào)用存儲(chǔ)過(guò)程的SQL語(yǔ)句,調(diào)用存儲(chǔ)過(guò)程的SQL語(yǔ)句總是這種格式:call 過(guò)程名(?,?,?.),其中的問號(hào)作為存儲(chǔ)過(guò)程參數(shù)的占位符。 存儲(chǔ)過(guò)程的參數(shù)既有傳入?yún)?shù),也有傳出參數(shù)。所謂傳入?yún)?shù)就是Java程序必須為這些參數(shù)傳入值,那么可以通過(guò)CallableStatement的setXxx方法為傳入?yún)?shù)設(shè)置值;所謂傳出參數(shù)就是Java程序可以通過(guò)該參數(shù)獲取存儲(chǔ)過(guò)程里的值,那么Ca
22、llableStatement需要調(diào)用registerOutParameter方法來(lái)注冊(cè)該參數(shù)。 可滾動(dòng)、可更新的結(jié)果集 以默認(rèn)方式打開的ResultSet是不可更新的,如果希望創(chuàng)建可更新的ResultSet,必須在創(chuàng)建Statement或PreparedStatement時(shí)傳入額外的參數(shù)。Connection在創(chuàng)建Statement或PreparedStatement時(shí)還可額外傳入兩個(gè)參數(shù):resultSetType:控制ResultSet的類型,該參數(shù)可以是如下三個(gè)值:ResultSet.TYPE_FORWARD_ONLY:該常量控制記錄指針只能向前移動(dòng)。這是JDK1.4以前的默認(rèn)值。Re
23、sultSet.TYPE_SCROLL_INSENSITIVE:該常量控制記錄指針可以自由移動(dòng)(可滾動(dòng)結(jié)果集),但底層數(shù)據(jù)的改變不會(huì)影響ResultSet的內(nèi)容。 ResultSet.TYPE_SCROLL_SENSITIVE:該常量控制記錄指針可以自由移動(dòng)(可滾動(dòng)結(jié)果集),而且底層數(shù)據(jù)的改變會(huì)影響ResultSet的內(nèi)容。resultSetConcurrency:控制ResultSet的并發(fā)類型,該參數(shù)可以接受如下兩個(gè)值:ResultSet.CONCUR_READ_ONLY:該常量指示ResultSet是只讀的并發(fā)模式(默認(rèn))。 ResultSet.CONCUR_UPDATABLE:該常量指
24、示ResultSet是可更新的并發(fā)模式。 處理Blob類型數(shù)據(jù) 所以將Blob數(shù)據(jù)插入數(shù)據(jù)庫(kù)需要使用PreparedStatement,該對(duì)象有一個(gè)方法:setBinaryStream(int parameterIndex, InputStream x),該方法可以為指定參數(shù)傳入二進(jìn)制輸入流,從而可以實(shí)現(xiàn)將Blob數(shù)據(jù)保存到數(shù)據(jù)庫(kù)的功能。當(dāng)我們需要從ResultSet里取出Blob數(shù)據(jù)時(shí),可以調(diào)用ResultSet的getBlob(int columnIndex)方法,該方法將返回一個(gè)Blob對(duì)象,Blob對(duì)象提供了getBinaryStream方法來(lái)獲取該Blob數(shù)據(jù)的輸入流,也可使用Blo
25、b對(duì)象提供的getBytes方法直接取出該Blob對(duì)象封裝的二進(jìn)制數(shù)據(jù)。使用ResultSetMetaData ResultSet里包含一個(gè)getMetaData()方法,該方法返回該ResultSet對(duì)應(yīng)的ResultSetMetaData對(duì)象。一旦獲得了ResultSetMetaData對(duì)象,就可通過(guò)ResultSetMetaData提供的大量的方法來(lái)返回ResultSet的描述信息,常用的方法有如下三個(gè):int getColumnCount():返回該ResultSet的列數(shù)量。String getColumnName(int column):返回指定索引的列名。int getColum
26、nType(int column):返回指定索引的列類型。事務(wù)事務(wù)是由一步或幾步數(shù)據(jù)庫(kù)操作序列組成的邏輯執(zhí)行單元,這系列操作要么全部執(zhí)行,要么全部放棄執(zhí)行。程序和事務(wù)是兩個(gè)不同的概念。一般而言:一段程序中可能包含多個(gè)事務(wù)。事務(wù)具備四個(gè)特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、和持續(xù)性(Durability)。這四個(gè)特性也簡(jiǎn)稱為ACID性。原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持續(xù)性(Durability)事務(wù)的組成數(shù)據(jù)庫(kù)的事務(wù)由下列語(yǔ)句組成:一組DML語(yǔ)句,經(jīng)過(guò)這組DML修改后數(shù)據(jù)將保持
27、較好的一致性。一個(gè) DDL 語(yǔ)句。一個(gè) DCL 語(yǔ)句。DDL和DCL語(yǔ)句最多只能有一個(gè),因?yàn)镈DL和DCL語(yǔ)句都會(huì)導(dǎo)致事務(wù)立即提交。事務(wù)的結(jié)束當(dāng)事務(wù)所包含的全部數(shù)據(jù)庫(kù)操作都成功執(zhí)行后,應(yīng)該提交(commit)事務(wù),使這些修改永久生效。事務(wù)提交有兩種方式:顯式提交和自動(dòng)提交。顯式提交:使用commit。自動(dòng)提交:執(zhí)行DDL或DCL,或者程序正常退出。當(dāng)事務(wù)所包含的任意一個(gè)數(shù)據(jù)庫(kù)操作執(zhí)行失敗后,應(yīng)該回滾(rollback)事務(wù),使該事務(wù)中所作的修改全部失效。事務(wù)回滾有兩種方式:顯式回滾和自動(dòng)回滾。顯式回滾:使用rollback。自動(dòng)回滾:系統(tǒng)錯(cuò)誤或者強(qiáng)行退出。JDBC的事務(wù)支持 Connectio
28、n的setAutoCommit方法來(lái)關(guān)閉自動(dòng)提交,開啟事務(wù),如下SQL語(yǔ)句所示:conn.setAutoCommit(false);程序可以調(diào)用Connection的commit方法來(lái)提交事務(wù),如下代碼所示:mit();如果任意一條SQL語(yǔ)句執(zhí)行失敗,我們應(yīng)該用Connection的rollback來(lái)回滾事務(wù),如下代碼所示:conn.rollback();事務(wù)的中間點(diǎn)Connection也提供了設(shè)置中間點(diǎn)的方法:setSavepoint,Connection提供了兩個(gè)方法來(lái)設(shè)置中間點(diǎn):Savepoint setSavepoint():在當(dāng)前事務(wù)中創(chuàng)建一個(gè)未命名的中間點(diǎn)),并返回代表該中間點(diǎn)的S
29、avepoint對(duì)象。 Savepoint setSavepoint(String name):在當(dāng)前事務(wù)中創(chuàng)建一個(gè)具有指定名稱的中間點(diǎn),并返回代表該中間點(diǎn)的Savepoint對(duì)象。通常來(lái)說(shuō),設(shè)置中間點(diǎn)時(shí)沒有太大的必要指定名稱,因?yàn)镃onnection回滾到指定中間點(diǎn)時(shí),并不是根據(jù)名字回滾的,而是根據(jù)中間點(diǎn)對(duì)象回滾的。Connection提供了rollback(Savepoint savepoint)方法來(lái)回滾到指定中間點(diǎn)。批量更新JDBC還提供了一個(gè)批量更新的功能,使用批量更新時(shí),多條SQL語(yǔ)句將會(huì)被作為一批操作被同時(shí)收集、并同時(shí)提交。批量更新必須得到底層數(shù)據(jù)庫(kù)的支持,可以通過(guò)調(diào)用DatabaseMetaData的supportsBatchUpdates方法來(lái)查看底層數(shù)據(jù)庫(kù)是否支持批量更新。使用批量更新也需要先創(chuàng)建一個(gè)Statement對(duì)象,然后利用該對(duì)象addBatch方法將多條SQL語(yǔ)句同時(shí)收集起來(lái),最后調(diào)用Statement對(duì)象的executeBatch同時(shí)執(zhí)行這些SQL語(yǔ)句。DatabaseMetaData JDBC提供了DatabaseMetaData來(lái)封裝數(shù)據(jù)庫(kù)連接對(duì)應(yīng)數(shù)據(jù)庫(kù)的信息,通過(guò)Connection提供的getMetaData()方法就可以獲取到數(shù)據(jù)庫(kù)對(duì)應(yīng)的DatabaseMetaData對(duì)象。許多Datab
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第12課 從明朝建立到清軍入關(guān)教學(xué)設(shè)計(jì)-2023-2024學(xué)年高中歷史統(tǒng)編版(2019)必修中外歷史綱要上冊(cè)
- 2025至2030年中國(guó)旅游筷子數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 《立在地球邊上放號(hào)》教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版高中語(yǔ)文必修上冊(cè)
- 2025至2030年中國(guó)指紋門禁設(shè)備數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 機(jī)械原理 CH06學(xué)習(xí)資料
- 高端裝備數(shù)字化人力資源需求與管理
- 2025至2030年中國(guó)強(qiáng)力風(fēng)扳手?jǐn)?shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年度電商件代發(fā)與電商平臺(tái)物流時(shí)效提升合作合同協(xié)議書
- 二零二五年度裝修公司勞動(dòng)合同缺失工資拖欠解決協(xié)議
- 《插秧歌》教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版高中語(yǔ)文必修上冊(cè)
- 《火力發(fā)電廠水處理技術(shù)概述》課件
- 3.1產(chǎn)業(yè)轉(zhuǎn)移對(duì)區(qū)域發(fā)展的影響(第1課時(shí)) 【知識(shí)精研】高二地理課件(湘教版2019選擇性必修2)
- 2025年醫(yī)院實(shí)習(xí)協(xié)議書樣本
- 2025年湖南工程職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 招標(biāo)代理服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 2024年云南中煙工業(yè)有限責(zé)任公司招聘筆試真題
- 2024年山東輕工職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 2024年哈爾濱電力職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 2024年金鑰匙科技知識(shí)競(jìng)賽試題及答案
- 三一重工全面預(yù)算管理
- 小公司財(cái)務(wù)報(bào)銷制度及報(bào)銷流程
評(píng)論
0/150
提交評(píng)論