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ù)免費閱讀

下載本文檔

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

文檔簡介

1、Chapter 7 JSP與JDBC數(shù)據(jù)庫連接 一、數(shù)據(jù)庫的連接 二、結果集的操作 三、數(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專用驅動程序利用數(shù)據(jù)庫廠家提供的函數(shù)庫,直接編程。連接效率增高第3頁,共32頁。2、Java程序的數(shù)據(jù)庫連接什么是JDBC? Java DataBase Connectivity,又稱Java數(shù)據(jù)庫連接技術。它以ODBC為基礎,對ODBC API進行了面向對象的封裝和重新設計。第4頁,共32頁。2、Java程

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

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

4、c.odbc.JdbcOdbcDriver );說明:Class是包java.sql中的一個類,通過調用它的靜態(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包中的一個類通過調用DriverM

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

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

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

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

9、下列2個有用的方法: getColumnCount()獲得列數(shù) getColumnName(i)獲得列名說明:所謂元數(shù)據(jù)就是“關于數(shù)據(jù)的數(shù)據(jù)”。第18頁,共32頁。2、獲取ResultSet中的數(shù)據(jù)【補充】例:元數(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、結果集記錄的隨機訪問 前面介紹的結果集只能從頭至尾訪問記錄,如何隨機訪問呢?這需要從Statement對象的定義入手。Statement stmt=conn.createStatement(指針類型, 數(shù)據(jù)一致性參數(shù));說明:方法中的2個參數(shù)都是int型,但通常我們都用字符串常數(shù)來表示。第20頁,共32頁。3、結果集記錄的隨機訪問 指針類型參數(shù): 值說 明ResultSet.TYPE_FORWARD_ONLY默認。單向ResultSet.TYPE_SCROLL_SENSITIVE雙向,反

11、映實時改動ResultSet.TYPE_SCROLL_INSENSITIVE雙向,不反映實時改動第21頁,共32頁。3、結果集記錄的隨機訪問數(shù)據(jù)一致性參數(shù) 值說 明ResultSet.CONCUR_READ_ONLY默認。只讀ResultSet.CONCUR_UPDATEABLE可修改第22頁,共32頁。3、結果集記錄的隨機訪問示例: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、結果集記錄的隨機訪問移動指針next()指針后移previous() 指針前移first()last() beforeFirst第一條之前afterLast()最后一條之后第24頁,共32頁。3、結果集記錄的隨機訪問【練習1】輸出本班學生記錄,每條記錄前加上序號【練習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()方法返回的是一個l

14、ong型值,表示更新操作所影響的行數(shù)。例如:一個刪除語句刪除了5條記錄,則返回值為5一個插入語句的返回值為1或0(插入不成功)。第28頁,共32頁。2、操縱數(shù)據(jù)(1)刪除long rtn=0;String sql=Delete From student Where class=04網絡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網絡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網絡2 Where stuNo=04402

溫馨提示

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

評論

0/150

提交評論