版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第11章數(shù)據(jù)庫(kù)應(yīng)用11.1關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)11.2JDBC32本章首先回顧關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的基本概念和結(jié)構(gòu)化查詢語(yǔ)言SQL,然后介紹JDBC各種驅(qū)動(dòng)程序類型,介紹JDBC提供的連接數(shù)據(jù)庫(kù)、執(zhí)行SQL語(yǔ)句、處理結(jié)果集的接口和類。本章將以Access和MySQL兩種數(shù)據(jù)庫(kù)為例,使用JDBC兩種驅(qū)動(dòng)方式進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)。111.1
關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)11.1.1數(shù)據(jù)庫(kù)系統(tǒng)11.1.2關(guān)系模型11.1.3客戶-服務(wù)器結(jié)構(gòu)的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)11.1.4結(jié)構(gòu)化查詢語(yǔ)言SQL11.1.5Access數(shù)據(jù)庫(kù)11.1.6MySQL數(shù)據(jù)庫(kù)211.1.1數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)庫(kù)(DataBase,DB):是長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)外存上的、有結(jié)構(gòu)的、可共享的數(shù)據(jù)集合。數(shù)據(jù)庫(kù)中的數(shù)據(jù)按一定的數(shù)據(jù)模型描述、組織和存儲(chǔ),具有較小的冗余度、較高的數(shù)據(jù)獨(dú)立性和易擴(kuò)展性,可為不同的用戶共享。數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS):是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,用于科學(xué)地組織和存儲(chǔ)數(shù)據(jù)、高效地獲取和維護(hù)數(shù)據(jù)。數(shù)據(jù)庫(kù)系統(tǒng)(DBS):是采用了數(shù)據(jù)庫(kù)技術(shù)的計(jì)算機(jī)系統(tǒng),包括數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)、應(yīng)用程序、數(shù)據(jù)庫(kù)管理員(DBA)和用戶。在不引起混淆的情況下,通常把數(shù)據(jù)庫(kù)系統(tǒng)簡(jiǎn)稱為數(shù)據(jù)庫(kù)。311.1.2
關(guān)系模型實(shí)體(entity):客觀存在、可相互區(qū)別的事物(數(shù)據(jù)、信息)統(tǒng)稱為實(shí)體。實(shí)體集(entity
set):指性質(zhì)相同的同類實(shí)體的集合。屬性(attribute):指用于描述、刻畫(huà)實(shí)體的若干特性。數(shù)據(jù)模型(DM):指用來(lái)描述現(xiàn)實(shí)世界中的實(shí)體(數(shù)據(jù)、信息)及其相互聯(lián)系的方法或工具,是對(duì)現(xiàn)實(shí)世界的模擬。關(guān)系模型(relationalmodel):用于描述關(guān)系數(shù)據(jù)庫(kù)系統(tǒng),它使用二維表格表示實(shí)體集、用關(guān)鍵碼進(jìn)行數(shù)據(jù)導(dǎo)航。其描述的內(nèi)容主要包括數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作和數(shù)據(jù)完整性約束3個(gè)部分。4關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)關(guān)系:即一張規(guī)范化的二維表,表示一個(gè)實(shí)體集。表的每個(gè)列表示實(shí)體的一個(gè)屬性,每一行表示一個(gè)實(shí)體。行也稱為記錄(record),列也稱為字段(field)。關(guān)系的性質(zhì)(規(guī)范化)列是同質(zhì)的,即每一列中的數(shù)據(jù)項(xiàng)具有相同的數(shù)據(jù)類型。不同的列表示實(shí)體不同的屬性,必須以不同的列名相區(qū)別。但不同的列可以具有相同的數(shù)據(jù)類型,也可以具有相同的取值范圍。不允許出現(xiàn)重復(fù)的行,即表中的任意兩行不能完全相同。每一個(gè)屬性都是不可分解的。換言之,不允許表中還有表。行和列的次序可以任意交換,不影響關(guān)系的實(shí)際意義。5主鍵:能夠唯一標(biāo)識(shí)實(shí)體的屬性或?qū)傩越M稱為主鍵(primarykey)。主鍵用于在一張表中唯一標(biāo)識(shí)不同的實(shí)體。外鍵:如果一個(gè)關(guān)系的一個(gè)屬性引用(參照)了另一個(gè)關(guān)系的主鍵,則稱這個(gè)屬性為外鍵(foreignkey)。外鍵用于描述兩個(gè)關(guān)系之間的聯(lián)系。關(guān)系模式:是對(duì)一個(gè)關(guān)系的結(jié)構(gòu)描述,包括其屬性構(gòu)成、各屬性的數(shù)據(jù)類型、屬性間的依賴及完整性約束等。關(guān)系模型是由若干個(gè)關(guān)系模式組成的集合。關(guān)系模式的簡(jiǎn)單格式為:關(guān)系(列{,列}),如:學(xué)生(學(xué)號(hào),姓名,性別,省份,地區(qū),出生年月,民族,團(tuán)員)課程(課程號(hào),課程名,學(xué)分,學(xué)時(shí))成績(jī)(學(xué)號(hào),課程號(hào),成績(jī))6關(guān)系模型的數(shù)據(jù)操縱關(guān)系模型的操作主要包括數(shù)據(jù)查詢和數(shù)據(jù)更新,數(shù)據(jù)更新包括插入、刪除和修改。關(guān)系模型中的數(shù)據(jù)操作屬于集合操作,操作對(duì)象和操作結(jié)果都是關(guān)系。關(guān)系模型的存取路徑對(duì)用戶透明,使數(shù)據(jù)具有獨(dú)立性和安全性,同時(shí)也降低了應(yīng)用程序的設(shè)計(jì)難度。7關(guān)系模型的數(shù)據(jù)完整性規(guī)則關(guān)系數(shù)據(jù)庫(kù)為數(shù)據(jù)提供實(shí)體完整性、參照完整性和用戶定義完整性三類完整性約束。實(shí)體完整性規(guī)則:要求一個(gè)關(guān)系的主鍵不能取重復(fù)值和空值。否則就會(huì)破壞實(shí)體的唯一性。參照完整性規(guī)則:要求一個(gè)關(guān)系的外鍵要么為空,要么取與被參照關(guān)系對(duì)應(yīng)的主碼值,即外碼值必須是主碼中已存在的值。用戶定義的完整性規(guī)則:指由用戶根據(jù)特定需求而設(shè)置的數(shù)據(jù)完整性約束規(guī)則。屬于語(yǔ)義要求,包括非空、唯一和布爾條件約束三種情況。811.1.3
客戶-服務(wù)器結(jié)構(gòu)的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)C/S模式數(shù)據(jù)庫(kù)系統(tǒng)的功能結(jié)構(gòu)C/S結(jié)構(gòu)的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)具有數(shù)據(jù)集中、功能分布的特點(diǎn),將數(shù)據(jù)集中存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器上,服務(wù)器完成DBMS的核心功能,數(shù)據(jù)庫(kù)的建立和維護(hù)工作由數(shù)據(jù)庫(kù)管理員完成應(yīng)用客戶端完成數(shù)據(jù)處理、數(shù)據(jù)表示、用戶接口等功能。兩者之間采用請(qǐng)求-響應(yīng)模式,即客戶端提出服務(wù)請(qǐng)求、服務(wù)器響應(yīng)請(qǐng)求并提供數(shù)據(jù)服務(wù),如圖11.1所示。主流的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)(如Oracle、Sybase、DB2、SQLServer、MySQL等)都是采用C/S結(jié)構(gòu)。9圖11.1C/S模式數(shù)據(jù)庫(kù)系統(tǒng)的功能結(jié)構(gòu)圖窗口服務(wù)器數(shù)據(jù)庫(kù)開(kāi)發(fā)工具客戶機(jī)數(shù)據(jù)庫(kù)應(yīng)用程序數(shù)據(jù)庫(kù)系統(tǒng)(服務(wù)端)數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)表用戶數(shù)據(jù)庫(kù)管理員(DBA)ODBC/專用接口軟件設(shè)計(jì)人員數(shù)據(jù)庫(kù)(客戶端)請(qǐng)求發(fā)送SQL語(yǔ)句返回?cái)?shù)據(jù)結(jié)果集響應(yīng)10數(shù)據(jù)庫(kù)連接應(yīng)用程序與數(shù)據(jù)庫(kù)的數(shù)據(jù)結(jié)構(gòu)之間具有相互獨(dú)立。應(yīng)用程序能夠訪問(wèn)不同的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)也能夠支持由不同工具所開(kāi)發(fā)的應(yīng)用程序。應(yīng)用程序在訪問(wèn)數(shù)據(jù)庫(kù)之前,需要借助一定的數(shù)據(jù)庫(kù)連接機(jī)制與數(shù)據(jù)庫(kù)建立連接。數(shù)據(jù)庫(kù)連接技術(shù)主要有以下兩大類:標(biāo)準(zhǔn)接口——為應(yīng)用程序指定數(shù)據(jù)源的通用連接方式,如ODBC、JDBC。專用接口——提供與一個(gè)數(shù)據(jù)庫(kù)直接相連的專用連接方式。如Sybase、SQLServer、Oralce、DB2等數(shù)據(jù)庫(kù)具有專用驅(qū)動(dòng)程序。11圖11.2
應(yīng)用程序與數(shù)據(jù)庫(kù)連接示意圖1211.1.4
結(jié)構(gòu)化查詢語(yǔ)言SQLSQL(StructuredQueryLanguage)是關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言,對(duì)關(guān)系模型的發(fā)展和商用DBMS的研制起著重要的作用。SQL語(yǔ)言提供數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱和數(shù)據(jù)控制功能,具有綜合統(tǒng)一、高度非過(guò)程化、面向集合等特點(diǎn)。目前所有關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)均支持SQL語(yǔ)言。13SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)一個(gè)SQL模式(schema)是一個(gè)命名的數(shù)據(jù)集合,由表、授權(quán)、規(guī)則、約束等組成。一個(gè)SQL表由行集構(gòu)成,一行是列的序列,每列對(duì)應(yīng)一個(gè)數(shù)據(jù)項(xiàng)。表有3種類型:基本表、視圖和導(dǎo)出表。基本表是實(shí)際存儲(chǔ)數(shù)據(jù)的表,視圖(view)是由若干基本表或其他視圖定義的虛表;導(dǎo)出表是執(zhí)行查詢后產(chǎn)生的臨時(shí)表。用SQL語(yǔ)句可對(duì)基本表和視圖進(jìn)行查詢等操作,從用戶角度看,視圖也是表。14SQL的特點(diǎn)與組成SQL語(yǔ)言是一種面向集合的描述性語(yǔ)言,是非過(guò)程性的,大多數(shù)語(yǔ)句都是獨(dú)立執(zhí)行,與上下文無(wú)關(guān)。非過(guò)程性語(yǔ)言的特點(diǎn)是只需要指出"做什么",不需要指出"怎樣做"。SQL語(yǔ)言由四部分組成:數(shù)據(jù)定義語(yǔ)言(DDL)、數(shù)據(jù)操縱語(yǔ)言(DML)、數(shù)據(jù)控制語(yǔ)言(DCL)和嵌入式SQL語(yǔ)言的使用規(guī)定。表11-2SQL語(yǔ)言的動(dòng)詞SQL功能動(dòng)詞說(shuō)明數(shù)據(jù)定義CREATE、DROP、ALTER創(chuàng)建表、刪除表、修改表數(shù)據(jù)操縱INSERT、UPDATE、DELETE插入、更新、刪除數(shù)據(jù)查詢SELECT查詢數(shù)據(jù)控制GRANT、REVOKE授予權(quán)限、收回權(quán)限15數(shù)據(jù)定義創(chuàng)建基本表CREATETABLE
表名(列名數(shù)據(jù)類型[列級(jí)完整性約束]
{,列名數(shù)據(jù)類型[列級(jí)完整性約束]}
[,表級(jí)完整性約束]);列的數(shù)據(jù)類型常見(jiàn)的有:整型(integer或int),浮點(diǎn)型(dec或float),字符型(char或varchar),日期時(shí)間型(date,datetime或timestamp)等。字符型和浮點(diǎn)型還可說(shuō)明其寬度及小數(shù)位數(shù),如:char(20),dec(5,2)。完整性約束條件包括:PRIMARYKEY、FOREIGNKEY、CHECK、NOTNULL、UNIQUE、DEFAULT等。如果涉及多列則定義在表級(jí)完整性約束位置。16修改基本表ALTERTABLE表名
[ADD新列名數(shù)據(jù)類型[列級(jí)完整性約束]][MODIFY列名數(shù)據(jù)類型][DROP完整性約束名];刪除表DROPTABLE表名;17數(shù)據(jù)更新插入數(shù)據(jù)INSERTINTO
表名[(列1{,列2})]VALUES(值1{,值2});修改數(shù)據(jù)UPDATE
表名SET
列=表達(dá)式{,列=表達(dá)式}[WHERE條件表達(dá)式];刪除數(shù)據(jù)DELETEFROM
表名[WHERE條件表達(dá)式];18數(shù)據(jù)查詢SELECT語(yǔ)句語(yǔ)法SELECT[ALL|DISTINCT]列表達(dá)式{,列表達(dá)式}FROM表名
[WHERE條件表達(dá)式][GROUPBY列[HAVING條件表達(dá)式]][ORDERBY列[ASC|DESC]]運(yùn)算符(表11-3)=、<>、<、<=、>、>=、AND、OR、LIKE集函數(shù)(表11-4)AVG([ALL|DISTINCT]列名)
COUNT(*)、COUNT(列名)SUM(列名)
、MAX(列名)、MIN(列名)
1911.1.5Access數(shù)據(jù)庫(kù)Access數(shù)據(jù)庫(kù)的操作【例11.1】
創(chuàng)建student數(shù)據(jù)庫(kù)及表。數(shù)據(jù)庫(kù)文件名:student.mdb創(chuàng)建表:stuinfo輸入數(shù)據(jù)字段名稱數(shù)據(jù)類型寬度NULL字段名稱數(shù)據(jù)類型寬度NULL學(xué)號(hào)文本10是地區(qū)文本10否姓名文本10否出生日期日期/時(shí)間否性別文本2否民族文本10否省份文本10否團(tuán)員是/否2否20配置ODBC數(shù)據(jù)源①選擇[開(kāi)始菜單]→[控制面板]→[管理工具]→[數(shù)據(jù)源(ODBC)],打開(kāi)"ODBC數(shù)據(jù)源管理器"對(duì)話框中,單擊<添加>按鈕。②在"創(chuàng)建新數(shù)據(jù)源"對(duì)話框上,選擇數(shù)據(jù)源驅(qū)動(dòng)程序?yàn)?MicrosoflAccessDriver(*.mdb)",單擊"完成"按鈕。③在"ODBCMicrosoftAccess安裝"對(duì)話框,輸入"數(shù)據(jù)源名"(如student_access),單擊<選擇>按鈕選擇數(shù)據(jù)庫(kù)文件student.mdb的路徑全名,如圖11.5所示。④回到"ODBC數(shù)據(jù)源管理器"對(duì)話框,在數(shù)據(jù)源列表框中就可見(jiàn)剛建立的數(shù)據(jù)源student_access。2111.1.6
MySQL數(shù)據(jù)庫(kù)MySQL簡(jiǎn)介是Sun公司推出的一種C/S結(jié)構(gòu)的開(kāi)源免費(fèi)數(shù)據(jù)庫(kù)系統(tǒng)。下載、安裝MySQL從/downloads下載MySQLCommunityServer的安裝文件和JDBC驅(qū)動(dòng)程序(Connector/J)文件。配置MySQL數(shù)據(jù)庫(kù)安裝的最后一步是配置MySQL,根據(jù)向?qū)崾敬蠖噙x擇默認(rèn)選項(xiàng)即可。MySQL默認(rèn)使用3306端口提供數(shù)據(jù)庫(kù)服務(wù),默認(rèn)的初始用戶是root,為root輸入密碼界面如圖11.8所示,若不輸入,則root用戶沒(méi)有密碼。啟動(dòng)MySQL數(shù)據(jù)庫(kù)服務(wù)MySQL數(shù)據(jù)庫(kù)服務(wù)默認(rèn)會(huì)隨Windows自動(dòng)啟動(dòng),可通過(guò)"控制面板→管理工具→服務(wù)"進(jìn)行設(shè)置或停止/啟動(dòng)。22操縱數(shù)據(jù)庫(kù)安裝MySQL數(shù)據(jù)庫(kù)客戶端管理工具Navicat、MySQLFront、SQLyog等創(chuàng)建數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)名為student,每個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)安裝目錄下data目錄的一個(gè)文件夾,如:D:\MySQLServer5.0\data\student創(chuàng)建表表名:stuinfo、course、stugrade(SQL語(yǔ)法參見(jiàn)P325)MySQL數(shù)據(jù)庫(kù)的表均以單獨(dú)的文件(.frm)存放在數(shù)據(jù)庫(kù)文件夾中。輸入數(shù)據(jù):在表的數(shù)據(jù)視圖窗口中以填表方式輸入執(zhí)行SQL語(yǔ)句:在數(shù)據(jù)庫(kù)的查詢視圖窗口中執(zhí)行SQL語(yǔ)句23創(chuàng)建外鍵:在表上右擊,打開(kāi)關(guān)系/外鍵對(duì)話框進(jìn)行設(shè)置。查看關(guān)系模式:在模式設(shè)計(jì)視圖中添加各表,就能直觀查看各表間的關(guān)系。備份數(shù)據(jù)庫(kù)成SQL文件:在數(shù)據(jù)庫(kù)上右擊,選擇相應(yīng)命令即可將數(shù)據(jù)庫(kù)所有對(duì)象的定義和數(shù)據(jù)以SQL語(yǔ)句的方式導(dǎo)出到一個(gè)SQL文件(.sql)。以后可以再通過(guò)備份文件恢復(fù)數(shù)據(jù)庫(kù)。24【例11.2】在查詢視圖(Query)中執(zhí)行SQL語(yǔ)句創(chuàng)建stuinfo表CREATETABLEstuinfo(stu_idchar(10)NOTNULL,stu_namechar(10)DEFAULTNULL,sexchar(2)DEFAULTNULL,provincechar(20)DEFAULTNULL,areachar(20)DEFAULTNULL,birthdaydateDEFAULTNULL,nationchar(10)DEFAULT'漢',memberbit(1)DEFAULT1,departmentchar(20)DEFAULTNULL,PRIMARYKEY(stu_id));25另外兩表的SQL創(chuàng)建語(yǔ)句CREATETABLEcourse(course_idchar(10)NOTNULL,course_namechar(20)DEFAULTNULL,credit_hourfloat(5,1)DEFAULTNULL,periodint(11)DEFAUIJNULL,PRIMARYKEY(course_id),CHECK(credit_hour>=0),CHECK(period>=0));CREATETABLEstugrade(stu_idchar(10)NOTNULL,course_idchar(10)NOTNULL,gradefloat(5,2)DEFAULTNULL,PRIMARYKEY(stu_id,course_id),FOREIGNKEY(stu_id)REFERENCESstuinfo(stu_id),FOREIGNKEY(course_id)REFERENCEScourse(course_id),CHECK(gradeBETWEEN0AND100));26其它相關(guān)SQL語(yǔ)句INSERT
INTOstuinfo(stu_id,stu_name,sex,province,area,binhday)VALUES('98111001','蔡堯強(qiáng)','男','浙江','金華','1980-1-20');
INSERTINT0stuinfoVALUES('98111002','馮正亞','女','江蘇','連云港','1979-1-9','漢',1,NULL);
UPDATEstuinfoSETdepatment='計(jì)算機(jī)系';SELECTstu_name,sex,province,areaFROMstuinfoWHERE
(sex='女')AND(province='江蘇')OR(provincelike'廣%')
ORDER
BYprovince;SELECT
DISTINCTprovinceFROMstuinfo;SELECTprovince,COUNT(stu_name)FROMstuinfo
GROUP
BYprovinceORDER
BY
COUNT(stu_name);2711.2JDBC11.2.1JDBC的作用和功能11.2.2
指定JDBC驅(qū)動(dòng)程序11.2.3
連接數(shù)據(jù)庫(kù)11.2.4
執(zhí)行SQL語(yǔ)句11.2.5
處理數(shù)據(jù)查詢的結(jié)果集2811.2.1JDBC的作用和功能什么是JDBCJDBC(JavaDataBaseConnectivity)是基于Java的、提供連接、訪問(wèn)和操縱關(guān)系數(shù)據(jù)庫(kù)的應(yīng)用程序接口(API),JDBC提供在Java應(yīng)用程序中執(zhí)行SQL語(yǔ)句以訪問(wèn)和操縱關(guān)系數(shù)據(jù)庫(kù)的方法。JDBC驅(qū)動(dòng)程序類型JDBC-ODBC橋驅(qū)動(dòng)程序(將JDBC翻譯為ODBC)本地庫(kù)Java實(shí)現(xiàn)驅(qū)動(dòng)程序(本地驅(qū)動(dòng)+Java)網(wǎng)絡(luò)協(xié)議驅(qū)動(dòng)程序(服務(wù)器中間件)數(shù)據(jù)庫(kù)協(xié)議驅(qū)動(dòng)程序(全Java編寫(xiě),最常用)29圖11.16JDBC驅(qū)動(dòng)程序類型及其工作原理
30JDBC的基本功能、組成和工作原理數(shù)據(jù)庫(kù)廠商提供的JDBC驅(qū)動(dòng)程序必須實(shí)現(xiàn)JDBC規(guī)范的4個(gè)主要接口,它們是Driver、Connection、Statement和ResultSet。其中,Driver用于裝入和管理JDBC驅(qū)動(dòng)程序,可以通過(guò)DriverManager類使用Driver接口提供的功能;其他3個(gè)接口在應(yīng)用程序中通常都會(huì)用到。圖11.18JDBC的組成和工作原理示意圖3111.2.2
指定JDBC驅(qū)動(dòng)程序選擇和安裝JDBC驅(qū)動(dòng)程序首選的驅(qū)動(dòng)程序通常為數(shù)據(jù)庫(kù)協(xié)議驅(qū)動(dòng)程序,通常由數(shù)據(jù)庫(kù)廠商以jar包的方式提供。也些數(shù)據(jù)庫(kù)廠商會(huì)提供多種驅(qū)動(dòng)程序,可根據(jù)需要選擇,但優(yōu)先考慮純Java驅(qū)動(dòng)方式。也有些數(shù)據(jù)庫(kù)(如Access)只提供ODBC驅(qū)動(dòng)程序,因而只能使用JDBC-ODBC橋驅(qū)動(dòng)程序。JDBC-ODBC橋驅(qū)動(dòng)程序由JDK默認(rèn)安裝,包含在JDK運(yùn)行時(shí)庫(kù)rt.jar中,對(duì)應(yīng)的類名是sun.jdbc.odbc.JdbcOdbcDriver
。jar包一般無(wú)需特別的安裝,只要將其加入classpath搜索路徑中即可。也可只在IDE開(kāi)發(fā)環(huán)境中設(shè)置好。部署應(yīng)用時(shí)則需要將驅(qū)動(dòng)程序jar包放于應(yīng)用的lib目錄中。MySQL的JDBC驅(qū)動(dòng)程序下載解壓后的jar包如:mysql-connector-java-5.1.6-bin.jar32MyEclipse設(shè)置JDBC驅(qū)動(dòng)程序包在MyEclipse的project樹(shù)視圖中,右擊某應(yīng)用程序項(xiàng)目,選擇快捷菜單"BuildPath|ConfigBuildPath...",然后在項(xiàng)目屬性對(duì)話框的Libraries頁(yè),單擊"AddExtemalJARs…"按鈕,在隨后彈出的JARSelection對(duì)話框中,選擇相應(yīng)數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)程序jar包。在應(yīng)用程序中指定JDBC驅(qū)動(dòng)程序java.lang.Class類的forName()方法可用于裝載JDBC驅(qū)動(dòng)程序,如果指定的程序不存在則返回ClassNotFoundException異常例如:Class.forName("sun.jdbc.odbc.JdbcOdcDriver");//AccessClass.forName("com.mysql.jdbc.Driver");
//MySQL3311.2.3
連接數(shù)據(jù)庫(kù)連接指定數(shù)據(jù)庫(kù)的功能由DriverManager類和Connection接口實(shí)現(xiàn),DatabaseMetaData接口用于獲取數(shù)據(jù)庫(kù)的屬性信息。34DriverManager類提供了用于建立數(shù)據(jù)連接的方法publicstaticConnectiongetConnection(Stringurl)throwsSQLExceptionpublicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException例如:Connectioncon1=DriverManager.getConnection("jdbc:odbc:student_access"); //student_access為Access數(shù)據(jù)庫(kù)的ODBC數(shù)據(jù)源名Connection
con2=DriverManager.getConnection("jdbc:mysql://localhost/student?user=root&password=");
//student為MySQL數(shù)據(jù)庫(kù)名,注意格式j(luò)ava.sql.DriverManager類35Connection接口Connection接口用于管理連接對(duì)象,進(jìn)而獲得Statement對(duì)象和DatabaseMetaData對(duì)象。主要方法如下:Statement
createStatement()throwsSQLException;
//創(chuàng)建執(zhí)行SQL的語(yǔ)句對(duì)象Statement
createStatement(int
resultSetType,int
resultSetConcurrency)throwsSQLException;
//根據(jù)指定的參數(shù)創(chuàng)建語(yǔ)句對(duì)象void
close()throwsSQLException;
//關(guān)閉數(shù)據(jù)庫(kù)連接boolean
isClosed()throwsSQLException;
//判斷數(shù)據(jù)庫(kù)連接是否已關(guān)閉DatabaseMetaData
getMetaData()throwsSQLException;
//獲得所連接數(shù)據(jù)庫(kù)的元數(shù)據(jù)對(duì)象,以便得到數(shù)據(jù)庫(kù)表的結(jié)構(gòu)信息}36DatabaseMetaData接口利用DatabaseMetaData接口可獲得數(shù)據(jù)庫(kù)的元數(shù)據(jù)信息。常用的方法有:String
getURL()throwsSQLException
//返回連接數(shù)據(jù)庫(kù)的URLStringgetDriverName()throwsSQLException
//返回驅(qū)動(dòng)程序名稱StringgetDriverVersion()throwsSQLException //返回驅(qū)動(dòng)程序版本號(hào)String
getUserName()throwsSQLException
//返回?cái)?shù)據(jù)庫(kù)的用戶名String
getDatabaseProductName()throwsSQLException //返回?cái)?shù)據(jù)庫(kù)產(chǎn)品名稱String
getDatabaseProductVersion()throwsSQLException
//返回?cái)?shù)據(jù)庫(kù)版本號(hào)37【例11.3】連接指定數(shù)據(jù)庫(kù)并獲取其屬性信息本例分別與Access和MySQL數(shù)據(jù)庫(kù)連接,獲得數(shù)據(jù)庫(kù)屬性信息。Access數(shù)據(jù)庫(kù)采用JDBC-ODBC橋驅(qū)動(dòng)程序,MysQL數(shù)據(jù)庫(kù)采用專用JDBC驅(qū)動(dòng)程序。3811.2.4
執(zhí)行SQL語(yǔ)句Statement接口是提供了執(zhí)行SQL語(yǔ)句的相應(yīng)方法,常用方法如下:int
executeUpdate(String
sql)throwsSQLException //執(zhí)行數(shù)據(jù)定義和數(shù)據(jù)更新SQL語(yǔ)句ResultSet
executeQuery(String
sql)throwsSQLException
//執(zhí)行數(shù)據(jù)查詢SQL語(yǔ)句boolean
execute(String
sql)throwsSQLException
//執(zhí)行各類SQL語(yǔ)句int
getUpdateCount()throwsSQLException
//獲得數(shù)據(jù)更新所影響的行數(shù)ResultSet
getResultSet()throwsSQLException
//獲得數(shù)據(jù)查詢結(jié)果集void
close()throwsSQLException
//關(guān)閉語(yǔ)句對(duì)象39執(zhí)行數(shù)據(jù)定義和數(shù)據(jù)更新SQL語(yǔ)句Statementstmt=conn.createStatement();
Stringsql="INSERTINTOstuinfo
(stu_id,stu_name)VALUES('98111041','李偉')";intresult=stmt.executeUpdate(sql);
//返回影響的行數(shù)1執(zhí)行數(shù)據(jù)查詢SQL語(yǔ)句Stringsql="SELECT*FROMstuinfo";
ResultSet
rset=stmt.executeQuery(sql);
//得到結(jié)果集對(duì)象,其中封裝了查詢結(jié)果的記錄數(shù)據(jù)執(zhí)行SQL語(yǔ)句調(diào)用execute()方法執(zhí)行任意SQL語(yǔ)句;調(diào)用getResultSet()方法獲得數(shù)據(jù)查詢結(jié)果集調(diào)用getUpdateCount()方法獲得數(shù)據(jù)更新所影響的行數(shù)。40本例演示執(zhí)行數(shù)據(jù)更新SQL語(yǔ)句的executeUpdate()方法,可執(zhí)行插入數(shù)據(jù)的INSERT語(yǔ)句和刪除數(shù)據(jù)的DELETE語(yǔ)句。注意:程序執(zhí)行一次,如果在stuinfo表中插入一行數(shù)據(jù)而沒(méi)有刪除,則再次執(zhí)行會(huì)出錯(cuò)。為什么?【例11.4】
執(zhí)行插入和刪除數(shù)據(jù)的SQL語(yǔ)句4111.2.5
處理數(shù)據(jù)查詢的結(jié)果集ResultSet接口ResultSet對(duì)象用于存儲(chǔ)查詢返回的記錄集數(shù)據(jù),具有指向其當(dāng)前數(shù)據(jù)行的光標(biāo),光標(biāo)最初被置于第一行之前。默認(rèn)的ResultSet對(duì)象為只讀,僅有一個(gè)向前移動(dòng)的光標(biāo)。ResultSet接口提供了大量方法,分別介紹如下:光標(biāo)移動(dòng)int
getRow()throwsSQLException
//獲得當(dāng)前行的行號(hào)boolean
previous()throwsSQLException
//將光標(biāo)向前移一行boolean
next()throwsSQLException
//將光標(biāo)向后移一行voidbeforeFirst()throwsSQLException//將光標(biāo)移至首行之前
例如:introws=0;while(rset.next())rows++;
//獲得結(jié)果集總行數(shù)beforeFirst(); //光標(biāo)移回到首行之前42獲得當(dāng)前行指定列的數(shù)據(jù)Object
getObject(int
columnIndex)throwsSQLExceptionObjectgetObject(String
columnName)throwsSQLExceptionStringgetString(int
columnIndex)throwsSQLExceptionStringgetInt(String
columnName)throwsSQLException
例如:while(rset.next())
System.out.println(rset.getString(1));
//逐行輸出第一列的數(shù)據(jù)43ResultSetMetaData接口從結(jié)果集中獲得元數(shù)據(jù)ResultSetMetaData接口用于從查詢結(jié)果集中獲得元數(shù)據(jù)信息,常用的方法有:int
getColumnCount()throwsSQLException //返回列數(shù)String
getColumnName(int
column)throwsSQLException
//返回列名String
getColumnTypeName(int
column)throwsSQLException
//返回列數(shù)據(jù)類型名int
getColumnDisplaySize(int
column)throwsSQLException
//返回列的最大字符寬度例如:ResultSetMetaData
rsmd=resultset.getMetaData();
int
columnCount=rsmd.getColumnCount();//獲得列數(shù)44【例11.5】
使用JTable顯示數(shù)據(jù)查詢的結(jié)果集本例演示執(zhí)行數(shù)據(jù)查詢的SELECT語(yǔ)句,將獲得指定表的所有列名
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度海上保險(xiǎn)合同范本
- 2025版水利工程投標(biāo)咨詢與質(zhì)量監(jiān)督合同3篇
- 2025年度智能電網(wǎng)項(xiàng)目合法工程居間合同
- 2025年度荒山荒坡環(huán)境保護(hù)承包合同范本
- 個(gè)性化2024年意定監(jiān)護(hù)權(quán)益保障合同范本版B版
- 二零二四年度三人合伙環(huán)??萍柬?xiàng)目投資合同3篇
- 2025年度新能源汽車充電樁運(yùn)營(yíng)服務(wù)合同會(huì)簽單格式
- 企業(yè)團(tuán)體與休閑酒店服務(wù)合作合同版B版
- 2025年度海上貨物運(yùn)輸與貨物清關(guān)代理合同
- 中小企業(yè)融資合同(2024年版)一
- 2023-2024年員工三級(jí)安全培訓(xùn)考試題及參考答案(綜合題)
- 對(duì)口升學(xué)語(yǔ)文模擬試卷(6)-江西?。ń馕霭妫?/a>
- 招標(biāo)采購(gòu)基礎(chǔ)知識(shí)培訓(xùn)
- 電力系統(tǒng)分布式模型預(yù)測(cè)控制方法綜述與展望
- 五年級(jí)口算題卡每天100題帶答案
- 2024年貴州省中考理科綜合試卷(含答案)
- 無(wú)人機(jī)技術(shù)與遙感
- 《幼兒園健康》課件精1
- 22S803 圓形鋼筋混凝土蓄水池
- 2023年開(kāi)心英語(yǔ)四年級(jí)上冊(cè)全冊(cè)練習(xí)
- 《民航服務(wù)溝通技巧》教案第11課孕婦旅客服務(wù)溝通
評(píng)論
0/150
提交評(píng)論