教學材料《JSP設計與開發》-第5章_第1頁
教學材料《JSP設計與開發》-第5章_第2頁
教學材料《JSP設計與開發》-第5章_第3頁
教學材料《JSP設計與開發》-第5章_第4頁
教學材料《JSP設計與開發》-第5章_第5頁
已閱讀5頁,還剩91頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

學習要點JDBC的工作原理及接口類型JDBC連接數據庫JDBC訪問數據庫返回5.1

JDBC概述5.1.1

什么是JDBCJDBC是Java的開發者—Sun的Javasoft公司制定的Java數據庫連接(JavaDataBase

Connectivity)技術的簡稱,是Java語言訪問數據庫的一個規范,本質上是一個面向對象的JavaAPI(ApplicationProgrammingInterface應用程序接口),為各種常用數據庫提供無縫連接。JDBC對應用開發人員、數據庫前臺工具開發人員而言是API,使開發人員可以用純Java語言編寫完整的數據庫應用程序,降低了開發人員的工作量;同時它為數據庫廠商及第三方中間件廠商實現與數據庫的連接提供了一個標準體系結構,讓廠商可以為自己的數據庫產品提供JDBC驅動程序,從而提高了Java程序訪問數據庫的效率。下一頁返回5.1

JDBC概述JDBC的主要功能包括以下幾點。(1)與數據庫建立連接。(2)發送SQL語句。(3)處理數據庫返回結果。JDBC在Web和Internet應用程序中的作用和ODBC在Windows系列平臺應用程序中的作用類似。使用JDBC可以很容易地把SQL語句傳送到任何關系型數據庫中。換而言之,用戶不需要為每一個關系數據庫單獨寫一個程序,用JDBCAPI寫出唯一的程序,便能將SQL語句發送到相應的任何一種數據庫。程序員編程時,可以不關心它所要操作的數據庫是哪個廠家的產品,從而提高廠軟件的通用性。只要系統上一頁下一頁返回5.1

JDBC概述上安裝廠正確的驅動器組,JDBC應用程序就可以訪問其相關的數據庫。JDBC與Java語言的結合使程序員不必為不同的平臺編寫不同的應用程序,只需寫一遍程序就可以讓它在任何平臺上運行。由于Java語言具有健壯性、安全、易使用、易理解和自動下載到網絡等優點,因此,它是數據庫應用的一個極好的基礎語言。現在需要找到一種能使Java應用與各種不同數據庫對話的方式,而JDBC正是實現這種對話的一種機制。上一頁下一頁返回5.1

JDBC概述5.1.2JDBC的體系結構使用JDBC來完成對數據庫的訪問包括以下四個主要組件:Java的應用程序、JDBC驅動器管理器、JDBC驅動程序和數據源。而JDBC的結構大致可分為JDBCAPI,JDBC驅動管理者和JDBC驅動程序3個部分,如圖5-1所示各部分的功能說明如下。(1)應用程序:用于發送或者接收數據。(2)JDBCAPI:屏蔽不同的數據庫驅動程序之間的差別,提供一個標準的、純Java的數據庫程序設計接口,為在Java中訪問任意類型的數據庫提供技術支持。(3)JDBC驅動程序管理器:為應用程序裝載數據庫驅動程序。

上一頁下一頁返回5.1

JDBC概述(4)JDBC驅動程序:提供數據源和應用程序之間的接口,與具體的數據庫相關,用于向數據庫提交SQL請求。(5)數據源:與SQL兼容的數據庫。綜上所述,應用程序只需調用JDBCAPI,而由JDBC實現層(即JDBC驅動程序)去處理與數據庫的通信,從而讓應用程序不再受限于具體的數據庫產品。如果想通過JDBC去連接某個特定的數據庫系統,只需使用專門為這種數據庫系統開發的JDBC驅動程序,而這些相關的JDBC驅動程序可以到各大數據庫廠商的官方網站上進行下載。上一頁下一頁返回5.1

JDBC概述5.1.3JDBC驅動程序所謂JDBC驅動程序,就是各個數據庫廠商根據JDBC規范開發的JDBC實現類,日前比較常見的JDBC驅動程序可分為以下4種類型1JDBC-ODBC橋JDBC-ODBC橋實質上就是利用ODBC驅動程序提供JDBC訪問。因為微軟推出的ODBC比JDBC出現的時間早,且應用廣泛,支持絕大多數的數據庫,當SUN公司推出JDBC時,為廠支持更多的數據庫,Intersolv和JavaSoft聯合開發JDBC-ODBC橋。這種類型的驅動實際是把所有JDBC的調用傳遞給ODBC,再由ODBC調用本地數據庫驅動代碼。但由于JDBC-ODBC先調用ODBC,再由ODBC去調用本地數據庫接口訪問數據庫,需要經過多層調用,所以執行效率比上一頁下一頁返回5.1

JDBC概述較低,對于那些大數據量存取的應用是不適合的。而且這種方法要求客戶端必須安裝ODBC驅動,所以對于基于Internet,Intranet的應用是不現實的。日前,JDBC-ODBC橋應被看成是一種過渡性解決方案,不過,在數據庫沒有提供JDBC驅動,只有ODBC驅動的情況下,也只能采用JDBC-ODBC橋的方式訪問數據庫。例如,對微軟的Access數據庫操作時,就只能用JDBC-ODBC橋來訪問了。2.JDBC本地API橋大部分數據庫廠商提供與他們的數據庫產品進行通信所需要的API,這些API往往用C語言編寫,依賴于具體的平臺,本地API橋通過JDBC驅動程序將應用程序中的調用請求轉化為本地API調用,由本地API與數據庫通信,數據庫處理完請求將結果通過本地API返回,上一頁下一頁返回5.1

JDBC概述進而返回給JDBC驅動程序,JDBC驅動程序將返回的結果轉化為JDBC標準形式,再返回給客戶程序。3.JDBC網絡純Java驅動程序JDBC先把對數局庫的訪問請求傳遞給網絡上的中間件服務器,中間件服務器再把請求翻譯為符合數據庫規范的調用,再把這種調用傳給數據庫服務器。由于大部分功能實現都在服務器端,所以這種驅動可以設計得很小,可以非常快速地加載到內存中。但是,這種驅動在中間件層仍然需要配置其他數據庫驅動程序。上一頁下一頁返回5.1

JDBC概述4.本地協議純Java驅動程序這種類型的驅動程序將JDBC調用直接轉換為DBMS所使用的網絡協議。這種驅動與數據庫建立直接的套接字連接,采用具體數據庫廠商的網絡協議把JDBCAPI調用轉換為直接網絡調用,也就是允許從客戶機機器上直接調用DBMS服務器,是Intranet訪問的一個很實用的解決方法。由于這種類型的驅動程序可以直接和數據庫服務器通信,且完全由Java實現,因此實現了平臺獨立性。在以上4種類型的驅動程序中,后面兩種類型更為常用,且效率較高,前面兩種日前作為過渡方案在使用,效率較低。上一頁返回5.2

JDBCAPI簡介5.2.1

什么是JDBCAPIJDBC的核心是為用戶提供JavaAPI類庫,讓用戶能夠創建數據庫連接、執行SQL語句、檢索結果集、訪問數據庫元數據。JDBCAPI實質上就是為Java語言訪問數據設計的一組應用程序接口,由一組用Java語言編寫的類和接口組成,可以為多種關系數據庫提供統一訪問,如Sybase,Oracle,SqlServer。JDBCAPI包含在JDK中,被分散存人了兩個包:java.sql和javax.Sql。(1)java.sql:用來連接數據源的類和接口,處理將數據提取到結果集中的SQL語句,插入、更新或刪除數據,執行存儲過程。(2)javax.sql:用于像連接池和分布式事務這類的高級服務器端處理特性的類和接口。下一頁返回5.2

JDBCAPI簡介根據JDBCAPI對于程序開發人員和數據庫廠商的不同意義,可以把JDBCAPI接口分為兩個層次:一個是面向程序開發人員的JDBCAPI;另一個是底層的JDBCDriverAPI。①面向Java程序員的JDBCAPI:Java程序員通過調用此API從而實現連接數據庫、執行SQL語句并返回結果集等編程數據庫的能力。②面向數據庫廠商的JDBCDriveAPI:數據庫廠商必須提供相應的驅動程序并實現JD-BCAPI所要求的基本接口(每個數據庫系統廠商必須提供對DriveManager,Connection,Statement,ResultSet等接口的具體實現),從而最終保證Java程序員通過JDBC實現對不同的數據庫操作。JDBCAPI中定義的類和接口比較多,下面列出廠一些常用的類與接口。上一頁下一頁返回5.2

JDBCAPI簡介(1)java.sql.DrivcrManagcr:用于跟蹤JDBC驅動程序,其主要功能是使用其getConnection()方法來取得一個與數據庫的連接。(2)java.sql.Driver:該接口代表JDBC驅動程序。這個接口由數據庫的廠商實現,如oracle.jdbc.OraclcDriver類是(Oracle數據庫提供的該接口的一個實現。

(3)java.sql.Connection;該接口代表與數據庫的連接,它通過DriverManager.getConnection(

)方法來獲得。該接口提供了創建SQL語句的方法,以完成SQL操作。SQL語句只能在Connection提供的環境內部執行。上一頁下一頁返回5.2

JDBCAPI簡介(4)java.sql.Statetnent:該接口提供了在給定數據庫連接的環境中執行SQL語句的方法。該接口的子接口java.sql.PreparedStstement可以執行預先解析過的SQL語句;該接口的另外一個子接口java.sql.CallableStatement可以執行數據庫的存儲過程。(5)java.sql.ResultSet:這個接口保存廠執行數據庫查詢語句后所產生的結果集,可以通過它提供的next(

)或absolute()等方法定位到結果的某行。(6)java.sql.SQLException:這是一個異常類,它提供r對數據庫操作錯誤時的信息。這些接口和類的具體用法會在后面章節中進行介紹。上一頁下一頁返回5.2

JDBCAPI簡介5.2.2JDBCAPI的接口Java接口實際上是常量和方法的集合。通過接口機制可以使不同層次、甚至互不相關的類具有相同的行為。接口機制具有比多重繼承更簡單、更靈活的特點,并且具有更強的功能。與類不同的是一個接口可以有多個父接口,用逗號隔開;而一個類只能有一個父類,子接口繼承父接口中所有的常量和方法。Java接口主要作用如下。①通過接口可以實現不相關類的相同行為,而不需要考慮這些類之間的層次關系。②通過接口可以指明多個類需要實現的方法。③通過接口可以廠解對象的交互界面,而不需要廠解對象所對應的類。上一頁下一頁返回5.2

JDBCAPI簡介1.java.sql.Driver接口Driver接口是每個驅動程序類必須實現的接口。每種數據庫的驅動程序都應該提供一個實現java.sql.Driver接口的類,簡稱Driver類,在加載某一驅動程序的Driver類時,應該創建自己的實例并向java.sql.DriverManager類注冊該實例。當創建一個連接時DriverManager驅動程序管理器將試圖使用所能找到的驅動程序建立與URL統一資源定位器的連接。Driver接口的常用方法見表5-1。2.java.sql.Connection接口Connection接口用來與特定數據源建立連接,是進行其他數據庫訪問操作的前提。只有在成功建立連接的前提下,SQL語句才可能被傳遞到數據庫,最終被執行并返回結果。Connection接口的常用方法見表5-2。上一頁下一頁返回5.2

JDBCAPI簡介3.java.sql.Statement接口Statement接口用于在已經建立的連接的基礎上向數據庫發送SQL語句并返回結果。實際上有3種Statement對象:Statement,PreparedStatement(繼承自Statement)和CallableState

ment(繼承自PreparedStatement)。

它們都作為在給定連接上執行SQL語句的容器,每個都專用于發送特定類型的SQL語句:Statement對象用于執行不帶參數的簡單SQL語句;PreparedStatement對象用于執行帶或不帶IN參數的預編譯SQL語句;CallableStatement對象用于執行對數據庫已存儲過程的調用。Statement接口提供了執行語句和獲取結果的基本方法;PreparedStatement接口添加廠處理IN參數的方法;而Statement添加了處理OUT參數的方法)Statement接口的常用方法見表5-3。上一頁下一頁返回5.2

JDBCAPI簡介4.java.sql.PreparedStstement接口PreparedStstement接口繼承了Ststement接口,但PreparedStstement語句中包含了經過預編譯的SQL語句,因此可以獲得更高的執行效率。此外,PreparedStstement與Ststement不同之處在于它構造的SQL語句不是完整的語句,而需要在程序中進行動態設置,在PreparedStstement語句中可以包含多個用“?”代表的字段,在程序中可以利用setXXX方法設置該字段的內容,從而增強了程序設計的動態性及程序設計的靈活性。所以對于某些使用頻繁的SQL語句,用PreparedStstement語句比用Ststement具有明顯的優勢。PreparedStstement接口的常用方法見表5-4。上一頁下一頁返回5.2

JDBCAPI簡介5.java.sql.CallableStatemet接口CallableStatemet接口繼承并擴展了PreparedStatement接口,用于執行數據庫中的SQL存儲過程。CallableStatemet接口是PreparedStatement類的子類,存放在java.sql包中用Connection接口的prepareCall方法創建。在使用該接口時可以通過PreparedStatement接口的setXXX方法來設置存儲過程需要的IN參數,存儲過程中的OUT參數可以使用CallableStatemet接口中的getXXX方法來獲取,其值在存儲過程中的IN或OUT參數按其出現的先后排序從1開始。CallableStatemet可以返回一個或多個ResultSet實例。處理多個ResultSet對象的方法是從Statement中繼承來的。ResultSet接口的常用方法見表5-5。上一頁下一頁返回5.2

JDBCAPI簡介6.java.sql.ResultSet接口ResultSet接口提供訪問ResultSet(結果集)的方法,可以使用ResultSet接口中的方法來獲得結果集中的內容,它不僅提供了一套get方法對這些結果集中的數據進行訪問,還提供了很多移動指針(cursor,也譯為光標)的方法。ResultSet接口的常用方法見表5-6。上一頁下一頁返回5.2

JDBCAPI簡介5.2.3JDBCAPI的類JDBCAPI中定義的類比較多,下面只對JDBCAPI常用的兩個類進行介紹。1.java.sql.DriverManager類在DriverManager類中提供了用于管理JDBC驅動程序的方法,作用于用戶和驅動程序之間。它跟蹤可用的驅動程序,并在數據庫和相應驅動程序之間建立連接,另外,DriverManager類也處理諸如驅動程序登錄時間限制及登錄和跟蹤消息的顯示等事務。當DriverManager類進行初始化時,將使用系統的“jdbc.drivers”屬性,DriverManager類會裝載每一個找到的驅動類,可以在.hotjava\上一頁下一頁返回5.2

JDBCAPI簡介properties文件中設置jdbc.drives屬性和查找驅動類的路徑。在創建與數據庫的連接時,DriverManager類將從已裝載的驅動程序中選擇一個合適驅動程序用于建立連接。DriverManager類的常用方法見表5-7。2.java.sql.SQLException類SQLExccption類是java.lang.Exception類的子類。SQLExccption類提供處理訪問數據庫時的出錯信息。一般來說一個SQLException對象可以為用戶提供如下信息。

(1)錯誤描述字符串:該字符串作為JavaException消息,可以使用getMessage()方法來獲取這個錯誤消息。上一頁下一頁返回5.2

JDBCAPI簡介(2)SQLstate字符串:該字符串遵循XOPEN的SQLstate標準,在XOPEN的SQL標準中描述該字符串的值。可以使用getSQLState方法來獲取該字符串。(3)錯誤代碼:由數據庫廠商提供的錯誤代碼,是一個整數值,可以使用getErrorCode()方法來獲取該代碼。(4)與下一個錯誤的鏈接:有時程序運行過程中產生的錯誤不止一個。JDBC提供一個錯誤鏈接來保存所有產生的錯誤信息,可以使用getNextException()方法來獲取下一個保存錯誤信息的SQLException對象。SQLException類的常用方法見表5-8。上一頁返回5.3

連接數據庫5.3.1JDBC連接數據庫的一般過程創建一個以JDBC連接數據庫的程序,包含以下7個步驟。1.加載JDBC驅動程序在連接數據庫之前,首先要加載想要連接的數據庫的驅動到JVM(Java虛擬機),這通過java.lang.Class類的靜態方法forName(StringclassNatne)實現。成功加載后,會將Driver類的實例注冊到DriverManager類中。2.提供JDBC連接的URL連接URL定義了連接數據庫時的協議、子協議、數據源標識。語法格式:協議:子協議:數據源標識。下一頁返回5.3

連接數據庫具體說明如下。(1)協議:在JDBC中總是以jdbc開始。(2)子協議:是橋連接的驅動程序或是數據庫管理系統名稱。(3)數據源標識:標記找到數據庫來源的地址與連接端口。例如,SQLServer的連接URL如下所示。其中,localhost是數據庫服務器的IP地址,此處為本地地址;1433是數據庫的監聽端口,需要看安裝時的配置,默認為1433;ClassDB是數據庫的名字。3.創建數據庫的連接

上一頁下一頁返回5.3

連接數據庫要連接數據庫,需要向java.sql.DriverManager請求并獲得Connection對象,該對象就代表一個數據庫的連接。使用DriverManager的getConnectinn方法傳入指定的待連接的數據庫的路徑、數據庫的用戶名和密碼。4.創建一個Statement要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3種類型。(1)執行靜態SQL語句。一般通過Statement實例實現。(2)執行動態SQL語句。一般通過PreparedStatement實例實現。(3)執行數據庫存儲過程。一般通過CallableStatement實例實現。上一頁下一頁返回5.3

連接數據庫5.執行SQL語句Statement接口提供了3種執行SQL語句的方法。(1)ResultSetexecuteQuery(StringsqlString):執行查詢數據庫的SQL語句,返回一個結果集(ResultSet)對象。(2)intexecuteUpdate(StringsqlString):用于執行INSERT,UPDATE或DELETE語句以及SQLDDL語句,如CREATETABLE和DROPTABLE等。

(3)execute(sqlString):可以像executeQuery和executeUpdate一樣處理單個語句,還可以處理返回多個結果的預編譯語句。6.處理結果一般有以下兩種情況。上一頁下一頁返回5.3

連接數據庫

(1)執行更新,返回的是本次操作影響到的記錄數。(2)執行查詢,返回的結果是一個ResultSet對象。7.關閉JDBC對象操作完成以后要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲明順序相反:關閉記錄集

關閉聲明

關閉連接對象上一頁下一頁返回5.3

連接數據庫5.3.2

案例一:JDBC-ODBC橋連接數據庫

【案例功能】通過JDBC-ODBC橋接方式連接SQLServer數據庫。

【案例目標】掌握JDBC連接數據庫的一般過程,能運用JDBC-ODBC橋接方式連接數據庫。

【案例要點】JDBC-ODBC橋連接數據庫的實施過程。【案例步驟】(1)創建第5章源碼文件夾ch05。(2)先建立一個ODBC數據源ClassDB,該數據源的默認數據庫為ClassDB。具體過程如下。①選擇“開始”

“控制面板”

“管理工具”

“數據源”,打開“ODBC數據源管理器”,如圖5-2所示。

上一頁下一頁返回5.3

連接數據庫②打開“系統DSN”選項卡,單擊“添加”按鈕,彈出“創建新數據源”對話框,選擇驅動程序為SQLServer選項,單擊“完成”按鈕,如圖5-3所示。③彈出“創建到SQLServer的新數據源”對話框,在“名稱”文本框中輸入數據源的名稱ClassDB,“服務器”列表框中選擇要連接的數據庫服務器或直接輸入數據庫服務器的名稱,如圖5-4所示。④單擊“下一步”按鈕,使用默認設置即可,再單擊“下一步”按鈕,選中“更改默認的數據庫為”復選框,選擇數據庫為ClassDB,如圖5-5所示。上一頁下一頁返回5.3

連接數據庫⑤單擊“下一步”按鈕,使用默認設置即可,再單擊“完成”按鈕,完成配置,如圖5-6所示。⑥在彈出的對話框中,單擊“測試數據源”按鈕,對數據進行測試,測試成功后,單擊“確定”按鈕,完成測試,如圖5-7所示。(3)在ch05目錄下編寫test1.jsp源文件。【源碼】test1.jsp上一頁下一頁返回5.3

連接數據庫上一頁下一頁返回5.3

連接數據庫【代碼說明】①第1行:指明使用的編程語言為“Java”。②第2行:引入所有的SQL包。③第10行:加載SUN公司的JDBC-ODBC驅動程序。④第11-12行:構造一個連接對象,同時設置連接URL為“jdbc:odbc:ClassDB”,用戶名和密碼為“sa”(用戶名、密碼為登錄SQLServer時管理控制臺時的用戶名和密碼),使用DrivcrManager類的getConncction(

)方法建立與數據源ClassDB的連接。

上一頁下一頁返回⑤第13行:若數據庫連接成功,則顯示“JDBC-ODBC橋連接數據庫成功!”信息。⑥第14行:關閉數據庫連接。⑦第15-17行:連接過程中的異常處理。頁面運行效果如圖5-8所示。上一頁下一頁返回5.3

連接數據庫5.3.3

案例二:本地協議純Java驅動程序連接數據庫【案例功能】通過本地協議純Java驅動的方式連接SQLServer數據庫。

【案例目標】掌握JDBC連接數據庫的一般過程,能運用本地協議純Java驅動的方式連接后臺數據庫。

【案例要點】本地協議純Java驅動的方式連接數據庫的實施過程。【案例步驟】(1)到微軟的官方網站下載MSSQLServerforJDBC的本地協議驅動程序。上一頁下一頁返回5.3

連接數據庫(2)安裝該驅動程序。(3)設置環境變量,將驅動程序路徑加人CLASSPATH環境變量中。(4)在ch05目錄下編寫test2.jsp源文件。【源碼】

test2.jsp上一頁下一頁返回5.3

連接數據庫上一頁下一頁返回5.3

連接數據庫【代碼說明】①第1行:指明使用的編程語言為“java”。②第2行:引入所有的SQL包。③第1}行:加載SQLServer數據庫的本地協議純java驅動程序。④第11-15行:設置連接字符串、用戶名、密碼,構造一個連接對象,使用DrivcrManager類的getConnection()方法建立與數據源ClassDB的連接。⑤第16行:若數據庫連接成功,顯示“本地協議純Java驅動的方式連接數據庫成功!”。⑥第17行:關閉數據庫連接。⑦第18-20行:連接過程中的異常處理。頁面運行效果如圖5-9所示。上一頁返回5.4

訪問數據庫5.4.1

查詢數據庫在SQL中查詢是通過select語句來完成的,通常執行select查詢語句會返回一個ResultSet對象,使用該對象可將查詢結果輸出顯示給用戶。在JDBC中要執行查詢語句可以通過執行一般查詢、參數查詢和存儲過程3種方式,分別對應Statement,PrepareStatement和Callable-Statement對象。1.一般查詢一般查詢是沒有參數的,使用Statement對象實現。一般查詢的執行過程有以下幾步。1)創建Statement對象使用Connection接口的CreateStatement方法進行創建。下一頁返回5.4

訪問數據庫例如,Statementst=con.CreateStatement(

);2)選項設置建立一個Statement對象后,可以使用該對象的一些方法設置需要的選項,具體方法如表5-3所示。3)執行查詢語句執行SQL查詢語句可以使用Statement的executeQuery()和execute(

)方法,兩種方法的參數均為一個需要執行的select語句字符串。例如,ResultSetrs=st.executeQuery(“SELECT

*

FROMstudent”;該方法執行后將返回表student中的所有行,存放在ResultSet對象rs中。上一頁下一頁返回5.4

訪問數據庫說明:executeQuery()方法在一般情況下只能執行一個SQL查詢語句,并且只能返回一個結果集。而execute()方法可以返回多個結果集,返回值是一個布爾值,如果至少能夠返回一個ResultSet對象則其返回值為true,否則為false。執行execute()方法后,調用方法getResultSet()獲得第一個結果集,然后調用適當的getXXX方法獲取其中的值。要獲得第二個結果集,需要先調用getMoreResults方法,然后再調用getResultSet方法4)關閉Statement對象關閉Statement對象可以使用Statement對象的close方法。Statement對象被關閉后用該對象創建的結果集也會被自動關閉。

上一頁下一頁返回5.4

訪問數據庫2.參數查詢參數查詢的特點是可以接收查詢參數,使用PreparedStatement對象實現。在準備好的SQL語句中指出需要的參數,再將該語句傳遞給數據庫進行預編譯,這樣可以得到較高的性能,適合于在需要多次執行相同查詢語句時使用創建PreparedStatemeent對象可以使用Connection對象的prepareStatement(

)方法。例如:PreparedStatemeentps=con.prepareStatement(“SELECT

*

FROMstudentwherestu

age>=?”);//語句中的問號表示需要在執行查詢時傳遞的參數。上一頁下一頁返回5.4

訪問數據庫說明:當SQL語句中設置了參數后,可以使用PreparedStatemeent對象的setXXX方法來設置需要的參數,設置參數時需要注意參數的數據類型。因為設置的是SQL語句的參數,所以參數的數據類型必須與SQL的數據類型一致,同時需要注意SQL數據類型與Java數據類型之間的對應關系。使用PreparedStatemeent對象時執行查詢的方法與

Statement對象的方法完全一樣即使用。executeQuery()和。execute(

)方法,唯一不同的是PreparedStatemeent對象可以接收參數。3.存儲過程存儲過程實際上是數據庫中已經存在的SQL查詢語句,執行相應的存儲過程相當于是執行相應的SQL查詢語句,使用CallableStatement對象實現。上一頁下一頁返回5.4

訪問數據庫創建CallableStatement對象可以使用Connection對象的prepareCall()方法。prepareCall(

)方法的參數是一個字符串,在該字符串中是調用存儲過程的語句。其格式為“{callprocedurename()}

”,其中procedurename是存儲過程的名稱。執行存儲過程同樣可以使用eXe-cuteQuery()或execute(

)方法。上一頁下一頁返回5.4

訪問數據庫5.4.2

案例三:查詢CIassDB數據庫中的學生信息【案例功能】查詢學生信息,并以表格形式顯示在頁面上。【案例目標】掌握查詢數據庫的一般過程,能運用Statement對象查詢數據庫。【案例要點】statement對象查詢數據庫的實施過程。【案例步驟】(1)建立一個ODBC數據源ClassDB,更改默認數據庫為ClassDB。(2)在ch05目錄下編寫test3.jsp源文件。【源碼】

test3.jsp上一頁下一頁返回5.4

訪問數據庫上一頁下一頁返回5.4

訪問數據庫上一頁下一頁返回5.4

訪問數據庫【代碼說明】①第5-7行:創建表格,并在第1行設計列標題,表格整體居中顯示。②第9-11行:加載JDBC-ODBC驅動程序。③第10行:加載SQLServer數據庫的本地協議純java驅動程序。④第12-15行:創建connection對象、Statement對象及Resultset對象,與數據庫建立連接并從student表中讀出所有記錄存人結果集對象。中⑤第16-32行:依次從結果集:rs中讀出所有記錄并以表格格式顯示。⑥第33行:關閉相關對象。⑦第34-35行:異常處理。頁面運行效果如圖5-10所示。上一頁下一頁返回5.4

訪問數據庫注意以下問題。①getString(

)方法用來從結果集中讀出字符串類型的數據,其參數可以為列的名稱(如本例),也可以為列的索引號,從1開始,例如上例中的“rs.getString("id");”語句也可以用“rs.getString(1);”語句代替②在jsp對sqlserver數據庫進行數據讀取的時候,必須按照表中列名的順序讀取,否則會出現錯誤。例如,在數據庫的student表中“name”字段定義順序在“jiguan”字段前面,在讀取字段的值時就不能先讀取“jiguan”字段,再讀取“name”字段。③數據庫查詢完畢,必須關閉所有使用過的對象,關閉對象時應注意先后順序,關閉的順序一般與創建的順序相反,此例中的關閉順序為Resultset

statement

connection。上一頁下一頁返回5.4

訪問數據庫5.4.3

更新數據庫數據庫的更新包括:記錄的修改,插入和刪除,表的創建和刪除,增加和刪除表中的列等操作。這些操作涉及的sQL語句有create,delete,drop,insert,update等。數據庫更新操作可以使用Statement對象上的executeUpdate方法執行SQL更新語句來實現。executeUpdate()方法的參數是一個字符串對象,代表需要執行的SQL語句,其返回值是一個整數,該整數代表delete,insert和update操作所影響的記錄的條數,對于其他不返回結果的SQL語句,該方法返回值為零。上一頁下一頁返回5.4

訪問數據庫5.4.4

案例四:更新CIassDB數據庫中的學生信息【案例功能】在學生信息輸入界面,輸入學生基本信息,單擊“添加”按鈕加人數據庫。【案例目標】掌握更新數據庫的一般過程,能運用PreparedStatement對象更新數據庫。【案例要點】PreparedStatement對象的使用方法。【案例步驟】(1)建立一個ODBC數據源ClassDB,更改默認數據庫為ClassDB。(2)在ch05目錄下編寫input.jsp源文件,作為添加學生信息的輸入界面。【源碼】input.jsp上一頁下一頁返回5.4

訪問數據庫上一頁下一頁返回5.4

訪問數據庫上一頁下一頁返回5.4

訪問數據庫【代碼說明】①第1行:設置文檔類型為text/html,文本類型的html文件的字符集編碼是GB2312。②第6行:指出提交表單內容到insert.asp頁面處理,新頁面在當前窗口打開。③第13-14行:定義一組單選按鈕,默認選中“男”。④第16-19行,第21-24行:定義了兩個下拉列表框,分別有3個選項⑤第30-31行:定義了頁面的提交按鈕和重置按鈕。頁面運行效果如圖5-11所示。(3)在ch05目錄下編寫insert.jsp源文件,添加學生信息到數據庫。【源碼】insert.jsp上一頁下一頁返回5.4

訪問數據庫上一頁下一頁返回5.4

訪問數據庫上一頁下一頁返回5.4

訪問數據庫【代碼說明】①第5-12行:進行編碼轉換,解決中文亂碼問題,處理傳遞過來的參數時就可以直接調用Bytes方法實現中文的正常顯示。說明:由于Totncal服務器默認是ISO-8859-1編碼,所以它在傳遞數據的時候會將編碼轉換成ISO-8859-1,而中文的編碼方式是GB2312,這種情況下中文在傳遞過程中就會變成亂碼。②第14-17行:裝入JDBC-ODBC驅動,連接數據庫。③第18-24行:應用:request對象的getParameter方法取得用戶在input.jsp頁面表單中輸入的學生信息,并對中文信息進行類型轉換。④第25-26行:創建PreparedStatement對象。上一頁下一頁返回5.4

訪問數據庫⑤第27-33行:應用PreparedStatement對象的setString方法設置預編譯SQL語句中對應的參數值。注意,參數的順序應與student表中的字段順序一致。⑥第34行:應用PreparedStatement對象的executeUpdate方法完成學生信息的添加,并把影響的行數存人變量temp中。⑦第35-37行:對操作結果進行判斷,并打印出相應的信息。

頁面運行效果如圖5-12和圖5-13所示。上一頁返回5.5

數據庫操作典型應用5.5.1

綜合案例:數據庫查詢分頁顯示【案例功能】在頁面中輸入查詢條件,單擊“查詢”按鈕,將查詢結果進行分頁顯示。【案例目標】理解分頁顯示的編程思想,掌握分頁顯示的編程方法。【案例要點】分頁顯示的編程技巧。【案例步驟】(1)建立一個ODBC數據源ClassDB,更改默認數據庫為ClassDB。(2)在ch05目錄下編寫searchinput.jsp源文件,提供給用戶輸入查詢條件。【源碼】

searchinput.jsp下一頁返回5.5

數據庫操作典型應用上一頁下一頁返回5.5

數據庫操作典型應用【代碼說明】①第5行:設置表單處理頁面為resultdisplay.jsp,新頁面在當前窗口打開。②第7-11行:創建一個下拉列表框,用于查詢條件選擇。③第12-13行:創建一個文本輸入框,用于輸入查詢條件。④第14行:創建一個“查詢”按鈕,用于提交表單。(3)在ch05目錄下編寫searchinput.jsp源文件,提供給用戶輸入查詢條件。【源碼】

searchinput.jsp上一頁下一頁返回5.5

數據庫操作典型應用上一頁下一頁返回5.5

數據庫操作典型應用上一頁下一頁返回5.5

數據庫操作典型應用上一頁下一頁返回5.5

數據庫操作典型應用上一頁下一頁返回5.5

數據庫操作典型應用【代碼說明】①第4-9行:創建CSS樣式表,設置表格標題和內容的格式。②第11-20行:進行編碼轉換,解決中文亂碼問題。③第21-29行:創建表格,在第1行輸入列標題,并設置樣式。④第31-36行:定義相關變量,變量說明見代碼注釋。⑤第37-40行:加載數據庫驅動程序,創建connection對象連接數據庫⑥第41-42行:接收從searchinput.jsp頁面傳過來的兩個參數”item”和“content”,并進行類型轉換。⑦第43-44行:創建便于分頁顯示的Statement對象。上一頁下一頁返回5.5

數據庫操作典型應用說明:createStatement方法有3種格式。參數resultSetType用來定義后面得到的記錄集的游標類型,取值如下ResultSet.TypeFORWARDONLY:在ResultSet中只能先前移動游標,只允許向前訪問一次,并且不會受到其他用戶對該數據庫所作更改的影響。ResultSet.TYPESCROLLINSENSITIVE:在ResultSet中可以向前向后移動游標,不會受到其他用戶對該數據庫所作更改的影響。上一頁下一頁返回5.5

數據庫操作典型應用ResultSet.TYPESCROLLSE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論