第11章-JDBC連接數(shù)據(jù)庫(kù)_第1頁(yè)
第11章-JDBC連接數(shù)據(jù)庫(kù)_第2頁(yè)
第11章-JDBC連接數(shù)據(jù)庫(kù)_第3頁(yè)
第11章-JDBC連接數(shù)據(jù)庫(kù)_第4頁(yè)
第11章-JDBC連接數(shù)據(jù)庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩58頁(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)介

第11章JDBC連接數(shù)據(jù)庫(kù)11.1關(guān)系數(shù)據(jù)庫(kù)與SQL語(yǔ)言11.2使用JDBC連接數(shù)據(jù)庫(kù)11.3JDBC編程實(shí)例11.1關(guān)系數(shù)據(jù)庫(kù)與SQL語(yǔ)言SQL是StructuredQueryLanguage的縮寫,意思是結(jié)構(gòu)化查詢語(yǔ)言。SQL語(yǔ)言作為關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言,其主要功能是同各種數(shù)據(jù)庫(kù)建立聯(lián)系并進(jìn)行操作。SQL最初是由IBM公司提出的,其主要功能是對(duì)IBM自行開發(fā)的關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行操作。11.1.1關(guān)系數(shù)據(jù)庫(kù)的基本概念顧名思義,數(shù)據(jù)庫(kù)(DataBase)是存儲(chǔ)數(shù)據(jù)的倉(cāng)庫(kù),用專業(yè)術(shù)語(yǔ)來(lái)說(shuō)它是指長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)的、有組織的、可共享的數(shù)據(jù)集合。在關(guān)系型數(shù)據(jù)庫(kù)中,數(shù)據(jù)以記錄(Record)和字段(Field)的形式存儲(chǔ)在數(shù)據(jù)表(Table)中,由若干個(gè)數(shù)據(jù)表構(gòu)成一個(gè)數(shù)據(jù)庫(kù)。數(shù)據(jù)表是關(guān)系數(shù)據(jù)庫(kù)的一種基本數(shù)據(jù)結(jié)構(gòu)。如圖1所示,數(shù)據(jù)表在概念上很像我們?nèi)粘K褂玫亩S表格(關(guān)系代數(shù)中稱為關(guān)系)。數(shù)據(jù)表中的一行稱為一條記錄,任意一列稱為一個(gè)字段,字段有字段名與字段值之分。字段名是表的結(jié)構(gòu)部分,由它確定該列的名稱、數(shù)據(jù)類型和限制條件。圖1學(xué)生數(shù)據(jù)庫(kù)的組成及相關(guān)名詞SQL語(yǔ)言的操作對(duì)象主要是數(shù)據(jù)表。依照SQL命令操作關(guān)系型數(shù)據(jù)庫(kù)的不同功能,可將SQL命令分成數(shù)據(jù)定義語(yǔ)言DDL(DataDefinitionLanguage)、數(shù)據(jù)操縱語(yǔ)言DML(DataManipulationLanguage)、數(shù)據(jù)查詢語(yǔ)言DQL(DataQueryLanguage)和數(shù)據(jù)控制語(yǔ)言DCL(DataControlLanguage)四大類。11.1.2數(shù)據(jù)定義語(yǔ)言數(shù)據(jù)定義語(yǔ)言提供對(duì)數(shù)據(jù)庫(kù)及其數(shù)據(jù)表的創(chuàng)建、修改、刪除等操作,屬于數(shù)據(jù)定義語(yǔ)言的命令有Create、Alter和Drop。

1.創(chuàng)建數(shù)據(jù)表在SQL語(yǔ)言中,使用CREATETABLE語(yǔ)句創(chuàng)建新的數(shù)據(jù)庫(kù)表格。CREATETABLE語(yǔ)句的使用格式如下:

CREATETABLE表名(字段名l數(shù)據(jù)類型[限制條件],字段名2數(shù)據(jù)類型[限制條件],……,字段名n數(shù)據(jù)類型[限制條件])

說(shuō)明:

(1)表名是指存放數(shù)據(jù)的表格名稱;字段名是指表格中某一列的名稱,通常也稱為列名。表名和字段名都應(yīng)遵守標(biāo)識(shí)符命名規(guī)則。

(2)數(shù)據(jù)類型用來(lái)設(shè)定某一個(gè)具體列中數(shù)據(jù)的類型。

(3)所謂限制條件就是當(dāng)輸入此列數(shù)據(jù)時(shí)必須遵守的規(guī)則。這通常由系統(tǒng)給定的關(guān)鍵字來(lái)說(shuō)明。例如,使用UNIQUE關(guān)鍵字限定本列的值不能重復(fù);NOTNULL用來(lái)規(guī)定表格中該列的值不能為空;PRIMARYKEY表明該列為該表的主鍵(也稱主碼),它既限定本列的值不能重復(fù),也限定該列的值不能為空。

(4)[]表示可選項(xiàng)(下同)。例如,CREATE語(yǔ)句中的限制條件便是一個(gè)可選項(xiàng)。

2.修改數(shù)據(jù)表修改數(shù)據(jù)表包括向表中添加字段和刪除字段。這兩個(gè)操作都使用ALTER命令,但其中的關(guān)鍵字有所不同。添加字段使用的格式為:

ALTERTABLE表名ADD字段名數(shù)據(jù)類型[限制條件]刪除字段使用的格式為:

ALTERTABLE表名DROP字段名3.刪除數(shù)據(jù)表在SQL語(yǔ)言中使用DROPTABLE語(yǔ)句刪除某個(gè)表格及表格中的所有記錄,其使用格式如下:

DROPTABLE表名11.1.3數(shù)據(jù)操縱語(yǔ)言

1.向數(shù)據(jù)表中插入數(shù)據(jù)

SQL語(yǔ)言使用INSERT語(yǔ)句向數(shù)據(jù)庫(kù)表格中插入或添加新的數(shù)據(jù)行,其格式如下:

INSERTINTO表名(字段名l,……,字段名n)VALUES(值l,……,值n)

說(shuō)明:命令行中的“值”表示對(duì)應(yīng)字段的插入值。在使用時(shí)要注意字段名的個(gè)數(shù)與值的個(gè)數(shù)要嚴(yán)格對(duì)應(yīng),二者的數(shù)據(jù)類型也應(yīng)該一一對(duì)應(yīng),否則就會(huì)出現(xiàn)錯(cuò)誤。

2.?dāng)?shù)據(jù)更新語(yǔ)句

SQL語(yǔ)言使用UPDATE語(yǔ)句更新或修改滿足規(guī)定條件的現(xiàn)有記錄,使用格式如下:

UPDATE表名SET字段名l新值l[,字段名2新值2……]WHERE條件說(shuō)明:關(guān)鍵字WHERE引出更新時(shí)應(yīng)滿足的條件,即滿足此條件的字段值將被更新。在WHERE從句中可以使用所有的關(guān)系運(yùn)算符和邏輯運(yùn)算符。

3.刪除記錄語(yǔ)句

SQL語(yǔ)言使用DELETE語(yǔ)句刪除數(shù)據(jù)庫(kù)表格中的行或記錄,其使用格式如下:

DELETEFROM表名WHERE條件說(shuō)明:通常情況下,由關(guān)鍵字WHERE引出刪除時(shí)應(yīng)滿足的條件,即滿足此條件的記錄將被刪除。如果省略WHERE子句,則刪除當(dāng)前記錄。11.1.4數(shù)據(jù)查詢語(yǔ)句數(shù)據(jù)庫(kù)查詢是數(shù)據(jù)庫(kù)的核心操作。SQL語(yǔ)言提供了SELECT語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)的查詢,并以數(shù)據(jù)表的形式返回符合用戶查詢要求的結(jié)果數(shù)據(jù)。SELECT語(yǔ)句具有豐富的功能和靈活的使用方式,其一般的語(yǔ)法格式如下:

SELECT[DISTINCT]字段名l[,字段名2,……]FROM表名[WHERE條件]

其中:DISTINCT表示不輸出重復(fù)值,即當(dāng)查詢結(jié)果中有多條記錄具有相同的值時(shí),只返回滿足條件的第一條記錄值;語(yǔ)句中的字段名用來(lái)決定哪些字段將作為查詢結(jié)果返回。用戶可以按照自己的需要返回?cái)?shù)據(jù)表中的任意的字段,也可以使用通配符“*”來(lái)表示查詢結(jié)果中包含所有字段。11.2使用JDBC連接數(shù)據(jù)庫(kù)JDBC是JavaDataBaseConnectivity的縮寫,意思是Java程序連接和存取數(shù)據(jù)庫(kù)的應(yīng)用程序接口(API)。此接口是Java核心API的一部分。JDBC由一群類和接口組成,因此,通過(guò)調(diào)用這些類和接口所提供的成員方法,我們可以方便地連接各種不同的數(shù)據(jù)庫(kù),進(jìn)而使用標(biāo)準(zhǔn)的SQL命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢、插入、刪除、更新等操作。11.2.1JDBC結(jié)構(gòu)我們只要在Java數(shù)據(jù)庫(kù)應(yīng)用程序中指定使用某個(gè)數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)程序,就可以連接并存取指定的數(shù)據(jù)庫(kù)。而且,當(dāng)我們要連接幾個(gè)不同的數(shù)據(jù)庫(kù)時(shí),只需修改程序中的JDBC驅(qū)動(dòng)程序,無(wú)需對(duì)其他的程序代碼做任何改動(dòng)。JDBC的基本結(jié)構(gòu)由Java程序、JDBC管理器、驅(qū)動(dòng)程序和數(shù)據(jù)庫(kù)四部分組成,如圖2所示。在這四部分中,根據(jù)數(shù)據(jù)庫(kù)的不同,相應(yīng)的驅(qū)動(dòng)程序又可分為四種類型。圖16.2JDBC驅(qū)動(dòng)程序存取結(jié)構(gòu)

1.Java應(yīng)用程序

Java程序包括Java應(yīng)用程序和小應(yīng)用程序,主要是根據(jù)JDBC方法實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)和操作。完成的主要任務(wù)有:請(qǐng)求與數(shù)據(jù)庫(kù)建立連接;向數(shù)據(jù)庫(kù)發(fā)送SQL請(qǐng)求;為結(jié)果集定義存儲(chǔ)應(yīng)用和數(shù)據(jù)類型;查詢結(jié)果;處理錯(cuò)誤;控制傳輸、提交及關(guān)閉連接等操作。

2.JDBC管理器

JDBC管理器為我們提供了一個(gè)“驅(qū)動(dòng)程序管理器”,它能夠動(dòng)態(tài)地管理和維護(hù)數(shù)據(jù)庫(kù)查詢所需要的所有驅(qū)動(dòng)程序?qū)ο?,?shí)現(xiàn)Java程序與特定驅(qū)動(dòng)程序的連接。它完成的主要任務(wù)有:為特定數(shù)據(jù)庫(kù)選擇驅(qū)動(dòng)程序;處理JDBC初始化調(diào)用;為每個(gè)驅(qū)動(dòng)程序提供JDBC功能的入口;為JDBC調(diào)用執(zhí)行參數(shù)等。

3.驅(qū)動(dòng)程序驅(qū)動(dòng)程序處理JDBC方法,向特定數(shù)據(jù)庫(kù)發(fā)送SQL請(qǐng)求,并為Java程序獲取結(jié)果。驅(qū)動(dòng)程序可以完成下列任務(wù):建立與數(shù)據(jù)庫(kù)的連接;向數(shù)據(jù)庫(kù)發(fā)送請(qǐng)求;用戶程序請(qǐng)求時(shí),執(zhí)行翻譯;將錯(cuò)誤代碼格式化成標(biāo)準(zhǔn)的JDBC錯(cuò)誤代碼等。

4.?dāng)?shù)據(jù)庫(kù)這里的數(shù)據(jù)庫(kù)是指Java程序需要訪問(wèn)的數(shù)據(jù)庫(kù)及其數(shù)據(jù)庫(kù)管理系統(tǒng)。11.2.2四類JDBC驅(qū)動(dòng)程序當(dāng)我們想要連接數(shù)據(jù)庫(kù)并存取其中的數(shù)據(jù)時(shí),選擇適當(dāng)類型的JDBC驅(qū)動(dòng)程序是非常重要的。目前JDBC驅(qū)動(dòng)程序可細(xì)分為四種類型,如圖2所示。不同類型的JDBC驅(qū)動(dòng)程序有著不一樣的特性和使用方法。下面將說(shuō)明不同類型的JDBC驅(qū)動(dòng)程序之間的差異。

類型1:JDBC-ODBCBridge。這類驅(qū)動(dòng)程序的特色是必須在我們的計(jì)算機(jī)上事先安裝好ODBC驅(qū)動(dòng)程序,然后通過(guò)JDBC-ODBCBridge的轉(zhuǎn)換,把Java程序中使用的JDBCAPI轉(zhuǎn)換成ODBCAPI,進(jìn)而通過(guò)ODBC來(lái)存取數(shù)據(jù)庫(kù)。類型2:JDBC-NativeAPIBridge。同類型1一樣,這類驅(qū)動(dòng)程序也必須在我們的計(jì)算機(jī)上先安裝好特定的驅(qū)動(dòng)程序(類似ODBC),然后通過(guò)JDBC-NativeAPIBridge的轉(zhuǎn)換,把Java程序中使用的JDBCAPI轉(zhuǎn)換成NativeAPI,進(jìn)而存取數(shù)據(jù)庫(kù)。

類型3:JDBC-Middleware。使用這類驅(qū)動(dòng)程序時(shí)不需要在我們的計(jì)算機(jī)上安裝任何附加軟件,但是必須在安裝數(shù)據(jù)庫(kù)管理系統(tǒng)的服務(wù)器端加裝中介軟件(Middleware),這個(gè)中介軟件會(huì)負(fù)責(zé)所有存取數(shù)據(jù)庫(kù)時(shí)必要的轉(zhuǎn)換。類型4:PureJDBCDriver。使用這類驅(qū)動(dòng)程序時(shí)無(wú)需安裝任何附加的軟件(無(wú)論是我們的計(jì)算機(jī)或是數(shù)據(jù)庫(kù)服務(wù)器端),所有存取數(shù)據(jù)庫(kù)的操作都直接由JDBC驅(qū)動(dòng)程序來(lái)完成。最佳的JDBC驅(qū)動(dòng)程序類型是類型4,因?yàn)槭褂妙愋?的JDBC驅(qū)動(dòng)程序不會(huì)增加任何額外的負(fù)擔(dān),而且類型4的JDBC驅(qū)動(dòng)程序是由純Java語(yǔ)言開發(fā)而成的,因此擁有最佳的兼容性。反觀類型1和類型2的JDBC驅(qū)動(dòng)程序都必須事先安裝其他附加的軟件,若我們有30臺(tái)計(jì)算機(jī)就必須安裝30次附加軟件,這將使Java數(shù)據(jù)庫(kù)程序的兼容性大打折扣。使用類型3的JDBC驅(qū)動(dòng)程序也是不錯(cuò)的選擇,因?yàn)轭愋?的JDBC驅(qū)動(dòng)程序也是由純Java語(yǔ)言開發(fā)而成的,并且中介軟件也僅需要在服務(wù)器上安裝。因此,我們建議最好以類型3和類型4的JDBC驅(qū)動(dòng)程序?yàn)橹饕x擇,類型1和類型2的JDBC驅(qū)動(dòng)程序?yàn)榇我倪x擇。11.2.3JDBC編程要點(diǎn)在Java中使用數(shù)據(jù)庫(kù)進(jìn)行JDBC編程時(shí),Java程序中通常應(yīng)包含下述幾部分內(nèi)容:

(1)在程序的首部用import語(yǔ)句將java.sql包引入程序:

importjava.sql.*;(2)使用Class.forName()方法加載相應(yīng)數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)程序。若以加載jdbc-odbc橋?yàn)槔瑒t相應(yīng)的語(yǔ)句格式為:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");(3)定義JDBC的URL對(duì)象。例如:

StringconURL="jdbc:odbc:TestDB";

其中TestDB是我們?cè)O(shè)置的要?jiǎng)?chuàng)建的數(shù)據(jù)源。

(4)連接數(shù)據(jù)庫(kù)。

Connections=DriverManager.getConnection(conURL);(5)使用SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。

(6)使用close()方法解除Java與數(shù)據(jù)庫(kù)的連接并關(guān)閉數(shù)據(jù)庫(kù)。例如:

s.close();11.2.4常用的JDBC類與方法

1.DriverManage類

java.sql.DriverManager類是JDBC的管理器,負(fù)責(zé)管理JDBC驅(qū)動(dòng)程序,跟蹤可用的驅(qū)動(dòng)程序并在數(shù)據(jù)庫(kù)和相應(yīng)驅(qū)動(dòng)程序之間建立連接。如果我們要使用JDBC驅(qū)動(dòng)程序,必須加載JDBC驅(qū)動(dòng)程序并向DriverManage注冊(cè)后才能使用。加載和注冊(cè)驅(qū)動(dòng)程序可以使用Class.forName()這個(gè)方法來(lái)完成。此外,java.sql.DriverManager類還處理如驅(qū)動(dòng)程序登錄時(shí)間限制及登錄和跟蹤消息的顯示等事務(wù)。

2.Connection類

java.sql.Connection類負(fù)責(zé)建立與指定數(shù)據(jù)庫(kù)的連接。

3.Statement類

java.sql.Statement類的主要功能是將SQL命令傳送給數(shù)據(jù)庫(kù),并將SQL命令的執(zhí)行結(jié)果返回。

4.PreparedStatement類

java.sql.PreparedStatement類的對(duì)象可以代表一個(gè)預(yù)編譯的SQL語(yǔ)句,它是Statement接口的子接口。由于PreparedStatement類會(huì)將傳入的SQL命令編譯并暫存在內(nèi)存中,所以當(dāng)某一SQL命令在程序中被多次執(zhí)行時(shí),使用PreparedStatement類的對(duì)象執(zhí)行速度要快于Statement類的對(duì)象。因此,將需要多次執(zhí)行的SQL語(yǔ)句創(chuàng)建為PreparedStatement對(duì)象,可以提高效率。

PreparedStatement對(duì)象繼承Statement對(duì)象的所有功能,另外還添加一些特定的方法。

5.ResultSet類

java.sql.ResultSet類表示從數(shù)據(jù)庫(kù)中返回的結(jié)果集。當(dāng)我們使用Statement和PreparedStatement類提供的executeQuery()方法來(lái)下達(dá)Select命令以查詢數(shù)據(jù)庫(kù)時(shí),executeQuery()方法將會(huì)把數(shù)據(jù)庫(kù)響應(yīng)的查詢結(jié)果存放在ResultSet類對(duì)象中供我們使用。11.2.5安裝ODBC驅(qū)動(dòng)程序示例盡管在四類JDBC驅(qū)動(dòng)程序中,以選擇類型三和類型四的JDBC驅(qū)動(dòng)程序?yàn)樽罴?,但由于目前?guó)內(nèi)應(yīng)用較廣的數(shù)據(jù)庫(kù)是MicrosoftAccess等微軟的產(chǎn)品,因此,本小節(jié)以它為例,說(shuō)明創(chuàng)建ODBC用戶數(shù)據(jù)源的步驟。

(1)在Windows的“控制面板”中找到“ODBC(32)數(shù)據(jù)源”圖標(biāo)并雙擊之,彈出如圖3所示的“ODBC數(shù)據(jù)源管理器”對(duì)話框。圖3“ODBC數(shù)據(jù)源管理器”對(duì)話框

(2)在“用戶DSN”選項(xiàng)卡的“用戶數(shù)據(jù)源”列表中選中“MSAccessDatebase”選項(xiàng),然后單擊“添加”按鈕,彈出如圖4所示的“創(chuàng)建新數(shù)據(jù)源”對(duì)話框。圖4“創(chuàng)建新數(shù)據(jù)源”對(duì)話框

(3)在圖4中,選中“MicrosoftAccessDriver”項(xiàng),然后單擊“完成”按鈕,彈出如圖5所示的“ODBCMicrosoftAccess安裝”對(duì)話框。在此對(duì)話框中,輸入數(shù)據(jù)源名稱后,單擊“創(chuàng)建”按鈕,彈出如圖6所示的“新數(shù)據(jù)庫(kù)”對(duì)話框。如果事先已經(jīng)建好了數(shù)據(jù)庫(kù),在圖5的對(duì)話框中也可單擊“選取”按鈕,進(jìn)而指明數(shù)據(jù)庫(kù)的存放路徑。圖5“ODBCMicrosoftAccess安裝”對(duì)話框

(4)在圖6所示的“新數(shù)據(jù)庫(kù)”對(duì)話框中輸入數(shù)據(jù)庫(kù)名,選擇路徑,選擇排序,然后單擊“確定”按鈕,返回“ODBCMicrosoftAccess安裝”對(duì)話框。圖6“新數(shù)據(jù)庫(kù)”對(duì)話框

(5)在“ODBCMicrosoftAccess安裝”對(duì)話框中單擊“確定”按鈕,返回“ODBC數(shù)據(jù)源管理器”對(duì)話框,新添加的用戶數(shù)據(jù)源將出現(xiàn)在此對(duì)話框中,如圖7所示。此時(shí),單擊“確定”按鈕,新用戶數(shù)據(jù)源創(chuàng)建完成。創(chuàng)建好用戶數(shù)據(jù)源后,便可以對(duì)這個(gè)數(shù)據(jù)源進(jìn)行數(shù)據(jù)表的創(chuàng)建和修改,記錄的添加、修改和刪除等數(shù)據(jù)庫(kù)操作。圖7安裝完成后的“ODBC數(shù)據(jù)源管理器”對(duì)話框

64位操作系統(tǒng)不支持MicrosoftOLEDBProviderforJet驅(qū)動(dòng)程序,也不支持更早的MicrosoftAccessDriver(*.mdb)方式連接。所以,程序里面的鏈接字符串不能正常工作.

Win7下Access的ODBC連接直接在控制面板---管理工具----數(shù)據(jù)源(ODBC)打開數(shù)據(jù)源配置,發(fā)現(xiàn)只有SQLServer的驅(qū)動(dòng),其他的都沒(méi)有了。

解決方法是:C:/Windows/SysWOW64在這個(gè)目錄下找到:odbcad32.exe這個(gè)文件,雙擊打開。里面有很多可用個(gè)數(shù)據(jù)源驅(qū)動(dòng),然后就可用添加連接Access的ODBC的數(shù)據(jù)源了。11.3JDBC編程實(shí)例11.3.1創(chuàng)建數(shù)據(jù)表

【示例程序c16_1.java】創(chuàng)建學(xué)生表student。此表有三個(gè)字段:學(xué)號(hào)(id)、姓名(name)及成績(jī)(score)。importjava.sql.*;//引入java.sql包publicclassc16_1{publicstaticvoidmain(String[]args){StringJDriver="sun.jdbc.odbc.JdbcOdbcDriver";//聲明JDBC驅(qū)動(dòng)程序?qū)ο?/p>

StringconURL="jdbc:odbc:TestDB";//定義JDBC的URL對(duì)象

try{Class.forName(JDriver);//加載JDBC-ODBC橋驅(qū)動(dòng)程序

}catch(java.lang.ClassNotFoundExceptione){System.out.println("ForName:"+e.getMessage());}try{Connectioncon=DriverManager.getConnection(conURL);//連接數(shù)據(jù)庫(kù)URLStatements=con.createStatement();//建立Statement類對(duì)象

Stringquery="createtablestudent("+"idchar(10),"+"namechar(16),"+"scoreinteger"+")";//創(chuàng)建一個(gè)含有三個(gè)字段的學(xué)生表students.executeUpdate(query);//執(zhí)行SQL命令s.close();//釋放Statement所連接的數(shù)據(jù)庫(kù)及JDBC資源

con.close();//關(guān)閉與數(shù)據(jù)庫(kù)的連線

}catch(SQLExceptione){System.out.println("SQLException:"+e.getMessage());}}}其中,

createtablestudent(idchar(10),namechar(16),scoreinteger);

這個(gè)SQL語(yǔ)句表示建立一個(gè)名為student的表,包含id(字符型,寬度為10)、name(字符型,寬度為16)與score(數(shù)字型)三個(gè)字段。這段程序的操作結(jié)果是創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù)中student表的結(jié)構(gòu),表中還沒(méi)有任何記錄。運(yùn)行結(jié)果見數(shù)據(jù)庫(kù)文件TestDB.mdb。11.3.2向數(shù)據(jù)表中插入數(shù)據(jù)

【示例程序c16_2.java】在上例創(chuàng)建的數(shù)據(jù)表student中插入三個(gè)學(xué)生的記錄。importjava.sql.*;publicclassc16_2{

publicstaticvoidmain(String[]args)

{StringJDriver="sun.jdbc.odbc.JdbcOdbcDriver";

StringconURL="jdbc:odbc:TestDB";try{Class.forName(JDriver);//注冊(cè)驅(qū)動(dòng)程序

}catch(java.lang.ClassNotFoundExceptione){System.out.println("ForName:"+e.getMessage(

));}try{Connectioncon=DriverManager.getConnection(conURL);//建立數(shù)據(jù)庫(kù)連接

Statements=con.createStatement(?);//創(chuàng)建Statement類對(duì)象s,準(zhǔn)備進(jìn)行SQL操作

Stringr1="insertintostudentvalues("+"'0001','王明',80)";Stringr2="insertintostudentvalues("+"'0002','高強(qiáng)',94)";Stringr3="insertintostudentvalues("+"'0003','李莉',82)";//使用SQL命令insert插入三條學(xué)生記錄到表中

s.executeUpdate(r1);//執(zhí)行SQL命令

s.executeUpdate(r2);s.executeUpdate(r3);s.close(?);//釋放Statement所連接的數(shù)據(jù)庫(kù)及JDBC資源

con.close(?);//關(guān)閉與數(shù)據(jù)庫(kù)的連線

}

catch(SQLExceptione){System.out.println("SQLException:"+e.getMessage(

));}}}該程序的運(yùn)行結(jié)果如圖16.8所示。

圖16.8程序c16_2的運(yùn)行結(jié)果11.3.3更新數(shù)據(jù)

【示例程序c16_3.java】修改上例數(shù)據(jù)表中的第二條和第三條記錄的學(xué)生成績(jī)字段值,并把修改后的數(shù)據(jù)表的內(nèi)容輸出到屏幕上。importjava.sql.*;publicclassc16_3{publicstaticvoidmain(String[?]args){StringJDriver="sun.jdbc.odbc.JdbcOdbcDriver";

StringconURL="jdbc:odbc:TestDB";String[

]id={"0002","0003"};

int[?]score={89,60};

try{

Class.forName(JDriver);

}catch(java.lang.ClassNotFoundExceptione)

{System.out.println("ForName:"+e.getMessage(

));}try

{Connectioncon=DriverManager.getConnection(conURL);

//修改數(shù)據(jù)庫(kù)中數(shù)據(jù)表的內(nèi)容

PreparedStatementps=con.prepareStatement(

"UPDATEstudentsetscore=?whereid=?");inti=0,idlen=id.length;do{ps.setInt(1,score[i]);ps.setString(2,id[i]);

ps.executeUpdate(

);//執(zhí)行SQL修改命令

++i;}while(i<id.length);

ps.close();//查詢數(shù)據(jù)庫(kù)并把數(shù)據(jù)表的內(nèi)容輸出到屏幕上

Statements=con.createStatement();ResultSetrs=s.executeQuery("select*fromstudent");while(rs.next(?)){System.out.println(rs.getString("id")+"\t"+rs.getString("name")+"\t"+rs.getInt("score"));}s.close();con.close();}catch(SQLExceptione){System.out.println("SQLException:"+e.getMessage());}}}

在這個(gè)程序中使用了PreparedStatement類,它提供了一系列的set方法來(lái)設(shè)定位置。請(qǐng)注意程序中PreparedStatement()方法中的參數(shù)“?”。程序中的語(yǔ)句:

PreparedStatementps=con.prepareStatement("UPDATEstudentsetscore=?whereid=?");ps.setInt(1,score[i]);//將score[i]的值作為SQL語(yǔ)句中第一個(gè)問(wèn)號(hào)所代表參數(shù)的值

ps.executeUpdate();

其中"UPDATEstudentsetscore=?whereid=?"這個(gè)SQL語(yǔ)句中各字段的值并沒(méi)指定,而是以“?”表示。程序必須在執(zhí)行ps.executeUpdate()語(yǔ)句之前指定各個(gè)問(wèn)號(hào)位置的字段值。例如,用ps.setInt(1,score[i])語(yǔ)句中的參數(shù)1指出這里的score[i]的值是SQL語(yǔ)句中第一個(gè)問(wèn)號(hào)位置的值。當(dāng)前面兩條語(yǔ)句執(zhí)行完后,才可執(zhí)行ps.executeUpdate()語(yǔ)句,完成對(duì)一條記錄的修改。程序中用到的查詢數(shù)據(jù)庫(kù)并把數(shù)據(jù)表的內(nèi)容輸出到屏幕的語(yǔ)句是:ResultSetrs=s.executeQuery("select*fromstudent");while(rs.next()){System.out.println(rs.getString("id")+"\t"+rs.getString("name")+"\t"+rs.getInt("score"));}其中,executeQuery()返回一個(gè)Res

溫馨提示

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