Java程序設(shè)計課件7第七章 JDBC_第1頁
Java程序設(shè)計課件7第七章 JDBC_第2頁
Java程序設(shè)計課件7第七章 JDBC_第3頁
Java程序設(shè)計課件7第七章 JDBC_第4頁
Java程序設(shè)計課件7第七章 JDBC_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

《JAVA程序設(shè)計》課程1、JDBC的概述

匯報提綱2、JDBC標(biāo)準(zhǔn)API3、JDBC數(shù)據(jù)庫連接Java程序設(shè)計4、JDBC數(shù)據(jù)庫操作5、DAO模式《JAVA程序設(shè)計》課程學(xué)習(xí)目標(biāo)1、了解JDBC技術(shù);

2、掌握J(rèn)DBC標(biāo)準(zhǔn)API;

3、熟悉JDBC連接數(shù)據(jù)庫的操作步驟;

4、熟練運用JDBC技術(shù)操作數(shù)據(jù)庫;

5、理解DAO模式實現(xiàn)分層開發(fā)?!禞AVA程序設(shè)計》課程

7.1JDBC連接7.1.1項目(7-1)描述安裝和配置一種數(shù)據(jù)庫,在Eclipse下完成數(shù)據(jù)庫的連接測試。7.1.1項目知識準(zhǔn)備(1)JDBC概述之前所學(xué)的案例,都是通過控制臺打印輸出,數(shù)據(jù)無法保存,每次運行程序都需要重新輸入,在JAVA中如何實現(xiàn)把各種數(shù)據(jù)存入數(shù)據(jù)庫,從而長久保存。JAVA是通過JDBC技術(shù)實現(xiàn)對各種數(shù)據(jù)庫訪問的,JDBC是應(yīng)用程序與各種數(shù)據(jù)庫之間進行對話的媒介。JDBC是JAVA數(shù)據(jù)庫連接(JAVADATABASECONNECTIVITY)技術(shù)的簡稱,由一組使用JAVA語言編寫的類和接口組成,使得JAVA程序能夠連接各種常用的數(shù)據(jù)庫。Sun公司提供了JDBC的接口規(guī)范—JDBCAPI,而數(shù)據(jù)庫廠商或第三方中間件廠商根據(jù)該接口規(guī)范提供針對不同數(shù)據(jù)庫的具體實現(xiàn)—JDBC驅(qū)動。(2)JDBC連接數(shù)據(jù)庫的APIJDBC提供了標(biāo)準(zhǔn)的API,主要包括DriverManager、Connection、Statement、PreparedStatement、CallableStatement和ResultSet,涉及到數(shù)據(jù)庫連接API主要包括DriverManager和Connection?!禞AVA程序設(shè)計》課程

7.1JDBC連接DriverManager是用于管理JDBC驅(qū)動程序的接口。這個接口的主要用途是通過getConnection()方法來取得Connection對象的引用。常用方法如下:方法名方法說明publicstaticsynchronizedConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException獲得url對應(yīng)數(shù)據(jù)庫的一個連接publicstaticvoidsetLoginTimeout(intseconds)設(shè)置要進行數(shù)據(jù)庫登陸時驅(qū)動程序等待的遲疑時間《JAVA程序設(shè)計》課程

7.1JDBC連接Connection對象是通過DriverManager.getConnection()方法取得的,表示驅(qū)動程序提供的與數(shù)據(jù)庫連接的對話。常用方法如下。方法名方法說明StatementcreateStatement()throwsSQLException返回一個Statement對象PreparedStatementprepareStatement(Stringsql)throwsSQLException返回一個PreparedStatement對象,并能把SQL語句提交到數(shù)據(jù)庫進行預(yù)編譯CallableStatementprepareCall(Stringsql)返回一個CallableStatement對象,該對象能夠處理存儲過程voidsetAutoCommit()throwsSQLException設(shè)置事務(wù)提交的模式voidcommit()throwsSQLException進行當(dāng)前業(yè)務(wù)開始以來的所有改變voidrollback()throwsSQLException放棄當(dāng)前業(yè)務(wù)開始以來的所有改變《JAVA程序設(shè)計》課程

7.1JDBC連接(3)JDBC連接數(shù)據(jù)庫的步驟1.導(dǎo)入JDBC包:根據(jù)不同的數(shù)據(jù)庫加載不同的驅(qū)動,本章使用SQLServer數(shù)據(jù)庫,jar包已經(jīng)放在本章節(jié)的目錄下,適用是請在本項目中添加該jar包,然后使用import語句引入。使用標(biāo)準(zhǔn)的JDBC包,可以執(zhí)行選擇,插入,更新和SQL表中刪除數(shù)據(jù).importjava.docx2.注冊JDBC驅(qū)動程序使用它之前,必須注冊驅(qū)動程序??梢酝ㄟ^Class.forName()完成注冊。注冊一個驅(qū)動程序最常用的方法是使用Java的Class.forName()方法來動態(tài)加載驅(qū)動程序的類文件到內(nèi)存中,它會自動將其注冊。下面的示例使用Class.forName()來注冊SQLServer驅(qū)動程序:importjava.docx可以使用getInstance()方法來解決不兼容的JVM,但要編寫了兩個額外的例外情況如下:importjava.docx《JAVA程序設(shè)計》課程

7.1JDBC連接3.定義指向數(shù)據(jù)庫的URL當(dāng)加載完驅(qū)動程序,可以使用DriverManager.getConnection()方法獲取連接。三個DriverManager.getConnection()方法:getConnection(Stringurl)getConnection(Stringurl,Propertiesprop)getConnection(Stringurl,Stringuser,Stringpassword)獲取連接需要獲取到指向數(shù)據(jù)庫的URL,即數(shù)據(jù)庫地址。下表列出了下來流行的JDBC驅(qū)動程序名和數(shù)據(jù)庫的URL。RDBMSJDBC驅(qū)動程序的名稱URL格式MySQLcom.mysql.jdbc.Driverjdbc:mysql://hostname/databaseNameORACLEoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@hostname:portNumber:databaseNameSQLservercom.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://hostname:port;databaseName

《JAVA程序設(shè)計》課程

7.1JDBC連接4.創(chuàng)建連接對象通過DriverManager.getConnection()方法來創(chuàng)建一個連接對象。getConnection()最常用形式要求傳遞一個數(shù)據(jù)庫URL,數(shù)據(jù)庫用戶名和密碼。

importjava.docx5.關(guān)閉JDBC連接在JDBC程序結(jié)束后,要求關(guān)閉所有的連接對象。如果忘了,Java垃圾收集器會關(guān)閉連接。依托垃圾收集,是非常差的編程習(xí)慣。為了確保連接被關(guān)閉,可以在代碼中的finally塊中執(zhí)行關(guān)閉。不管是否有異常,finally塊都會執(zhí)行,這樣確保執(zhí)行到關(guān)閉。importjava.docx《JAVA程序設(shè)計》課程

7.1JDBC連接7.1.3項目實施(1)通過分析題目可以得出以下信息:①創(chuàng)建測試數(shù)據(jù)庫,并設(shè)置數(shù)據(jù)庫的用戶名和密碼;②項目中加載合適的驅(qū)動程序,注冊驅(qū)動,連接數(shù)據(jù)庫,關(guān)閉數(shù)據(jù)庫。(2)編碼:importjava.docx(3)調(diào)試運行,顯示結(jié)果該程序的部分運行結(jié)果如圖7.1所示:圖7.1數(shù)據(jù)庫連接運行結(jié)果《JAVA程序設(shè)計》課程

7.1JDBC連接7.1.4能力拓展1.請寫出通過JDBC連接數(shù)據(jù)庫的步驟。2.請自己創(chuàng)建一個數(shù)據(jù)庫,并編寫程序測試連接是否成功?!禞AVA程序設(shè)計》課程7.2數(shù)據(jù)庫的增刪改查7.2.1項目(7-2)描述創(chuàng)建用戶表,包括用戶名和用戶密碼,實現(xiàn)對用戶表的插入、刪除、查詢和修改操作。7.2.2項目知識準(zhǔn)備(1)JDBC操作數(shù)據(jù)庫的API在完成數(shù)據(jù)庫的連接后,需要對數(shù)據(jù)庫進行操作,主要包括Statement、ResultSet和PreparedStatement的使用。1.StatementStatement是向數(shù)據(jù)庫提交SQL語句并返回相應(yīng)結(jié)果的工具。語句可以是SQL插入、刪除、查詢和修改。常用方法如下。方法名方法說明ResultSetexecuteQuery(Stringsql)throwsSQLException執(zhí)行一個查詢語句并將返回結(jié)果集存于ResultSet對象中intexecuteUpdate(Stringsql)throwsSQLException執(zhí)行一個修改或插入語句,并返回發(fā)生改變的記錄條數(shù)Booleanexecute(Stringsql)throwsSQLException執(zhí)行一個修改或插入語句,返回的布爾值表示語句是否執(zhí)行成功7.2數(shù)據(jù)庫的增刪改查《JAVA程序設(shè)計》課程

使用Statement方法時,語句可能返回或不返回ResultSet對象。如果提交的是查詢語句,通常使用executeQuery(Stringsql)方法;如果提交的是修改或插入語句,通常使用executeUpdate(Stringsql)方法。2.ResultSetResultSet接口定義訪問執(zhí)行Statement產(chǎn)生的結(jié)果集的方法。ResultSet結(jié)果集可以按照名稱或列名(從1到n)訪問,常用方法如下:方法名方法說明Booleannext()throwsSQLException將ResultSet定位到下一行。ResultSet定位從結(jié)果集第一行開始Booleannext()throwsSQLException將ResultSet定位到下一行。ResultSet定位從結(jié)果集第一行開始ResultSetMetaDatagetMetaData()throwsSQLException返回當(dāng)前結(jié)果集說明的對象;列號、每列類型和結(jié)果屬性voidclose()throwsSQLException釋放ResultSet對象資源Booleanabsolute(introw)throwsSQLException將結(jié)果集移動到指定行,如果row為負(fù)數(shù),則防在倒數(shù)第幾行《JAVA程序設(shè)計》課程

7.2數(shù)據(jù)庫的增刪改查ResultSet類的getXXX方法可以從某一數(shù)據(jù)項中獲得結(jié)果,其中XXX是JDBC中的Java數(shù)據(jù)類型,如getInt、getString、getData等。getXXX方法需要指定要檢索的數(shù)據(jù)項:有兩種指定數(shù)據(jù)項的方法:一種是以一個int值作為數(shù)據(jù)項的索引,另一種是以一個String對象作為數(shù)據(jù)項名來索引。importjava.docx3.PreparedStatementPreparedStatement接口繼承Statement接口。當(dāng)一條SQL語句需要稍加變化而反復(fù)執(zhí)行時,通常使用PreparedStatement。preparedStatement對象上的查詢語句和更新語句都可以設(shè)置輸入?yún)?shù)。在建立PreparedStatement對象后,并且在SQL語句執(zhí)行之前,使用setXXX方法給參數(shù)賦值,然后使用executeQuery或executeUpdate來執(zhí)行這個SQL語句-每一次執(zhí)行SQL語句之前,可以給參數(shù)重新賦值。Connection對象的prepareStatement()方法將SQL語句作為其參數(shù).importjava.docx注:”?”符號是一個運行時可被INPUT參數(shù)替代的占位符?!禞AVA程序設(shè)計》課程

7.2數(shù)據(jù)庫的增刪改查setXXX方法用于給相應(yīng)的輸人參數(shù)賦值,其中XXX是JDBC的數(shù)據(jù)類型,如:int、String等。第一個參數(shù)的位置為1;第二個參數(shù)的位置為2;依次類推;setXXX的第一個參數(shù)是參數(shù)的位置,第二個參數(shù)是要傳遞的值,隨XXX類型的不同而不同。(2)數(shù)據(jù)庫的操作importjava.docx7.2.3項目實施(1)通過分析題目可以得出以下信息:①在6-1項目基礎(chǔ)上,創(chuàng)建表userTable,包括userID,username,userPassword三個字段;②利用JDBC的API完成數(shù)據(jù)庫的操作。(2)編碼:importjava.docx(3)調(diào)試運行,顯示結(jié)果《JAVA程序設(shè)計》課程

7.2數(shù)據(jù)庫的增刪改查該程序的部分運行結(jié)果如圖7.2所示:圖7.2執(zhí)行插入操作后的運行結(jié)果7.2.4能力拓展(1)Statement和PreparedStatement的區(qū)別請畫出try…catch…finally執(zhí)行的流程圖,并考慮完所有情況?!禞AVA程序設(shè)計》課程

7.2數(shù)據(jù)庫的增刪改查(2)編程完成項目7-2的其它操作,如刪除、更新等,并使用PreparedStatement?!禞AVA程序設(shè)計》課程7.3數(shù)據(jù)庫操作的分層處理7.3.1項目(7-3)描述將案例7-2的代碼實現(xiàn)分層處理,實現(xiàn)用戶的注冊和登錄功能。7.3.2項目知識準(zhǔn)備(1)數(shù)據(jù)持久化持久化是將程序中的數(shù)據(jù)在瞬時狀態(tài)和持久狀態(tài)間轉(zhuǎn)換的機制。JDBC就是一種持久化機制,將大腦所思考的事情記錄在本子上,這個過程就是持久化。持久化的主要方式,主要包括將數(shù)據(jù)保存到數(shù)據(jù)庫、普通文件和XML文件中。主要的持久化操作包括保存、刪除、修改、讀取和查找。前面的例子是直接對持久化數(shù)據(jù)的訪問,業(yè)務(wù)邏輯和對持久化數(shù)據(jù)的訪問寫在一個文件里,邏輯不是很清晰。(2)Dao模式Dao,就是DateAccessObeject(數(shù)據(jù)存取對象),位于業(yè)務(wù)邏輯和持久化數(shù)據(jù)之間實現(xiàn)對持久化數(shù)據(jù)的訪問。Dao模式提供了訪問關(guān)系數(shù)據(jù)庫系統(tǒng)所需操作的接口,將數(shù)據(jù)訪問和業(yè)務(wù)邏輯分離,對上層提供面向?qū)ο蟮臄?shù)據(jù)訪問接口?!禞AVA程序設(shè)計》課程

7.3數(shù)據(jù)庫操作的分層處理Dao模式隔離了數(shù)據(jù)訪問代碼和業(yè)務(wù)邏輯代碼,降低了耦合性,效率更高,提高了可復(fù)用性;隔離了不同數(shù)據(jù)庫的實現(xiàn),如果底層數(shù)據(jù)庫變化,只需要增加數(shù)據(jù)訪問接口的實現(xiàn)類即可,降低了代碼的耦合性,提高了代碼的課擴展性和系統(tǒng)的可移值性。Dao模式的組成:DAO接口,把對數(shù)據(jù)庫的所有操作定義成一個抽象方法,可以提供多個實現(xiàn);DAO實現(xiàn)類,針對不同數(shù)據(jù)庫給出DAO接口定義方法的具體實現(xiàn);實體類,用于存放于傳輸對象數(shù)據(jù);數(shù)據(jù)庫連接和關(guān)閉工具類,避免了數(shù)據(jù)庫連接和關(guān)閉代碼的重復(fù)使用,方便修改。(3)分層開發(fā)的步驟借用DAO模式實現(xiàn)分層開發(fā),步驟如下:1.創(chuàng)建實體在分層結(jié)構(gòu)中,不同層之間通過實體類來傳輸數(shù)據(jù),把相關(guān)信息使用實體類封裝后,在程序中把實體類作為方法的輸入?yún)?shù)或返回結(jié)果,實現(xiàn)

溫馨提示

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

評論

0/150

提交評論