




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
7.1關系型數(shù)據(jù)庫與SQL語言7.2連接數(shù)據(jù)庫的JDBC簡介7.3在JSP中使用JDBC連接數(shù)據(jù)庫習題7第7章使用JDBC連接數(shù)據(jù)庫
關系型數(shù)據(jù)庫使用被稱之為第四代語言(4GL)的SQL語言對數(shù)據(jù)庫進行定義、操縱、控制和查詢。Java程序與數(shù)據(jù)庫的連接是通過JDBC來實現(xiàn)的。本章將簡要介紹數(shù)據(jù)庫的基本概念和SQL語言,進而講述如何在JSP程序中連接數(shù)據(jù)庫、存取數(shù)據(jù)庫中的數(shù)據(jù)。
SQL是StructuredQueryLanguage的縮寫,意思是結構化查詢語言。SQL語言作為關系型數(shù)據(jù)庫管理系統(tǒng)的標準語言,其主要功能是同各種數(shù)據(jù)庫建立聯(lián)系并進行操作。7.1關系型數(shù)據(jù)庫與SQL語言
圖7.1學生數(shù)據(jù)庫的組成及相關名詞
SQL語言的操作對象主要是數(shù)據(jù)表。依照SQL命令操作關系型數(shù)據(jù)庫的不同功能,可將SQL命令分成數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL)、數(shù)據(jù)操縱語言(DataManipulationLanguage,DML)、數(shù)據(jù)查詢語言(DataQueryLanguage,DQL)和數(shù)據(jù)控制語言(DataControlLanguage,DCL)四大類。下面我們簡單地介紹前三類。7.1.2數(shù)據(jù)定義語言
數(shù)據(jù)定義語言提供對數(shù)據(jù)庫及其數(shù)據(jù)表的創(chuàng)建、修改、刪除等操作,屬于數(shù)據(jù)定義語言的命令有Create、Alter和Drop。
1.創(chuàng)建數(shù)據(jù)表
在SQL語言中,使`用CREATETABLE語句創(chuàng)建新的數(shù)據(jù)庫表格。CREATETABLE語句的使用格式如下:
CREATE
TABLE表名(字段名1數(shù)據(jù)類型[限制條件],
字段名2數(shù)據(jù)類型[限制條件],
……
字段名n數(shù)據(jù)類型[限制條件])說明:
(1)表名是指存放數(shù)據(jù)的表格名稱;字段名是指表格中某一列的名稱,通常也稱為列名。表名和字段名都應遵守標識符命名規(guī)則。
(2)數(shù)據(jù)類型用來設定某一個具體列中數(shù)據(jù)的類型。
(3)所謂限制條件就是當輸入此列數(shù)據(jù)時必須遵守的規(guī)則。這通常由系統(tǒng)給定的關鍵字來說明。例如,使用UNIQUE關鍵字限定本列的值不能重復;NOTNULL用來規(guī)定表格中該列的值不能為空;PRIMARYKEY表明該列為該表的主鍵(也稱主碼),它既限定本列的值不能重復,也限定該列的值不能為空。
(4)
[]表示可選項(下同)。例如,CREATE語句中的限制條件便是一個可選項。
例如,創(chuàng)建一個學生成績表的命令如下:
CREATE
TABLE
student(學號CHAR(10),姓名VARCHAR(15),成績INTEGER)
這條命令創(chuàng)建了一個名為“student”的數(shù)據(jù)表,它由“學號”、“姓名”和“成績”三個字段組成。其中,“學號”的數(shù)據(jù)類型是10個字節(jié)的定長字符串,“姓名”的數(shù)據(jù)類型是最大為15個字節(jié)的變長字符串,“成績”的數(shù)據(jù)類型是整數(shù)類型(通常占4個字節(jié))。
2.修改數(shù)據(jù)表
修改數(shù)據(jù)表包括向表中添加字段和刪除字段。這兩個操作都使用Alter命令,但其中的關鍵字有所不同。
添加字段的命令格式為
ALTER
TABLE表名ADD字段名數(shù)據(jù)類型[限制條件]
例如,在學生成績表中添加一個“性別”字段:
ALTER
TABLEstudent
ADD性別CHAR(1)
刪除字段的命令格式為
ALTER
TABLE表名DROP字段名
例如,刪除學生成績表中的性別字段:
ALTER
TABLEstudent
DROP性別
3.刪除數(shù)據(jù)表
在SQL語言中使用DROP
TABLE語句刪除某個表格及表格中的所有記錄。其使用格式如下:
DROP
TABLE表名
例如,刪除學生成績表:
DROP
TABLE
student7.1.3數(shù)據(jù)操縱語言
數(shù)據(jù)操縱語言用來維護數(shù)據(jù)庫的內(nèi)容。屬于數(shù)據(jù)操縱語言的命令有Insert、Delete和Update。
1.向數(shù)據(jù)表中插入數(shù)據(jù)
SQL語言使用INSERT語句向數(shù)據(jù)庫表格中插入或添加新的數(shù)據(jù)行。其使用格式如下:
INSERT
INTO表名[(字段名1,……,字段名n)]VALUES(值1,……,值n)
說明:命令行中表名后的字段名是可以省略的;命令行中的“值”表示對應字段名的插入值。在使用時要注意字段名的個數(shù)與值的個數(shù)要嚴格對應,二者的數(shù)據(jù)類型也應該一一對應,否則就會出現(xiàn)錯誤。例如,下面的語句向學生成績表中插入學號為“1005”和姓名是“王賓”的數(shù)據(jù):
INSERT
INTO
student(學號,姓名)
VALUES(“1005”,“王賓”)
而下面的語句是向學生成績表中插入學號為“1004”、姓名是“李林”、入學成績是90的數(shù)據(jù)記錄。注意,在這個語句中省略了表名后的字段名。
INSERT
INTOstudent
VALUES("1004","李林",90)
2.數(shù)據(jù)更新語句
SQL語言使用UPDATE語句更新或修改滿足給定條件的現(xiàn)有記錄。該語句的使用格式如下:
UPDATE表名SET字段名1=新值1[,字段名2=新值2……][WHERE條件]
說明:關鍵字WHERE引出更新時應滿足的條件,即滿足此條件的字段值將被更新。在WHERE子句中可以使用所有的關系運算符和邏輯運算符。
例如,下面的語句將學生成績表中李林的成績更新為95:
UPDATEstudent
SET成績=95WHERE姓名="李林"
3.刪除記錄語句
SQL語言使用DELETE語句刪除數(shù)據(jù)庫表中的行(記錄)。該語句的使用格式如下:
DELETE
FROM表名[WHERE條件]
說明:通常情況下,由關鍵字WHERE引出刪除時應滿足的條件,即滿足此條件的所有記錄將被刪除。如果省略WHERE子句,則刪除當前記錄。
例如,下面的語句將刪除學生成績表中李林的記錄:
DELETE
FROM
student
WHERE姓名="李林"7.1.4數(shù)據(jù)查詢語句
數(shù)據(jù)庫查詢是數(shù)據(jù)庫的核心操作。SQL語言提供了SELECT語句進行數(shù)據(jù)庫的查詢,并以數(shù)據(jù)表的形式返回符合用戶查詢要求的結果數(shù)據(jù)。SELECT語句具有豐富的功能和靈活的使用方式,其一般的語法格式如下:
SELECT[DISTINCT]字段名1[,字段名2,……]
FROM表名
[WHERE條件]
[ORDER
BY字段名1[ASC/DESC][,字段名2[ASC/DESC],……]]其中:DISTINCT表示不輸出重復值,即當查詢結果中有多條記錄具有相同的值時,只返回滿足條件的第一條記錄值;語句中的字段名用來決定哪些字段將作為查詢結果返回,用戶可以按照自己的需要返回數(shù)據(jù)表中的任意的字段,也可以使用通配符“*”來表示查詢結果中包含所有字段;ORDERBY表示實現(xiàn)查詢結果按字段名排序,ASC為升序,DESC為降序。例如:
(1)在學生成績表中查詢?nèi)w學生的各項數(shù)據(jù),可使用如下的命令語句:
SELECT*FROM
student
(2)在學生成績表中查詢學生的姓名和成績,可使用如下的命令語句:
SELECT姓名,成績FROM
student
(3)在學生成績表中查詢成績大于90的所有記錄,可使用如下的命令語句:
SELECT*FROM
studentWHERE成績>90
(4)下面的語句在學生成績表中查詢?nèi)w學生的各項數(shù)據(jù),并按成績從高到低排序:
SELECT*FROM
student
ORDERBY成績DESC
JDBC是JavaDataBaseConnectivity的縮寫,意思是Java程序連接和存取數(shù)據(jù)庫的應用程序接口(API)。此接口是Java核心API的一部分。JDBC由一群類和接口組成,它支持ANSISQL—92標準。通過調(diào)用這些類和接口所提供的成員方法,我們可以方便地連接各種不同的數(shù)據(jù)庫,進而使用標準的SQL命令對數(shù)據(jù)庫進行查詢、插入、刪除、更新等操作。7.2連接數(shù)據(jù)庫的JDBC簡介7.2.1JDBC結構
JDBC的主要任務是通過連接器與數(shù)據(jù)庫建立連接,調(diào)用JDBCAPI發(fā)送SQL語句,處理數(shù)據(jù)庫返回結果。用JDBC連接數(shù)據(jù)庫實現(xiàn)了與平臺無關的客戶機/服務器的數(shù)據(jù)庫應用。由于JDBC是針對“與平臺無關”設計的,所以我們只要在Java數(shù)據(jù)庫應用程序中指定使用某個數(shù)據(jù)庫的JDBC驅動程序,就可以連接并存取指定的數(shù)據(jù)庫。而且,當我們要連接幾個不同的數(shù)據(jù)庫時,只需修改程序中的JDBC驅動程序,無需對其它的程序代碼做任何改動。JDBC的基本結構由Java程序、JDBC管理器、驅動程序和數(shù)據(jù)庫四部分組成,如圖7.2所示。在這四部分中,根據(jù)數(shù)據(jù)庫的不同,相應的驅動程序又可分為四種類型。
圖7.2JDBC驅動程序存取結構
1.?JSP應用程序
JSP應用程序嵌入了Java應用程序,主要是根據(jù)JDBC方法實現(xiàn)對數(shù)據(jù)庫的訪問和操作。完成的主要任務有:請求與數(shù)據(jù)庫建立連接;向數(shù)據(jù)庫發(fā)送SQL請求;為結果集定義存儲應用和數(shù)據(jù)類型;查詢結果;處理錯誤;控制傳輸、提交及關閉連接等。
2.?JDBC管理器
JDBC管理器為我們提供了一個“驅動程序管理器”,它能夠動態(tài)地管理和維護數(shù)據(jù)庫查詢所需要的所有驅動程序對象,實現(xiàn)Java程序與特定驅動程序的連接,從而體現(xiàn)JDBC的“與平臺無關”這一特點。它完成的主要任務有:為特定數(shù)據(jù)庫選擇驅動程序;處理JDBC初始化調(diào)用;為每個驅動程序提供JDBC功能的入口;為JDBC調(diào)用執(zhí)行參數(shù)等。
3.驅動程序
驅動程序處理JDBC方法,向特定數(shù)據(jù)庫發(fā)送SQL請求,并為JSP程序獲取結果。在必要的時候,驅動程序可以翻譯或優(yōu)化請求,使SQL請求符合DBMS支持的語言。驅動程序可以完成下列任務:建立與數(shù)據(jù)庫的連接;向數(shù)據(jù)庫發(fā)送請求;用戶程序請求時,執(zhí)行翻譯;將錯誤代碼格式化成標準的JDBC錯誤代碼等。
JDBC是獨立于數(shù)據(jù)庫管理系統(tǒng)的,而每個數(shù)據(jù)庫系統(tǒng)均有自己的協(xié)議與客戶機通信,因此,JDBC利用數(shù)據(jù)庫驅動程序來使用這些數(shù)據(jù)庫引擎。JDBC驅動程序由數(shù)據(jù)庫軟件商和第三方的軟件商提供,因此,根據(jù)編程所使用的數(shù)據(jù)庫系統(tǒng)不同,所需要的驅動程序也有所不同。
4.數(shù)據(jù)庫
這里的數(shù)據(jù)庫是指JSP程序需要訪問的數(shù)據(jù)庫及其數(shù)據(jù)庫管理系統(tǒng)。7.2.2四類JDBC驅動程序
盡管存在數(shù)據(jù)庫語言標準SQL—92,但由于數(shù)據(jù)庫技術發(fā)展的原因,各公司開發(fā)的SQL存在著一定的差異。因此,當我們想要連接數(shù)據(jù)庫并存取其中的數(shù)據(jù)時,選擇適當類型的JDBC驅動程序是非常重要的。目前JDBC驅動程序可細分為四種類型,如圖7.2所示。不同類型的JDBC驅動程序有著不一樣的特性和使用方法。下面將說明不同類型的JDBC驅動程序之間的差異。
類型1:JDBC-ODBCBridge。這類驅動程序的特色是必須在我們的計算機上事先安裝好ODBC驅動程序,然后通過JDBC-ODBCBridge的轉換,把Java程序中使用的JDBCAPI轉換成ODBCAPI,進而通過ODBC來存取數(shù)據(jù)庫。
類型2:JDBC-NativeAPIBridge。同類型1一樣,這類驅動程序也必須在我們的計算機上先安裝好特定的驅動程序(類似ODBC),然后通過JDBC-NativeAPIBridge的轉換,把Java程序中使用的JDBCAPI轉換成NativeAPI,進而存取數(shù)據(jù)庫。
類型3:JDBC-Middleware。使用這類驅動程序時不需要在我們的計算機上安裝任何附加軟件,但是必須在安裝數(shù)據(jù)庫管理系統(tǒng)的服務器端加裝中介軟件(Middleware),這個中介軟件會負責所有存取數(shù)據(jù)庫時必要的轉換。
類型4:PureJDBCDriver。使用這類驅動程序時無需安裝任何附加的軟件(無論是我們的計算機或是數(shù)據(jù)庫服務器端),所有存取數(shù)據(jù)庫的操作都直接由JDBC驅動程序來完成。由以上的簡單陳述我們可以知道,最佳的JDBC驅動程序類型是類型4。因為使用類型4的JDBC驅動程序不會增加任何額外的負擔,而且類型4的JDBC驅動程序是由純Java語言開發(fā)而成的,因此擁有最佳的兼容性。使用類型3的JDBC驅動程序也是不錯的選擇,因為類型3的JDBC驅動程序也是由純Java語言開發(fā)而成的,并且中介軟件也僅需要在服務器上安裝,因此很適合用做Internet的應用。因此,我們建議最好以類型3和類型4的JDBC驅動程序為主要選擇,類型1和類型2的JDBC驅動程序為次要的選擇。7.2.3JDBC編程要點
在JSP中使用數(shù)據(jù)庫進行JDBC編程時,JSP程序中通常應包含下述幾部分內(nèi)容:
(1)導入JDBC標準類庫。JDBC是一種可用于執(zhí)行SQL語句的應用程序接口。為了將服務器從客戶端接收的信息存入數(shù)據(jù)庫,需要使用JDBC標準類庫。所以,可在程序的首部通過page指令的import屬性將java.sql包引入程序:
<%@pageimport="java.sql.*"%>
(2)注冊數(shù)據(jù)庫驅動程序。使用Class.forName()方法加載相應數(shù)據(jù)庫的JDBC驅動程序。Class.forName()方法是Java的Class類的靜態(tài)方法,它將使Java虛擬機動態(tài)地尋找、載入并連接指定的類。如果該類無法找到,則拋出ClaaNotFoundException類的異常。
(3)建立與數(shù)據(jù)庫的連接。該連接可以分兩部進行,其格式為
①
Stringurl=jdbc:<JDBC驅動程序名>:<數(shù)據(jù)源標記>;
②
Connectionstmt=DriverManager.getConnection(url);
一個JDBC的數(shù)據(jù)庫連接是用數(shù)據(jù)庫url來標記的。連接將告訴驅動程序管理器使用哪個驅動程序和連接哪個數(shù)據(jù)源。stmt表示通過DriverManager類的靜態(tài)方法getConnection()建立的一個數(shù)據(jù)庫連接對象。
(4)使用SQL語句對這個數(shù)據(jù)庫對象進行操作。
(5)使用close()方法解除JSP與數(shù)據(jù)庫的連接并關閉數(shù)據(jù)庫。7.2.4常用的JDBC類與方法
JDBCAPI提供的類和接口在java.sql包中定義。JDBCAPI所包含的類和接口非常多,這里我們只介紹幾個常用類及它們的成員方法。
1.?DriverManage類
java.sql.DriverManager類是JDBC的管理器,負責管理JDBC驅動程序,跟蹤可用的驅動程序并在數(shù)據(jù)庫和相應驅動程序之間建立連接。如果我們要使用JDBC驅動程序,必須加載JDBC驅動程序并向DriverManage注冊后才能使用。加載和注冊驅動程序可以使用Class.forName()方法來完成。此外,java.sql.DriverManager類還處理如驅動程序登錄時間限制及登錄和跟蹤消息的顯示等事務。java.sql.DriverManager類提供的常用成員方法如下。
(1)
publicstaticsynchronizedConnectiongetConnection(Stringurl)throwsSQLException方法。這個方法的作用是使用指定的數(shù)據(jù)庫URL創(chuàng)建一個連接,使DriverManager從注冊的JDBC驅動程序中選擇一個適當?shù)尿寗映绦颉H绻l(fā)生數(shù)據(jù)庫訪問錯誤,則程序拋出一個SQLException異常。
(2)
publicstaticsynchronizedConnectiongetConnection(Stringurl,Propertiesinfo)throwsSQLException方法。這個方法使用指定的數(shù)據(jù)庫URL和相關信息(用戶名、用戶密碼等屬性列表)來創(chuàng)建一個連接,使DriverManager從注冊的JDBC驅動程序中選擇一個適當?shù)尿寗映绦颉H绻l(fā)生數(shù)據(jù)庫訪問錯誤,則程序拋出一個SQLException異常。
(3)
publicstaticsynchronizedConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException方法。它使用指定的數(shù)據(jù)庫URL、用戶名和用戶密碼創(chuàng)建一個連接,使DriverManager從注冊的JDBC驅動程序中選擇一個適當?shù)尿寗映绦?。如果發(fā)生數(shù)據(jù)庫訪問錯誤,則程序拋出一個SQLException異常。
2.?Connection類
java.sql.Connection類負責建立與指定數(shù)據(jù)庫的連接。Connection類提供的常用成員方法如下。
(1)
publicStatementcreateStatement()throwsSQLException方法。該方法用來創(chuàng)建Statement類對象。
(2)
publicStatementcreateStatement(intresultSetType,intresultSetConcurrecy)throwsSQLException方法。用來按指定的參數(shù)創(chuàng)建Statement類對象。
(3)
publicDatabaseMetaDatagetMetaData()throwsSQLException方法。該方法用來創(chuàng)建DatabaseMetaData對象。不同數(shù)據(jù)庫系統(tǒng)擁有不同的特性,DatabaseMetaData類不但可以保存數(shù)據(jù)庫的所有特性,并且還提供一系列成員方法獲取數(shù)據(jù)庫的特性,如取得數(shù)據(jù)庫名稱、JDBC驅動程序名、版本代號及連接數(shù)據(jù)庫的JDBCURL。
(4)
publicPreparedStatementprepareStatement(Stringsql)throwsSQLException方法。該方法用來創(chuàng)建PreparedStatement類對象。關于該類對象的特性在后面介紹。
(5)?publicvoidcommit()throwsSQLException方法。用來提交對數(shù)據(jù)庫執(zhí)行添加、刪除或修改記錄(Record)的操作。
(6)?publicbooleanmit()throwsSQLException方法。該方法用來獲取Connection類對象的mit(自動提交)狀態(tài)。
(7)?publicvoidmit(booleanmit)throwsSQLException方法。該方法用來設定Connection類對象的mit(自動提交)狀態(tài)。如果將Connection類對象的mit設置為true,則它的每一個SQL語句將作為一個獨立的事務被執(zhí)行和提交。
(8)
publicvoidrollback()throwsSQLException方法。該方法用來取消對數(shù)據(jù)庫執(zhí)行過的添加、刪除或修改記錄(Record)等操作,將數(shù)據(jù)庫恢復到執(zhí)行這些操作前的狀態(tài)。
(9)
publicvoidclose()throwsSQLException方法。該方法用來斷開Connection類對象與數(shù)據(jù)庫的連接。
(10)
publicbooleanisClosed()throwsSQLException方法。該方法用來測試是否已關閉Connection類對象與數(shù)據(jù)庫的連接。
3.?Statement類
java.sql.Statement類的主要功能是將SQL命令傳送給數(shù)據(jù)庫,并將SQL命令的執(zhí)行結果返回。Statement類提供的常用成員方法如下。
(1)
publicResultSetexecuteQuery(Stringsql)throwsSQLException方法。該方法用來執(zhí)行指定的SQL查詢語句,返回查詢結果。如果發(fā)生數(shù)據(jù)庫訪問錯誤,則程序拋出一個SQLException異常。
(2)
publicintexecuteUPdate(Stringsql)throwsSQLException方法。該方法用來執(zhí)行SQL的insert、update和delete語句,返回值是插入、修改或刪除的記錄行數(shù)或者是0。如果發(fā)生數(shù)據(jù)庫訪問錯誤,則程序拋出一個SQLException異常。
(3)
publicbooleanexecute(String執(zhí)行指定的SQL語句sql)throwsSQLException方法。該方法用來,執(zhí)行結果有多種情況。如果執(zhí)行結果為一個結果集對象,則返回true,其它情況返回false。如果發(fā)生數(shù)據(jù)庫訪問錯誤,則程序拋出SQLException異常。
(4)
publicResultSetgetResultSet()throwsSQLException方法。該方法用來獲取ResultSet對象的當前結果集。對于每一個結果只調(diào)用一次。如果發(fā)生數(shù)據(jù)庫訪問錯誤,則程序拋出一個SQLException異常。
(5)
publicintgetUpdateCount()throwsSQLException方法。該方法用來獲取當前結果的更新記錄數(shù),如果結果是一個ResultSet對象或沒有更多的結果,則返回-1。對于每一個結果只調(diào)用一次。如果發(fā)生數(shù)據(jù)庫訪問錯誤,則程序拋出一個SQLException異常。
(6)
publicvoidclearWarnings()throwsSQLException方法。該方法用來清除Statement對象產(chǎn)生的所有警告信息。如果發(fā)生數(shù)據(jù)庫訪問錯誤,則程序拋出一個SQLException異常。
(7)
publicvoidclose()throwsSQLException方法。該方法用來釋放Statement對象的數(shù)據(jù)庫和JDBC資源。如果發(fā)生數(shù)據(jù)庫訪問錯誤,則程序拋出一個SQLException異常。
4.?PreparedStatement類
java.sql.PreparedStatement類的對象可以代表一個預編譯的SQL語句,它是Statement接口的子接口。由于PreparedStatement類會將傳入的SQL命令編譯并暫存在內(nèi)存中,所以當某一SQL命令在程序中被多次執(zhí)行時,使用PreparedStatement類的對象執(zhí)行速度要快于Statement類的對象。因此,將需要多次執(zhí)行的SQL語句創(chuàng)建為PreparedStatement對象,可以提高效率。
PreparedStatement對象繼承Statement對象的所有功能,另外還添加一些特定的方法。PreparedStatement類提供的常用成員方法如下。
(1)
publicResultSetexecuteQuery()throwsSQLException方法。該方法使用SQL指令select對數(shù)據(jù)庫進行記錄查詢操作,并返回ResultSet對象。
(2)
publicintexecuteUpdate()throwsSQLException方法。該方法使用SQL指令insert、delete和update對數(shù)據(jù)庫進行添加、刪除和修改記錄(Record)操作。
(3)
publicvoidsetDate(intparameterIndex,Datex)throwsSQLException方法。該方法用來給指定位置的參數(shù)設定日期型數(shù)值。
(4)
publicvoidsetTime(intparameterlndex,Timex)throwsSQLException方法。該方法用來給指定位置的參數(shù)設定時間型數(shù)值。
(5)
publicvoidsetDouble(intparameterIndex,doublex)throwsSQLException方法。該方法用來給指定位置的參數(shù)設定Double型數(shù)值。
(6)
publicvoidsetFloat(intparameterIndex,floatx)throwsSQLException方法。該方法用來給指定位置的參數(shù)設定浮點型數(shù)值。
(7)
publicvoidsetInt(intparameterIndex,intx)throwsSQLException方法。該方法用來給指定位置的參數(shù)設定整數(shù)型數(shù)值。
(8)
publicvoidsetNull(intparameterIndex,intsqlType)throwsSQLException方法。該方法用來給指定位置的參數(shù)設定Null型數(shù)值。
5.?ResultSet類
java.sql.ResultSet類表示從數(shù)據(jù)庫中返回的結果集。當我們使用Statement和PreparedStatement類提供的executeQuery()方法來下達select指令以查詢數(shù)據(jù)庫時,executeQuery()方法將會把數(shù)據(jù)庫響應的查詢結果存放在ResultSet類對象中供我們使用。ResultSet類提供的常用成員方法如表7.1所示。
表7.1ResultSet類常用成員方法
7.3.1創(chuàng)建數(shù)據(jù)庫及表
為了配制JSP與MSAccess、MSSQLServer、MYSQL及Oracle的數(shù)據(jù)庫連接,首先創(chuàng)建這四種數(shù)據(jù)庫:MSAccess數(shù)據(jù)庫TestDB.mdb;MSSQLServer數(shù)據(jù)庫MSSQLTestDB;MYSQL數(shù)據(jù)庫MYSQLTestDB;Oracle數(shù)據(jù)庫OracleTestDB,并在這四種數(shù)據(jù)庫中創(chuàng)建如表7.2所示的student表。7.3在JSP中使用JDBC連接數(shù)據(jù)庫
表7.2學
生
成
績
表7.3.2建立JSP與MSAccess數(shù)據(jù)庫的連接
通過下述步驟建立JSP與MSAccess數(shù)據(jù)庫的連接并配置數(shù)據(jù)庫。
(1)在Windows的“控制面板”對話框中,單擊“性能和維護”選項。在彈出的“性能和維護”對話框中,單擊“管理工具”選項,在彈出的“管理工具”對話框中找到“ODBC數(shù)據(jù)源”圖標并雙擊之,彈出如圖7.3所示的“ODBC數(shù)據(jù)源管理器”對話框。
圖7.3“ODBC數(shù)據(jù)源管理器”對話框
(2)在“用戶DSN”選項卡的“用戶數(shù)據(jù)源”列表中選中“MSAccessDatebase”選項,然后單擊“添加”按鈕,彈出如圖7.4所示的“創(chuàng)建新數(shù)據(jù)源”對話框。
(3)在圖7.4中,選中“MicrosoftAccessDriver”項,然后單擊“完成”按鈕,彈出如圖7.5所示的“ODBCMicrosoftAccess安裝”對話框。在此對話框中,輸入數(shù)據(jù)源名稱后,單擊“選擇”按鈕,進而指明數(shù)據(jù)庫的存放路徑。
圖7.4“創(chuàng)建新數(shù)據(jù)源”對話框
圖7.5“ODBCMicrosoftAccess”安裝對話框
(4)在圖7.6中單擊“選擇”按鈕后,在出現(xiàn)的對話框中選擇路徑和數(shù)據(jù)庫名。本章的數(shù)據(jù)庫是建立在f:\xiti\ch7下,數(shù)據(jù)庫名為TestDB.mdb。最后單擊“確定”按鈕,返回“ODBCMicrosoftAccess安裝”對話框。
圖7.6新數(shù)據(jù)庫對話框
(5)在“ODBCMicrosoftAccess安裝”對話框中單擊“確定”按鈕,返回“ODBC數(shù)據(jù)源管理器”對話框,新添加的用戶數(shù)據(jù)源將出現(xiàn)在此對話框中,如圖7.7所示。此時,單擊“確定”按鈕,新用戶數(shù)據(jù)源創(chuàng)建完成。
創(chuàng)建好用戶數(shù)據(jù)源后,便可以對這個數(shù)據(jù)源進行數(shù)據(jù)表的創(chuàng)建和修改,記錄的添加、修改和刪除等數(shù)據(jù)庫操作。
圖7.7安裝完成后的“ODBC數(shù)據(jù)源管理器”對話框7.3.3JSP訪問MSAccess數(shù)據(jù)庫應用實例
在Eclipse中文加強版平臺建立示例程序Access.jsp,如圖7.8所示。其建立過程與第3章的c3_1.jsp相同。程序如下。
【示例程序Access.jsp】建立JSP與MSAccess數(shù)據(jù)庫TestDB.mdb的連接,訪問student表,顯示表中的所有記錄。
圖7.8Access.jsp程序
<%@pagelanguage="java"import="java.sql.*"contentType="text/html;charset=GBK"%>
<HTML><HEAD>
<metahttp-equiv="Content-Type"content="text/html;charset=GBK">
<TITLE>Access數(shù)據(jù)庫</TITLE>
</HEAD><BODY>
從Acccse數(shù)據(jù)庫讀取表數(shù)據(jù):<HR>
<TABLEborder=1><TR><TD>學號</TD><TD>姓名</TD><TD>成績</TD></TR>
<%
StringdriverName="sun.jdbc.odbc.JdbcOdbcDriver";//定義JDBC-ODBC驅動程序對象
StringdbName="TestDB"; //定義數(shù)據(jù)庫名
StringtableName="student"; //定義數(shù)據(jù)庫中的表名
StringuserName=""; //定義數(shù)據(jù)庫用戶名
StringuserPasswd=""; //定義數(shù)據(jù)庫存取密碼
StringconURL="jdbc:odbc:"+dbName; //定義JDBC的URL對象
Stringsql="SELECT*FROM"+tableName; //定義SQL語言對象
Class.forName(driverName); //加載JDBC-ODBC驅動程序
//下面的語句創(chuàng)建了一個Connection類的對象con,并建立了與數(shù)據(jù)庫的連接
Connectioncon=DriverManager.getConnection(conURL,userName,userPasswd);
Statements=con.createStatement(); //定義查詢數(shù)據(jù)庫的對象
ResultSetrs=s.executeQuery(sql); //執(zhí)行查詢,得到查詢student表的結果集
while(rs.next())
{//輸出每一個字段的值
out.println("<TR>");
out.println("<TD>"+rs.getString("id")+"</TD>");
out.println("<TD>"+rs.getString("name")+"</TD>");
out.println("<TD>"+rs.getInt("score")+"</TD>");
out.println("</TR>");
}
rs.close();
s.close(); //釋放Statement所連接的數(shù)據(jù)庫及JDBC資源
con.close(); //關閉與數(shù)據(jù)庫的連接
%>
</TABLE>
</BODY></HTML>
該示例程序的運行結果如圖7.9所示。
圖7.9程序Access.jsp的運行結果7.3.4JSP連接MSSQLServer數(shù)據(jù)庫
通過下述步驟建立JSP與MSSQLServer數(shù)據(jù)庫的連接并配置數(shù)據(jù)庫。
(1)在Windows的“控制面板”對話框中,單擊“性能和維護”選項。在彈出的“性能和維護”對話框中,單擊“管理工具”選項,在彈出的“管理工具”對話框中,找到“ODBC數(shù)據(jù)源”圖標并雙擊之,彈出如圖7.10所示的“ODBC數(shù)據(jù)源管理器”對話框。
圖7.10“ODBC數(shù)據(jù)源管理器”對話框
(2)在“用戶DSN”選項卡的“用戶數(shù)據(jù)源”列表中,單擊“添加”按鈕,彈出如圖7.11所示的“創(chuàng)建新數(shù)據(jù)源”對話框。
(3)在圖7.11中,選中“SQLServer”項,然后單擊“完成”按鈕,彈出如圖7.12所示的“創(chuàng)建到SQLServer的新數(shù)據(jù)源”對話框。在此對話框中,輸入數(shù)據(jù)源名稱MSSQLTestDB,輸入服務器的名稱zby,單擊“下一步”按鈕,彈出如圖7.13所示的“創(chuàng)建到SQLServer的新數(shù)據(jù)源”對話框。
圖7.11“創(chuàng)建新數(shù)據(jù)源”對話框
圖7.12ODBCMicrosoftAccess安裝對話框
圖7.13新數(shù)據(jù)庫對話框
(4)在圖7.13所示的“創(chuàng)建到SQLServer的新數(shù)據(jù)源”對話框中選擇“使用用戶輸入登錄ID和密碼的SQLServer的驗證”,輸入登錄標識為sa(不需要密碼)。然后單擊“下一步”按鈕,彈出如圖7.14所示的“創(chuàng)建到SQLServer的新數(shù)據(jù)源”對話框。
圖7.14安裝完成后的“ODBC數(shù)據(jù)源管理器”對話框
(5)在圖7.14所示的“創(chuàng)建到SQLServer的新數(shù)據(jù)源”對話框中單擊“下一步”按鈕,彈出如圖7.15所示的“創(chuàng)建到SQLServer的新數(shù)據(jù)源”對話框。
(6)在圖7.15所示的“創(chuàng)建到SQLServer的新數(shù)據(jù)源”對話框中單擊“完成”按鈕,彈出如圖7.16所示的“ODBCMicrosoftSQLServer安裝”對話框。
圖7.15新數(shù)據(jù)庫對話框
圖7.16“ODBCMicrosoftSQLServer安裝”對話框
(7)在圖7.16所示的“ODBCMicrosoftSQLServer安裝”對話框中單擊“測試數(shù)據(jù)源”按鈕。如果設置正確就會出現(xiàn)數(shù)據(jù)源測試成功的窗口,如圖7.17所示。在圖7.17中單擊“確定”按鈕,返回圖7.16,在圖7.16中單擊“確定”按鈕,彈出如圖7.18所示的“ODBC數(shù)據(jù)源管理器”對話框。
圖7.17“SQLServerODBC數(shù)據(jù)測試”對話框
圖7.18安裝完成后的“ODBC數(shù)據(jù)源管理器”對話框
(8)在圖7.18所示的“ODBC數(shù)據(jù)源管理器”對話框中,我們可以看到已創(chuàng)建好的數(shù)據(jù)源(MSSQLTestDB),單擊選中后按“確定”按鈕,完成操作。
創(chuàng)建好用戶數(shù)據(jù)源后,便可以對這個數(shù)據(jù)源進行數(shù)據(jù)表的創(chuàng)建和修改,記錄的添加、修改和刪除等數(shù)據(jù)庫操作。7.3.5JSP訪問MSSQLServer數(shù)據(jù)庫應用實例
【示例程序SQLServer.jsp】建立JSP與MSSQL數(shù)據(jù)庫MSSQLTestDB.mdb的連接,查詢student表,顯示表中的所有記錄。
<%@pagecontentType="text/html;charset=gb2312"import="java.sql.*"%>
<HTML>
<BODY>
利用JDBC-ODBC橋從SQLServer數(shù)據(jù)庫中讀取數(shù)據(jù):<HR>
<TABLEborder=1>
<TR><TD>學號</TD><TD>姓名</TD><TD>成績</TD></TR>
<%
StringdriverName="sun.jdbc.odbc.JdbcOdbcDriver"; //定義JDBC-ODBC驅動程序對象
StringuserName="sa"; //定義數(shù)據(jù)庫用戶名
StringuserPasswd=""; //定義數(shù)據(jù)庫存取密碼
StringdbName="MSSQLTestDB"; //定義數(shù)據(jù)庫名
StringtableName="student"; //定義數(shù)據(jù)庫中的表名
//定義數(shù)據(jù)庫的連接對象
Stringconurl=“jdbc:odbc:”+dbName; //定義JDBC的URL對象
Class.forName(driverName); //加載JDBC驅動程序
Connectioncon=DriverManager.getConnection(conurl,userName,userPasswd);//連接數(shù)據(jù)庫
Statements=con.createStatement(); //定義查詢數(shù)據(jù)庫的對象
Stringsql="SELECT*FROM"+tableName; //定義SQL語言對象
ResultSetrs=s.executeQuery(sql); //得到student表查詢的結果集
while(rs.next()) //一次循環(huán)輸出一條記錄
{ //輸出每一個字段的值
out.println("<TR>");
out.println("<TD>"+rs.getString("id")+"</TD>");
out.println("<TD>"+rs.getString("name")+"</TD>");
out.println("<TD>"+rs.getInt("score")+"</TD>");
out.println("</TR>");
}
rs.close();
s.close(); //釋放Statement所連接的數(shù)據(jù)庫及JDBC資源
con.close(); //關閉與數(shù)據(jù)庫的連接
圖7.19程序SQLServer.jsp的運行結果
%>
</TABLE>
</BODY>
</HTML>
該示例程序的運行結果如圖7.19所示。7.3.6向MSAccess數(shù)據(jù)庫中添加記錄
前面介紹了使用JSP連接數(shù)據(jù)庫、查詢數(shù)據(jù)庫中數(shù)據(jù)的方法。下面再給出一個例子,以說明向數(shù)據(jù)庫中添加記錄、修改記錄的方法。
【示例程序AddSQL.jsp】建立JSP與MSAccess數(shù)據(jù)庫TestDB.mdb的連接,在這個表中插入一條新記錄,修改一條記錄。
<%@pagecontentType="text/html;charset=GBK"language="java"import="java.sql.*"%>
<html><head>
<metahttp-equiv="Content-Type"content="text/html;charset=GBK">
<title>數(shù)據(jù)庫操作</title>
</head>
<body>
<H3>從數(shù)據(jù)庫讀取表數(shù)據(jù)</H3><hr>
<tableborder=1>
<tr><td>學號</td><td>姓名</td><td>成績</td></tr>
<%
StringdriverName="sun.jdbc.odbc.JdbcOdbcDriver"; //定義JDBC-ODBC驅動程序對象
StringdbName="TestDB"; //定義數(shù)據(jù)庫名
StringtableName="student"; //定義數(shù)據(jù)庫中的表名
StringuserName=""; //定義數(shù)據(jù)庫用戶名
StringuserPasswd=""; //定義數(shù)據(jù)庫存取密碼
StringconURL="jdbc:odbc:"+dbName; //定義JDBC的URL對象
Stringsql=“SELECT*FROM”+tableName; //定義SQL語言對象
Class.forName(driverName); //加載JDBC-ODBC驅動程序
Connectioncon=DriverManager.getConnection(conURL,userName,userPasswd);//連接數(shù)據(jù)庫
Statements=con.createStatement(); //定義查詢數(shù)據(jù)庫的對象
ResultSetrs=s.executeQuery(sql); //得到student表查詢的結果集
while(rs.next())
{
out.println("<tr>");
out.println("<td>"+rs.getString("id")+"</td>");
out.println("<td>"+rs.getString("name")+"</td>");
out.println("<td>"+rs.getInt("score")+"</td>");
out.println("</tr>");
}
rs.close();
%>
</table>
<%
//向數(shù)據(jù)庫插入記錄
PreparedStatementps=con.prepareStatement("inser
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學年海興縣三下數(shù)學期末達標檢測試題含解析
- 深圳大學《面向對象的系統(tǒng)分析與設計》2023-2024學年第二學期期末試卷
- 2025福建福州左臺置業(yè)有限公司項目建設合同制人員招聘33人筆試參考題庫附帶答案詳解
- 湖北文理學院理工學院《信息檢索與論文寫作》2023-2024學年第二學期期末試卷
- 徐州幼兒師范高等??茖W校《攝像實務》2023-2024學年第二學期期末試卷
- 沈陽城市建設學院《歷史學課程教學論》2023-2024學年第二學期期末試卷
- 蘭州工商學院《計算機組成實驗》2023-2024學年第二學期期末試卷
- 萍鄉(xiāng)衛(wèi)生職業(yè)學院《建筑師執(zhí)業(yè)知識與設計管理》2023-2024學年第二學期期末試卷
- 海南政法職業(yè)學院《電子技術》2023-2024學年第二學期期末試卷
- 伊犁師范大學《綠色制造技術(雙語)》2023-2024學年第二學期期末試卷
- 路橋公司考試題目答案解析
- 精致的八寶飯
- 高速公路綠化工程施工
- 多動癥兒童養(yǎng)育六步法:給家長的自助指南
- 范可尼貧血病癥演示稿件
- 智能制造在食品加工業(yè)中的應用與發(fā)展
- 文本排版習題
- 醫(yī)院預算執(zhí)行情況分析報告
- 年終存貨盤點管理制度
- 化工公司原址污染場地污染土壤治理修復方案
- 法蘭標準尺寸表(美標、日標、德標)
評論
0/150
提交評論