《Java教程》課件第24講數(shù)據(jù)庫(kù)操作_第1頁(yè)
《Java教程》課件第24講數(shù)據(jù)庫(kù)操作_第2頁(yè)
《Java教程》課件第24講數(shù)據(jù)庫(kù)操作_第3頁(yè)
《Java教程》課件第24講數(shù)據(jù)庫(kù)操作_第4頁(yè)
《Java教程》課件第24講數(shù)據(jù)庫(kù)操作_第5頁(yè)
已閱讀5頁(yè),還剩10頁(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)介

第24講數(shù)據(jù)庫(kù)操作數(shù)據(jù)庫(kù)指的是以一定方式儲(chǔ)存在一起、能為多個(gè)用戶共享、具有盡可能小的冗余度、與應(yīng)用程序彼此獨(dú)立的數(shù)據(jù)集合。對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的增、刪、改、查由統(tǒng)一的軟件進(jìn)行管理和控制。常用的數(shù)據(jù)庫(kù)軟件有Oracle、SQLServer、MySQL、DB2、ACCESS、Sybase等。本講就以MySQL為例講解使用Java語(yǔ)言操作MySQL數(shù)據(jù)庫(kù)。第24講數(shù)據(jù)庫(kù)操作24.1JDBC24.2結(jié)果集及常見(jiàn)方法24.3操作數(shù)據(jù)庫(kù)步驟24.4課后練習(xí)24.1JDBC在Java語(yǔ)言中,JDBC(JavaDataBaseConnection)是應(yīng)用程序與數(shù)據(jù)庫(kù)溝通的橋梁,即Java語(yǔ)言通過(guò)JDBC技術(shù)訪問(wèn)數(shù)據(jù)庫(kù)。JDBC是一種“開放”的方案,它為數(shù)據(jù)庫(kù)應(yīng)用開發(fā)人員﹑數(shù)據(jù)庫(kù)前臺(tái)工具開發(fā)人員提供了一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計(jì)接口,使開發(fā)人員可以用純Java語(yǔ)言編寫完整的數(shù)據(jù)庫(kù)應(yīng)用程序。JDBC是Java應(yīng)用與數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行交互的標(biāo)準(zhǔn)API,包括兩個(gè)包:核心API(java.sql)和擴(kuò)展的API(javax.sql)。24.2結(jié)果集及常見(jiàn)方法(1)結(jié)果集有三種類型,它的類型決定了能否對(duì)結(jié)果集中的游標(biāo)進(jìn)行操作,以及并發(fā)的數(shù)據(jù)源的改變能否反映到結(jié)果集中。具體描述如下:類型描述TYPE_FORWARD_ONLY默認(rèn)的結(jié)果集類型,這種類型的結(jié)果集對(duì)象的游標(biāo)只能向前移動(dòng),從第1行的前面到最后一行的后面。TYPE_SCROLL_INSENSITIVE這種類型的結(jié)果集對(duì)象的游標(biāo)可以向前移動(dòng),也可以直接定位到某一行上,但是對(duì)結(jié)果集中對(duì)應(yīng)數(shù)據(jù)的變化是不敏感的。TYPE_SCROLL_SENSITIVE這種類型的結(jié)果集對(duì)象的游標(biāo)可以向前移動(dòng),也可以直接定位到某一行上,并且對(duì)結(jié)果集中對(duì)應(yīng)數(shù)據(jù)的變化是敏感的(如果)。(2)結(jié)果集的并發(fā)性決定了結(jié)果集所支持的更新操作的層次,有兩種并發(fā)性層次:類型描述CONCUR_READ_ONLY默認(rèn)的結(jié)果集并發(fā)類型,這種情況下的結(jié)果集對(duì)象不支持更新操作。CONCUR_UPDATABLE這種情況下的結(jié)果集對(duì)象支持更新操作。

可以通過(guò)調(diào)用DatabaseMetaData的supportsResultSetConcurrency方法來(lái)看驅(qū)動(dòng)是否支持結(jié)果集上的更新操作,該方法定義如下:booleansupportsResultSetConcurrency(inttype,intconcurrency)throwsSQLException。第一個(gè)參數(shù)表示結(jié)果集類型,第二個(gè)參數(shù)表示并發(fā)類型。(3)結(jié)果集的延續(xù)性是指當(dāng)事務(wù)提交時(shí),在當(dāng)前事務(wù)中創(chuàng)建的結(jié)果集是否關(guān)閉。默認(rèn)情況下會(huì)關(guān)閉這個(gè)結(jié)果集對(duì)象。延續(xù)性可以通過(guò)如下兩個(gè)靜態(tài)屬性來(lái)指定:類型描述HOLD_CURSORS_OVER_COMMIT當(dāng)提交事務(wù)時(shí)不關(guān)閉該結(jié)果集對(duì)象。CLOSE_CURSORS_AT_COMMIT提交事務(wù)時(shí)關(guān)閉結(jié)果集對(duì)象,有時(shí)候會(huì)提高性能。(4)結(jié)果集的類型、并發(fā)性和延續(xù)性可以通過(guò)Connection.createStatement、Connection.prepareStatement和Connection.prepareCall等方法指定,同時(shí)Statement、PreparedStatement和CallableStatement接口也提供了相應(yīng)的setter方法和getter方法。如下代碼是創(chuàng)建語(yǔ)句對(duì)象的時(shí)候指定結(jié)果集的類型、并發(fā)性和延續(xù)性。Connectionconn=ds.getConnection(user,passwd);Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY,ResultSet.CLOSE_CURSORS_AT_COMMIT);返回值方法名功能描述booleannext()將游標(biāo)從當(dāng)前位置向前移一行,如果指向某行,返回true,如果指向最后一行的后面,返回falsebooleanprevious()將游標(biāo)從當(dāng)前位置向后移一行,如果指向某行,返回true,如果指向第一行的前面,返回falsebooleanfirst()將游標(biāo)移到此結(jié)果集的第一行。返回值功能名功能描述booleanlast()將游標(biāo)移到些結(jié)果集的最后一行。voidbeforeFirst()將游標(biāo)移動(dòng)到此結(jié)果集的開始處,正好位于第一行之前voidafterLast()將游標(biāo)移動(dòng)到此結(jié)果集的末尾,正好位于最后一行之后booleanrelative(introws)按相對(duì)行數(shù)移動(dòng)游標(biāo)。如果參數(shù)為0,游標(biāo)無(wú)變化。如果參數(shù)是正的,游標(biāo)向前移動(dòng)rows行,如果rows太大,游標(biāo)指向最后1條記錄的后面。如果參數(shù)是負(fù)數(shù),游標(biāo)向后移動(dòng)rows行,如果rows太小,游標(biāo)指向第1條記錄的前面。如果游標(biāo)指向一個(gè)有效行,方法返回true,否則返回falsebooleanabsolute(introw)將游標(biāo)移動(dòng)到參數(shù)所指定的行24.3操作數(shù)據(jù)庫(kù)步驟一般來(lái)說(shuō),Java應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)的步驟為:(1)裝載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序裝載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序是把各個(gè)數(shù)據(jù)庫(kù)提供的訪問(wèn)數(shù)據(jù)庫(kù)的API加載到程序中,并將其注冊(cè)到DriverManager中,每一種數(shù)據(jù)庫(kù)提供的數(shù)據(jù)庫(kù)驅(qū)動(dòng)不一樣,下面我們以Mysql為例,來(lái)看一下JDBC驅(qū)動(dòng)加載注冊(cè)的代碼:Class.forName("com.mysql.jdbc.Driver").newInstance();(2)通過(guò)JDBC建立數(shù)據(jù)庫(kù)連接建立數(shù)據(jù)庫(kù)之間的連接是訪問(wèn)數(shù)據(jù)庫(kù)的必要條件,于不同數(shù)據(jù)庫(kù)也是不一樣的,下面我們看一下Mysql數(shù)據(jù)庫(kù)建立數(shù)據(jù)庫(kù)連接,取得Connection對(duì)象的方式:Stringurl="jdbc:mysql://localhost:3306/testDB?user=root&password=root&useUnicode=true&characterEncoding=gb2312";Connectionconn=DriverManager.getConnection(url);(3)訪問(wèn)數(shù)據(jù)庫(kù),執(zhí)行SQL語(yǔ)句數(shù)據(jù)庫(kù)連接建立好之后,接下來(lái)就是一些準(zhǔn)備工作和執(zhí)行sql語(yǔ)句了,準(zhǔn)備工作要做的就是建立Statement對(duì)象PreparedStatement對(duì)象,例如:

//建立Statement對(duì)象

Statementstmt=conn.createStatement();//建立PreparedStatement對(duì)象

Stringsql="select*fromuserwhereuserName=?andpassword=?";PreparedStatementpstmt=Conn.prepareStatement(sql);pstmt.setString(1,"admin");pstmt.setString(2,"liubin");做好準(zhǔn)備工作之后就可以執(zhí)行sql語(yǔ)句了,執(zhí)行sql語(yǔ)句:Stringsql="select*fromusers";ResultSetrs=stmt.executeQuery(sql);//執(zhí)行動(dòng)態(tài)SQL查詢

ResultSetrs=pstmt.executeQuery();//執(zhí)行insertupdatedelete等語(yǔ)句,先定義sqlstmt.executeUpdate(sql);(4)處理結(jié)果集訪問(wèn)結(jié)果記錄集ResultSet對(duì)象。例如:

while(rs.next){out.println("你的第一個(gè)字段內(nèi)容為:"+rs.getString("Name"));out.println("你的第二個(gè)字段內(nèi)容為:"+rs.getString(2));}(5)斷開數(shù)據(jù)庫(kù)連接依次將ResultSet、Statement、PreparedStatement、Co

溫馨提示

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