JSP與JDBC數(shù)據(jù)庫連接.課件_第1頁
JSP與JDBC數(shù)據(jù)庫連接.課件_第2頁
JSP與JDBC數(shù)據(jù)庫連接.課件_第3頁
JSP與JDBC數(shù)據(jù)庫連接.課件_第4頁
JSP與JDBC數(shù)據(jù)庫連接.課件_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Chapter 7 JSP與JDBC數(shù)據(jù)庫連接 一、數(shù)據(jù)庫的連接 二、結(jié)果集的操作 三、數(shù)據(jù)操縱 第1頁,共32頁。一、數(shù)據(jù)庫的連接 1、數(shù)據(jù)庫連接2、Java程序的數(shù)據(jù)庫連接3、使用JDBC-ODBC橋連接、訪問數(shù)據(jù)庫第2頁,共32頁。1、數(shù)據(jù)庫連接數(shù)據(jù)庫連接一般有3種方法:利用ODBC專用驅(qū)動程序利用數(shù)據(jù)庫廠家提供的函數(shù)庫,直接編程。連接效率增高第3頁,共32頁。2、Java程序的數(shù)據(jù)庫連接什么是JDBC? Java DataBase Connectivity,又稱Java數(shù)據(jù)庫連接技術(shù)。它以O(shè)DBC為基礎(chǔ),對ODBC API進(jìn)行了面向?qū)ο蟮姆庋b和重新設(shè)計(jì)。第4頁,共32頁。2、Java程

2、序的數(shù)據(jù)庫連接JDBC連接數(shù)據(jù)庫JDBC支持如下2種方法連接數(shù)據(jù)庫:ODBC專用驅(qū)動程序JDBC特點(diǎn)JDBC是一種低級API,直接調(diào)用SQL命令,因此性能極佳。JDBC也在相當(dāng)高層提供了功能強(qiáng)大的對象來處理數(shù)據(jù)庫,它易于學(xué)習(xí)和使用。第5頁,共32頁。2、Java程序的數(shù)據(jù)庫連接(1)JDBC的任務(wù)主要完成如下三件事:與數(shù)據(jù)庫建立連接向數(shù)據(jù)庫發(fā)送SQL語句處理數(shù)據(jù)庫返回的結(jié)果第6頁,共32頁。2、Java程序的數(shù)據(jù)庫連接(2)為什么不直接使用ODBC?ODBC不適合在Java中直接使用:ODBC是一個(gè)C語言實(shí)現(xiàn)的API,從Java中調(diào)用本地的C程序在安全性、完整性、健壯性方面都有缺點(diǎn)。無法精確實(shí)

3、現(xiàn)從ODBC API到Java API的翻譯(語言的限制:指針支持)。ODBC很難學(xué)不再是純Java第7頁,共32頁。3、使用JDBC-ODBC橋連接、訪問數(shù)據(jù)庫ODBC驅(qū)動程序被廣泛使用,JDBC提供了利用ODBC驅(qū)動程序(即JDBC-ODBC橋)訪問數(shù)據(jù)庫的方法。這種方法適用于企業(yè)內(nèi)部網(wǎng)和三層結(jié)構(gòu)中的應(yīng)用服務(wù)器代碼。 第8頁,共32頁。3、使用JDBC-ODBC橋連接、訪問數(shù)據(jù)庫(1)注冊、加載驅(qū)動程序/ 顯式注冊DriverManager.registerDriver( sun.jdbc.odbc.JdbcOdbcDriver );/ 隱式注冊Class.forName( sun.jdb

4、c.odbc.JdbcOdbcDriver );說明:Class是包java.sql中的一個(gè)類,通過調(diào)用它的靜態(tài)方法forName就能建立JDBC-ODBC橋接器了。 第9頁,共32頁。3、使用JDBC-ODBC橋連接、訪問數(shù)據(jù)庫(2)建立連接 Connection conn=DriverManager.getConnection ( jdbc:odbc:數(shù)據(jù)源, 帳戶, 口令 ); 例:Connection conn= DriverManager.getConnection(jdbc:odbc:sample); 說明: Connection是java.sql包中的一個(gè)類通過調(diào)用DriverM

5、anager的靜態(tài)方法getConnection可以創(chuàng)建Connection對象。對于Access數(shù)據(jù)庫,帳號、口令可以省略不寫。第10頁,共32頁。3、使用JDBC-ODBC橋連接、訪問數(shù)據(jù)庫(3)向數(shù)據(jù)庫發(fā)送SQL及處理結(jié)果/創(chuàng)建Statement對象Statement stmt = conn.createStatement();/建立結(jié)果集ResultSet rs = stmt.executeQuery( select * from student ); 說明:一個(gè)Statement對象只能打開一個(gè)結(jié)果集。 第11頁,共32頁。3、使用JDBC-ODBC橋連接、訪問數(shù)據(jù)庫(4)結(jié)果集的訪

6、問while (rs.next() out.print(學(xué)號: + rs.getString(1) ); out.print(姓名: + rs.getString(2) ); out.print(); 說明:結(jié)果集的next()方法返回一個(gè)boolean值,當(dāng)有記錄時(shí),返回true,否則返回false。第12頁,共32頁。二、結(jié)果集的操作1、ResultSet對象2、獲取ResultSet中的數(shù)據(jù)3、結(jié)果集記錄的隨機(jī)訪問第13頁,共32頁。1、ResultSet對象ResultSet結(jié)果集對象,它非常類似于數(shù)據(jù)庫中的cursor。二者都具有下列特點(diǎn)對應(yīng)一個(gè)SELECT語句通過指針訪問記錄外部的

7、修改可以實(shí)時(shí)地反映到結(jié)果集中可通過修改結(jié)果集,修改表中的數(shù)據(jù)第14頁,共32頁。2、獲取ResultSet中的數(shù)據(jù)ResultSet對象提供了訪問其數(shù)據(jù)的方法,具體如下:getString()、 getBoolean()、getInt() 、 getLong()、 getFloat()、getDouble()、 getDate()、 getTime()、 getByte() 、getBytes()此外,還提供了獲取當(dāng)前行號的方法getRow()第15頁,共32頁。2、獲取ResultSet中的數(shù)據(jù)【參數(shù)】以getString()為例,可以使用2中參數(shù)getString(字段名)getStrin

8、g(字段序號) 例:rs.getString(name)、rs.getString(1)【參數(shù)說明】字段序號結(jié)果集中的字段序號對于指針的一次移動,所指向記錄的字段不能被讀取2次第16頁,共32頁。2、獲取ResultSet中的數(shù)據(jù)Question:對于下面2條SQL語句生成的結(jié)果集,調(diào)用rs.getString(1)獲得的數(shù)據(jù)是否一樣?SELECT * FROM studentSELECT class,name,stuNo FROM student第17頁,共32頁。2、獲取ResultSet中的數(shù)據(jù)【補(bǔ)充】ResultSetMetaData 元數(shù)據(jù)對象,通過它可獲得表結(jié)構(gòu)方面的數(shù)據(jù)。它提供了

9、下列2個(gè)有用的方法: getColumnCount()獲得列數(shù) getColumnName(i)獲得列名說明:所謂元數(shù)據(jù)就是“關(guān)于數(shù)據(jù)的數(shù)據(jù)”。第18頁,共32頁。2、獲取ResultSet中的數(shù)據(jù)【補(bǔ)充】例:元數(shù)據(jù)對象的創(chuàng)建使用 ResultSet rs = stmt.executeQuery(strsql); ResultSetMetaData rmd = rs.getMetaData(); int n=rmd.getColumnCount();while (rs.next() ) for(i=0;in;i+) out.print(rmd.getColumnName(i+1)+:); ou

10、t.print( rs.getString(i+1) ); out.print();第19頁,共32頁。3、結(jié)果集記錄的隨機(jī)訪問 前面介紹的結(jié)果集只能從頭至尾訪問記錄,如何隨機(jī)訪問呢?這需要從Statement對象的定義入手。Statement stmt=conn.createStatement(指針類型, 數(shù)據(jù)一致性參數(shù));說明:方法中的2個(gè)參數(shù)都是int型,但通常我們都用字符串常數(shù)來表示。第20頁,共32頁。3、結(jié)果集記錄的隨機(jī)訪問 指針類型參數(shù): 值說 明ResultSet.TYPE_FORWARD_ONLY默認(rèn)。單向ResultSet.TYPE_SCROLL_SENSITIVE雙向,反

11、映實(shí)時(shí)改動ResultSet.TYPE_SCROLL_INSENSITIVE雙向,不反映實(shí)時(shí)改動第21頁,共32頁。3、結(jié)果集記錄的隨機(jī)訪問數(shù)據(jù)一致性參數(shù) 值說 明ResultSet.CONCUR_READ_ONLY默認(rèn)。只讀ResultSet.CONCUR_UPDATEABLE可修改第22頁,共32頁。3、結(jié)果集記錄的隨機(jī)訪問示例:Statement stmt = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY );String sql= “Select * From st

12、udent; ResultSet rs=stmt.ExecuteQuery(sql); rs.afterLast(); /指針移至最后long n=rs.getRow(); rs.previous(); /指針前移rs.close();stmt.close();第23頁,共32頁。3、結(jié)果集記錄的隨機(jī)訪問移動指針next()指針后移previous() 指針前移first()last() beforeFirst第一條之前afterLast()最后一條之后第24頁,共32頁。3、結(jié)果集記錄的隨機(jī)訪問【練習(xí)1】輸出本班學(xué)生記錄,每條記錄前加上序號【練習(xí)2】輸出student表中各班的人數(shù)。第25頁

13、,共32頁。三、數(shù)據(jù)操縱 1、executeUpdate()方法2、操縱數(shù)據(jù)第26頁,共32頁。1、executeUpdate()方法Statement對象提供了2種方法,分別用于執(zhí)行查詢和數(shù)據(jù)修改。stmt.executeQuery()stmt.executeUpdate()前者只適用于Select語句,后者可以執(zhí)行Delete、Insert、Update語句,甚至還支持Create Table等創(chuàng)建對象的操作。第27頁,共32頁。1、executeUpdate()方法executeUpdate()的返回值與executeQuery()不同, executeUpdate()方法返回的是一個(gè)l

14、ong型值,表示更新操作所影響的行數(shù)。例如:一個(gè)刪除語句刪除了5條記錄,則返回值為5一個(gè)插入語句的返回值為1或0(插入不成功)。第28頁,共32頁。2、操縱數(shù)據(jù)(1)刪除long rtn=0;String sql=Delete From student Where class=04網(wǎng)絡(luò)4 ;rtn = stmt.executeUpdate(sql);if (rtn=0) out.print(刪除失敗);else out.print(刪除了+rtn+條記錄);注意:不要省略From第29頁,共32頁。2、操縱數(shù)據(jù)(2)插入long rtn=0;String sql=Insert Into student(stuNo,name,class) Values(04402150, 張睿, 04網(wǎng)絡(luò)4 );rtn = stmt.executeUpdate(sql);if (rtn=0) out.print(插入失敗);else out.print(插入了+rtn+條記錄);注意:不要省略Into第30頁,共32頁。2、操縱數(shù)據(jù)(3)更新long rtn=0;String sql=Update student Set class=04網(wǎng)絡(luò)2 Where stuNo=04402

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論