數(shù)據(jù)庫應(yīng)用開發(fā)_第1頁
數(shù)據(jù)庫應(yīng)用開發(fā)_第2頁
數(shù)據(jù)庫應(yīng)用開發(fā)_第3頁
數(shù)據(jù)庫應(yīng)用開發(fā)_第4頁
數(shù)據(jù)庫應(yīng)用開發(fā)_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

本講大綱:1、JDBC簡介3、連接數(shù)據(jù)庫2、JDBCAPI4、JDBC操作數(shù)據(jù)庫數(shù)據(jù)庫應(yīng)用開發(fā)JDBC簡介

JDBC是Java程序與數(shù)據(jù)庫系統(tǒng)通信的標(biāo)準(zhǔn)API,它定義在JDK的API中,通過JDBC技術(shù)Java程序可以非常方便的與各種數(shù)據(jù)庫交互,JDBC在Java程序與數(shù)據(jù)庫系統(tǒng)之間建立了一座橋梁。JDBC技術(shù)介紹JDBC驅(qū)動(dòng)程序JDBC是Java操作數(shù)據(jù)庫的規(guī)范,由一組用Java語言編寫的類和接口組成,它對數(shù)據(jù)庫的操作提供基本方法,但對于數(shù)據(jù)庫的細(xì)節(jié)操作由數(shù)據(jù)庫廠商進(jìn)行實(shí)現(xiàn),使用JDBC操作數(shù)據(jù)庫,需要數(shù)據(jù)庫廠商提供數(shù)據(jù)庫的驅(qū)動(dòng)程序,關(guān)于Java程序與數(shù)據(jù)庫相交互的示意圖如下圖所示。JDBC技術(shù)介紹JDBC驅(qū)動(dòng)程序是用于解決應(yīng)用程序與數(shù)據(jù)庫通信問題的,它基本上分為JDBC-ODBCBridge、JDBC-NativeAPIBridge、JDBC-middleware和PureJDBCDriver4種類型,下面分別進(jìn)行介紹。 1.JDBC-ODBCBridge 2.JDBC-NativeAPIBridge 3.JDBC-middleware 4.PureJDBCDriverJDBC驅(qū)動(dòng)程序

JDBC是Java程序操作數(shù)據(jù)庫的標(biāo)準(zhǔn),它由一組用Java語言編寫的類和接口組成,Java通過JDBC可以對多種關(guān)系數(shù)據(jù)庫進(jìn)行統(tǒng)一訪問,所以,學(xué)習(xí)JDBC需要掌握J(rèn)DBC中的類和接口,也就是JDBCAPI。Driver接口Connection接口DriverManager類Statement接口PreparedStatement接口CallableStatement接口ResultSet接口JDBCAPI每種數(shù)據(jù)庫的驅(qū)動(dòng)程序都應(yīng)該提供一個(gè)實(shí)現(xiàn)java.sql.Driver接口的類,簡稱Driver類,在加載Driver類時(shí),應(yīng)該創(chuàng)建自己的實(shí)例并向java.sql.DriverManager類注冊該實(shí)例。Driver接口Connection接口方法名稱功能描述voidclose()throwsSQLException立即釋放此

Connection對象的數(shù)據(jù)庫連接占用的

JDBC資源,在操作數(shù)據(jù)庫后,應(yīng)立即調(diào)用此方法voidcommit()throwsSQLException提交事務(wù),并釋放此

Connection對象當(dāng)前持有的所有數(shù)據(jù)庫鎖。當(dāng)事務(wù)被設(shè)置為手動(dòng)提交模式時(shí),需要調(diào)用此方法提交事務(wù)StatementcreateStatement()throwsSQLException創(chuàng)建一個(gè)

Statement對象來將

SQL語句發(fā)送到數(shù)據(jù)庫,此方法返回Statement對象booleangetAutoCommit()throwsSQLException用于判斷Connection對象是否被設(shè)置為自動(dòng)提交模式,此方法返回boolean值DatabaseMetaDatagetMetaData()throwsSQLException獲取此

Connection對象所連接的數(shù)據(jù)庫的元數(shù)據(jù)DatabaseMetaData對象,元數(shù)據(jù)包括關(guān)于數(shù)據(jù)庫的表、受支持的

SQL語法、存儲(chǔ)過程、此連接功能等信息intgetTransactionIsolation()throwsSQLException獲取此

Connection對象的當(dāng)前事務(wù)隔離級(jí)別booleanisClosed()throwsSQLException判斷此Connection對象是否與數(shù)據(jù)庫斷開連接,此方法返回布爾值。注意如果Connection對象與數(shù)據(jù)庫斷開連接,則不能通過再通此Connection對象操作數(shù)據(jù)庫booleanisReadOnly()throwsSQLException判斷此Connection對象是否為只讀模式,此方法返回boolean值PreparedStatementprepareStatement(Stringsql)throwsSQLException將參數(shù)化的

SQL語句預(yù)編譯并存儲(chǔ)在

PreparedStatement對象中,并返回所創(chuàng)建的這個(gè)

PreparedStatement對象voidreleaseSavepoint(Savepointsavepoint)throwsSQLException從當(dāng)前事務(wù)中移除指定的

Savepoint和后續(xù)

Savepoint對象voidrollback()throwsSQLException回滾事務(wù),并釋放此

Connection對象當(dāng)前持有的所有數(shù)據(jù)庫鎖。注意此方法需要應(yīng)用于Connection對象的手動(dòng)提交模式中voidrollback(Savepointsavepoint)throwsSQLException回滾事務(wù),針對Savepoint對象之后的更改voidsetAutoCommit(booleanautoCommit)throwsSQLException設(shè)置Connection對象的提交模式,如果參數(shù)autoCommit的值設(shè)置為true,Connection對象則為自動(dòng)提交模式,如果參數(shù)autoCommit的值設(shè)置為false,Connection對象則為手動(dòng)提交模式voidsetReadOnly(booleanreadOnly)throwsSQLException將Connection對象的連接模式設(shè)置為只讀,此方法用于對數(shù)據(jù)庫的優(yōu)化SavepointsetSavepoint()throwsSQLException在當(dāng)前事務(wù)中創(chuàng)建一個(gè)未命名的保留點(diǎn),并返回這個(gè)保留點(diǎn)對象SavepointsetSavepoint(Stringname)throwsSQLException在當(dāng)前事務(wù)中創(chuàng)建一個(gè)指定名稱的保留點(diǎn),并返回這個(gè)保留點(diǎn)對象DriverManager類方法聲明說明publicstaticvoidderegisterDriver(Driverdriver)throwsSQLException從DriverManager的管理列表中刪除一個(gè)驅(qū)動(dòng)程序。參數(shù)driver為要?jiǎng)h除的驅(qū)動(dòng)對象publicstaticConnectiongetConnection(Stringurl)throwsSQLException根據(jù)指定數(shù)據(jù)庫連接URL,建立與數(shù)據(jù)庫連接Connection。參數(shù)url為數(shù)據(jù)庫連接URLpublicstaticConnectiongetConnection(Stringurl,Propertiesinfo)throwsSQLException根據(jù)指定數(shù)據(jù)庫連接URL,及數(shù)據(jù)庫連接屬性信息建立數(shù)據(jù)庫連接Connection。參數(shù)url為數(shù)據(jù)庫連接URL,參數(shù)inof為數(shù)據(jù)庫連接屬性publicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException根據(jù)指定數(shù)據(jù)庫連接URL、用戶名及密碼建立數(shù)據(jù)庫連接Connection。參數(shù)url為數(shù)據(jù)庫連接URL,參數(shù)user為連接數(shù)據(jù)庫的用戶名,參數(shù)password連接數(shù)據(jù)庫的密碼publicstaticEnumeration<Driver>getDrivers()獲取當(dāng)前DriverManager中已加載的所有驅(qū)動(dòng)程序,它的返回值為EnumerationpublicstaticvoidregisterDriver(Driverdriver)throwsSQLException向DriverManager注冊一個(gè)驅(qū)動(dòng)對象,參數(shù)driver為要注冊的驅(qū)動(dòng)Statement接口方法聲明說明voidaddBatch(Stringsql)throwsSQLException將SQL語句添加到此Statement對象的當(dāng)前命令列表中,此方法用于SQL命令的批處理voidclearBatch()throwsSQLException清空Statement對象中的命令列表voidclose()throwsSQLException立即釋放此Statement對象的數(shù)據(jù)庫和

JDBC資源,而不是等待該對象自動(dòng)關(guān)閉時(shí)發(fā)生此操作booleanexecute(Stringsql)throwsSQLException執(zhí)行指定的SQL語句。如果sql語句返回結(jié)果,此方法返回true,否則返回falseint[]executeBatch()throwsSQLException執(zhí)行Batch中的所有SQL語句,如果全部執(zhí)行成功,則返回由更新計(jì)數(shù)組成的數(shù)組,數(shù)組元素的排序與SQL語句的添加順序?qū)?yīng)。數(shù)組元素有以下幾種情況:①大于或等于零的數(shù):說明SQL語句執(zhí)行成功,為影響數(shù)據(jù)庫中行數(shù)的更新計(jì)數(shù);②-2:說明SQL語句執(zhí)行成功,但未得到受影響的行數(shù)③-3:說明SQL語句執(zhí)行失敗,僅當(dāng)執(zhí)行失敗后繼續(xù)執(zhí)行后面的SQL語句時(shí)出現(xiàn)。如果驅(qū)動(dòng)程序不支持批量、或者未能成功執(zhí)行Batch中的SQL語句之一,將拋出異常ResultSetexecuteQuery(Stringsql)throwsSQLException執(zhí)行查詢類型(select)的SQL語句,此方法返回查詢所獲取的結(jié)果集ResultSet對象executeUpdateintexecuteUpdate(Stringsql)throwsSQLException執(zhí)行SQL語句中DML類型(insert、update、delete)的SQL語句,返回更新所影響的行數(shù)ConnectiongetConnection()throwsSQLException獲取生成此Statement對象的Connection對象booleanisClosed()throwsSQLException判斷Statement對象是否已被關(guān)閉,如果Statement對象被關(guān)閉,則不能再調(diào)用此Statement對象執(zhí)行SQL語句,此方法返回布爾值PreparedStatement接口方法聲明說明voidsetBinaryStream(intparameterIndex,InputStreamx)throwsSQLException將輸入流x作為SQL語句中的參數(shù)值,parameterIndex為參數(shù)位置的索引voidsetBoolean(intparameterIndex,booleanx)throwsSQLException將布爾值x作為SQL語句中的參數(shù)值,parameterIndex為參數(shù)位置的索引voidsetByte(intparameterIndex,bytex)hrowsSQLException將byte值x作為SQL語句中的參數(shù)值,parameterIndex為參數(shù)位置的索引voidsetDate(intparameterIndex,Datex)hrowsSQLException將java.sql.Date值x作為SQL語句中的參數(shù)值,parameterIndex為參數(shù)位置的索引voidsetDouble(intparameterIndex,doublex)hrowsSQLException將double值x作為SQL語句中的參數(shù)值,parameterIndex為參數(shù)位置的索引voidsetFloat(intparameterIndex,floatx)hrowsSQLException將float值x作為SQL語句中的參數(shù)值,parameterIndex為參數(shù)位置的索引voidsetInt(intparameterIndex,intx)throwsSQLException將int值x作為SQL語句中的參數(shù)值,parameterIndex為參數(shù)位置的索引voidsetInt(intparameterIndex,longx)throwsSQLException將long值x作為SQL語句中的參數(shù)值,parameterIndex為參數(shù)位置的索引voidsetObject(intparameterIndex,Objectx)throwsSQLException將Object對象x作為SQL語句中的參數(shù)值,parameterIndex為參數(shù)位置的索引voidsetShort(intparameterIndex,shortx)throwsSQLException將short值x作為SQL語句中的參數(shù)值,parameterIndex為參數(shù)位置的索引voidsetString(intparameterIndex,Stringx)throwsSQLException將String值x作為SQL語句中的參數(shù)值,parameterIndex為參數(shù)位置的索引voidsetTimestamp(intparameterIndex,Timestampx)throwsSQLException將java.sql.Timestamp值x作為SQL語句中的參數(shù)值,parameterIndex為參數(shù)位置的索引

java.sql.CallableStatement接口繼承于PreparedStatement接口,是PreparedStatement接口的擴(kuò)展,用來執(zhí)行SQL的存儲(chǔ)過程。CallableStatement接口ResultSet接口方法聲明說明booleanabsolute(introw)throwsSQLException將光標(biāo)移動(dòng)到此ResultSet對象的給定行編號(hào),參數(shù)row為行編號(hào)voidafterLast()throwsSQLException將光標(biāo)移動(dòng)到此ResultSet對象的最后一行之后。如果結(jié)果集中不包含任何行,則此方法無效voidbeforeFirst()throwsSQLException立即釋放此ResultSet對象的數(shù)據(jù)庫和

JDBC資源voiddeleteRow()throwsSQLException從此ResultSet對象和底層數(shù)據(jù)庫中刪除當(dāng)前行booleanfirst()throwsSQLException將光標(biāo)移動(dòng)到此ResultSet對象的第一行InputStreamgetBinaryStream(StringcolumnLabel)throwsSQLException以byte流的方式獲取ResultSet對象當(dāng)前行中指定列的值,參數(shù)columnLabel為列名稱DategetDate(StringcolumnLabel)throwsSQLException以java.sql.Date的方式獲取ResultSet對象當(dāng)前行中指定列的值,參數(shù)columnLabel為列名稱doublegetDouble(StringcolumnLabel)throwsSQLException以double的方式獲取ResultSet對象當(dāng)前行中指定列的值,參數(shù)columnLabel為列名稱floatgetFloat(StringcolumnLabel)throwsSQLException以float的方式獲取ResultSet對象當(dāng)前行中指定列的值,參數(shù)columnLabel為列名稱intgetInt(StringcolumnLabel)throwsSQLException以int的方式獲取ResultSet對象當(dāng)前行中指定列的值,參數(shù)columnLabel為列名稱StringgetString(StringcolumnLabel)throwsSQLException以String的方式獲取ResultSet對象當(dāng)前行中指定列的值,參數(shù)columnLabel為列名稱booleanisClosed()throwsSQLException判斷當(dāng)前ResultSet對象是否已關(guān)閉booleanlast()throwsSQLException將光標(biāo)移動(dòng)到此ResultSet對象的最后一行booleannext()throwsSQLException將光標(biāo)位置向后移動(dòng)一行,如移動(dòng)的新行有效返回true,否則返回falsebooleanprevious()throwsSQLException將光標(biāo)位置向前移動(dòng)一行,如移動(dòng)的新行有效返回true,否則返回false在對數(shù)據(jù)庫進(jìn)行操作時(shí),首先需要連接數(shù)據(jù)庫,在JSP中連接數(shù)據(jù)庫大致可以分為加載JDBC驅(qū)動(dòng)程序、創(chuàng)建Connection對象的實(shí)例、執(zhí)行SQL語句、獲得查詢結(jié)果和關(guān)閉連接等5個(gè)步驟,下面分別進(jìn)行介紹。加載JDBC驅(qū)動(dòng)程序創(chuàng)建數(shù)據(jù)庫連接執(zhí)行SQL語句獲得查詢結(jié)果關(guān)閉連接連接數(shù)據(jù)庫在連接數(shù)據(jù)庫之前,首先要加載要連接數(shù)據(jù)庫的驅(qū)動(dòng)到JVM(Java虛擬機(jī)),通過java.lang.Class類的靜態(tài)方法forName(StringclassName)實(shí)現(xiàn),例如,加載MySQL驅(qū)動(dòng)程序的代碼如下:

try{ Class.forName("com.mysql.jdbc.Driver"); }catch(ClassNotFoundExceptione){ System.out.println("加載數(shù)據(jù)庫驅(qū)動(dòng)時(shí)拋出異常,內(nèi)容如下:"); e.printStackTrace(); }加載JDBC驅(qū)動(dòng)程序通過DriverManager類的靜態(tài)方法getConnection(Stringurl,Stringuser,Stringpassword)可以建立數(shù)據(jù)庫連接,三個(gè)入口參數(shù)依次為要連接數(shù)據(jù)庫的路徑、用戶名和密碼,該方法的返回值類型為java.sql.Connection,典型代碼如下:Connectionconn=DriverManager.getConnection( "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=db_database09","root","root");創(chuàng)建數(shù)據(jù)庫連接通過Connection實(shí)例并不能執(zhí)行SQL語句,還需要通過Connection實(shí)例創(chuàng)建Statement實(shí)例,Statement實(shí)例又分為以下3種類型。Statement實(shí)例:該類型的實(shí)例只能用來執(zhí)行靜態(tài)的SQL語句;PreparedStatement實(shí)例:該類型的實(shí)例增加了執(zhí)行動(dòng)態(tài)SQL語句的功能;CallableStatement對象:該類型的實(shí)例增加了執(zhí)行數(shù)據(jù)庫存儲(chǔ)過程的功能。執(zhí)行SQL語句在開發(fā)Web應(yīng)用程序時(shí),經(jīng)常需要對數(shù)據(jù)庫進(jìn)行操作,最常用的數(shù)據(jù)庫操作技術(shù),包括向數(shù)據(jù)庫查詢、添加、修改或刪除數(shù)據(jù)庫中的數(shù)據(jù),這些操作即可以通過靜態(tài)的SQL語句實(shí)現(xiàn),也可以通過動(dòng)態(tài)的SQL語句實(shí)現(xiàn),還可以通過存儲(chǔ)過程實(shí)現(xiàn),具體采用的實(shí)現(xiàn)方式要根據(jù)實(shí)際情況而定。添加數(shù)據(jù)查詢數(shù)據(jù)修改數(shù)據(jù)刪除數(shù)據(jù)批處理調(diào)用存儲(chǔ)過程JDBC操作數(shù)據(jù)庫實(shí)現(xiàn)數(shù)據(jù)添加操作使用的SQL語句為INSERT語句,其語法格式如下:Insert[INTO]table_name[(column_list)]values(data_values)添加數(shù)據(jù)參數(shù)描述[INTO]可選項(xiàng),無特殊含義,可以將它用在INSERT和目標(biāo)表之前table_name要添加記錄的數(shù)據(jù)表名稱column_list是表中的字段列表,表示向表中哪些字段插入數(shù)據(jù)。如果是多個(gè)字段,字段之間用逗號(hào)分隔。不指定column_list,默認(rèn)向數(shù)據(jù)表中所有字段插入數(shù)據(jù)data_values要添加的數(shù)據(jù)列表,各個(gè)數(shù)據(jù)之間使用逗號(hào)分隔。數(shù)據(jù)列表中的個(gè)數(shù)、數(shù)據(jù)類型必須和字段列表中的字段個(gè)數(shù)、數(shù)據(jù)類型相一致values引入

溫馨提示

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

評(píng)論

0/150

提交評(píng)論