Part3_JDBC數(shù)據(jù)庫編程概述08級1.ppt_第1頁
Part3_JDBC數(shù)據(jù)庫編程概述08級1.ppt_第2頁
Part3_JDBC數(shù)據(jù)庫編程概述08級1.ppt_第3頁
Part3_JDBC數(shù)據(jù)庫編程概述08級1.ppt_第4頁
Part3_JDBC數(shù)據(jù)庫編程概述08級1.ppt_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、網絡數(shù)據(jù)庫編程,信息技術學院 譚定英,計算機科學與技術專業(yè)選修課程,課程內容,動態(tài)網頁編程語言JSP 數(shù)據(jù)庫觸發(fā)器,存儲過程,游標的使用。 介紹標準的Java接口(JDBC),利用它對關系數(shù)據(jù)庫進行便捷的訪問。 介紹MVC體系結構,并通過分析實例,熟悉其開發(fā)方法與流程。 介紹JDBC與BLOB,JDBC與XML 綜合設計,學習目標,通過學習,能根據(jù)系統(tǒng)設計的要求,設計合理的數(shù)據(jù)庫,并能選擇較好的系統(tǒng)體系結構,利用網絡編程工具,實現(xiàn)基于網絡的信息系統(tǒng)。 參考資料,教材與參考書目,使用教材: JSP實用教程 耿祥義 主編 清華大學出版社 參考書目: JDBC數(shù)據(jù)庫編程與J2EEArt Taylor

2、著 李東升等譯 電子工業(yè)出版社 JSP網站設計經典教程 吳其慶 編著 治金工業(yè)出版社 精通EJB(第二版)(美)Ed Roman著 劉曉華譯 電子工業(yè)出版社,課程內容安排,JDBC數(shù)據(jù)庫編程概述 JDBC應用 數(shù)據(jù)庫程序設計 JDBC設計模式及應用,課程內容安排,JavaBean JDBC與XML、BLOB J2EE體系結構及應用 綜合設計,數(shù)據(jù)庫技術體系,信息系統(tǒng)的工程與實踐,事務處理系統(tǒng)開發(fā),數(shù)據(jù)倉庫與數(shù)據(jù)挖掘,網絡數(shù)據(jù)庫系統(tǒng),關系數(shù)據(jù)庫原理,軟件技術基礎,數(shù)據(jù)庫用戶的劃分,數(shù)據(jù)庫管理員(DBA) 數(shù)據(jù)庫系統(tǒng)存儲空間的管理,數(shù)據(jù)庫結構的管理,控制、監(jiān)視用戶對數(shù)據(jù)庫的訪問,優(yōu)化數(shù)據(jù)庫性能,制

3、定及實施備份及恢復計劃 安全管理員 應用開發(fā)者 設計和開發(fā)數(shù)據(jù)庫應用 應用管理員 在數(shù)據(jù)庫應用交付使用后,負責應用程序的日常維護工作,如解決應用程序中運行中出現(xiàn)的錯誤等 普通數(shù)據(jù)庫用戶,數(shù)據(jù)庫管理系統(tǒng),數(shù)據(jù)庫的操作主要有增、刪、查 SQL查詢優(yōu)化 動態(tài)SQL執(zhí)行,使用存儲過程 1.存儲過程是SQL語句和可選控制流語句的預編 譯集合, 創(chuàng)建后便可轉換為可執(zhí)行代碼,作為數(shù)據(jù)庫的一個對象存儲在數(shù)據(jù)庫中,存儲過程的代碼駐留在服務器端,因而執(zhí)行時不需要將應用程序代碼向服務器端傳送,可以大大減輕網絡負載。 2.存儲過程已編譯為可執(zhí)行代碼,減少了預處理所花費的時間,提高了系統(tǒng)的效率。另一方面,使用存儲過程還

4、易于維護,且表的結構改變時,不影響客戶端的應用程序。,JDBC接口的應用,主要內容,JDBC簡介 JDBC數(shù)據(jù)庫連接方式比較 JDBC數(shù)據(jù)庫連接的實現(xiàn) 使用JDBC-ODBC實現(xiàn)數(shù)據(jù)庫連接 使用Pure Java Driver實現(xiàn)數(shù)據(jù)庫連接 使用JDBC實現(xiàn)數(shù)據(jù)庫的訪問 JDBC對數(shù)據(jù)庫的事務操作,JDBC簡介,JDBC一種用于執(zhí)SQL語句的JAVA API,是由一組用java編程語言寫的類和接口組成。 JDBC API可以分為以下兩個部分 有關客戶端連接數(shù)據(jù)庫及數(shù)據(jù)訪問使用,在java.sql的package之下 有關服務器端增加服務器的功能,在javax.sql的package之下,JDB

5、C的新發(fā)展,采用新的方法連接數(shù)據(jù)庫 DataSource Interface Connection Pooling JNDI-Java Naming and Directory Interface,JDBC簡介,通過JDBC,可以向各種關系數(shù)據(jù)庫發(fā)送SQL語句。運用JDBC API寫一個BEAN控件,或一段連接數(shù)據(jù)庫的通用代碼,便可以訪問SYBASE、ORACLE、SQLSERVER等數(shù)據(jù)庫。,JDBC簡介,JDBC主要實現(xiàn)三方面的功能 建立與數(shù)據(jù)庫連接 執(zhí)行SQL聲明 處理SQL執(zhí)行結果,JDBC數(shù)據(jù)庫連接方式,JDBC API結構圖,JDBC數(shù)據(jù)庫連接方式比較,(1)JDBC-ODBC B

6、ridge plus ODBC Driver 優(yōu)點:可以沿用舊系統(tǒng)的設置 缺點:設置ODBC連接繁瑣,在JDBC與ODBC中數(shù)據(jù)傳遞及轉換上需要一定的時間 (2)Pure Java Driver for Database Middleware 優(yōu)點:不用在用戶端做任何的設置或安裝一些函數(shù)庫,只需連接中間層服務器 缺點:連接受中間層服務器影響,數(shù)據(jù)庫連接,開放數(shù)據(jù)庫系統(tǒng)互連ODBC(Open DataBase Connectivity,簡稱ODBC)是MICROSOFT公司開發(fā)的一套開放數(shù)據(jù)庫應用程序接口規(guī)范。,SQL SERVER數(shù)據(jù)源,ORACLE數(shù)據(jù)源,ODBC體系結構,應用程序,應用程序

7、的主要功能是調用ODBC函數(shù)與ODBC數(shù)據(jù)源通訊,提交SQL語句和處理結果集等。 它主要任務包括: 連接數(shù)據(jù)源 向數(shù)據(jù)源發(fā)送SQL語句 處理多個語句從數(shù)據(jù)源返回的結果集 處理錯誤和消息 斷開與數(shù)據(jù)源的連接,ODBC數(shù)據(jù)源,使用ODBC驅動程序管理器可以建立、配置或刪除數(shù)據(jù)源,并查看系統(tǒng)當前所安裝的數(shù)據(jù)庫ODBC驅動程序。 啟動ODBC驅動管理器的方法: 1、運行ODBCAD32.EXE 2、控制面板中多擊ODBC圖標啟動 建立數(shù)據(jù)源,建立數(shù)據(jù)源,數(shù)據(jù)源是數(shù)據(jù)庫驅動程序與數(shù)據(jù)庫系統(tǒng)連接的橋梁,它為ODBC驅動程序指出數(shù)據(jù)庫服務器名稱,以及用戶的默認連接參數(shù)等。 ODBC數(shù)據(jù)源分為三大類: 用戶數(shù)

8、據(jù)源 只有創(chuàng)建數(shù)據(jù)源的用戶才可使用他們自己創(chuàng)建的數(shù)據(jù)源,所有用戶不能使用其他用戶創(chuàng)建的數(shù)據(jù)源 系統(tǒng)數(shù)據(jù)源:所有用戶均可使用系統(tǒng)數(shù)據(jù)源 文件數(shù)據(jù)源:所有安裝了相同數(shù)據(jù)庫驅動程序的用戶均可以共享文件數(shù)據(jù)源,修改和刪除數(shù)據(jù)源,打開“管理工具-ODBC”連,進行相關操作,使用JDBC-ODBC實現(xiàn)數(shù)據(jù)庫連接,圖示P127 String url=jdbc:odbc:jdbctest; Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);/指定驅動程序名稱,使用Pure Java Driver實現(xiàn)數(shù)據(jù)庫連接,圖示P131 以SQL SERVER2000為例,安裝sq

9、l-jdbcsetup.exe或若有以下三個文件,直接copy到相應的文件夾也可以。 設置classpath 添 .msbase.jar;.msutil.jar;.mssqlserver.jar; 注意以下事項: 1. 若出錯,檢查classpath是否正確 2. SQL SERVER數(shù)據(jù)庫一定要用Windows和數(shù)據(jù)庫混合身分驗證方式.,使用Pure Java Driver實現(xiàn)數(shù)據(jù)庫連接,String url = jdbc:microsoft:sqlserver:/tan:1433;DatabaseName=JDBCTEST; Class.forName(“com.microsoft.jdb

10、c.sqlserver.SQLServerDriver”); /指定驅動程序名稱 Class.forName(oracle.jdbc.driver.OracleDriver);/oracleDB 注意:1433是SQL SERVER端口號,可以通過以下方法修改 1.點擊“開始-程序-Microsoft SQL Server-服務器網絡實用工具” 2.在“啟用的協(xié)議”中選中“TCP/IP”,點擊“屬性”:,使用Pure Java Driver實現(xiàn)數(shù)據(jù)庫連接,不同數(shù)據(jù)庫的連接方法 與ORACLE數(shù)據(jù)庫的連接 與MYSQL數(shù)據(jù)庫的連接,使用JDBC實現(xiàn)數(shù)據(jù)庫連接與訪問,JDBC作為訪問數(shù)據(jù)庫的接口,

11、可以實現(xiàn)以下功能: 傳送SQL語句給數(shù)據(jù)庫,操作數(shù)據(jù)庫及數(shù)據(jù)表 接收及處理數(shù)據(jù)庫所執(zhí)行的結果 JDBC實現(xiàn)上述功能對應的組件 Connection Statement ResultSet,使用JDBC實現(xiàn)數(shù)據(jù)庫連接與訪問,連接數(shù)據(jù)庫用到的類有 Class/指定數(shù)據(jù)庫驅動程序 DriverManager/驅動程序管理 Connection/數(shù)據(jù)庫連接 訪問數(shù)據(jù)庫用到的類有 Statement/將SQL語句發(fā)送到數(shù)據(jù)庫 ResultSet/包含符合SQL語句中的條件的所有行,連接數(shù)據(jù)庫,Connection 對象代表與數(shù)據(jù)庫的連接。連接過程包括所執(zhí)行的 SQL 語句和在該連接上所返回的結果。一個應

12、用程序可與單個數(shù)據(jù)庫有一個或多個連接,或者可與許多數(shù)據(jù)庫有連接 打開連接 String url = jdbc:microsoft:sqlserver:/tan:1433;DatabaseName=JDBCTEST; String user =“sa”;/這里替換成你自已的數(shù)據(jù)庫用戶名 String password = ;/這里替換成你自已的數(shù)據(jù)庫用戶密碼 Connection con = DriverManager.getConnection( url, user, password );,JDBC提供的發(fā)送SQL語句的三個類,Statement:由方法createStatement所創(chuàng)建。

13、Statement對象用于發(fā)送簡單的SQL語句 Statement st = con.createStatement(); out.println( “創(chuàng)建Statement成功!” ); PreparedStatement:由方法prepareStatement所創(chuàng)建。PreparedStatement對象用于發(fā)送帶有一個或多個輸入參數(shù)(IN參數(shù))的SQL語句 CallableStatement:由方法prepareCall所創(chuàng)建。CallableStatement對象用于執(zhí)行SQL存儲過程一組可通過名稱來調用(就象函數(shù)的調用那樣)的SQL語句。,使用Statement對象執(zhí)行語句,Stat

14、ement接口提供了三種執(zhí)行SQL語句的方法:executeQuery、executeUpdate和execute。使用哪一個方法由SQL語句所產生的內容決定。 ResultSet executeQuery(String sql),返回一個靜態(tài)的SQL查詢結果 Int executeUpdate(String sql),查詢一行SQL聲明中insert,update,delete的數(shù)目或返回0,獲得SQL語句的執(zhí)行結果,ResultSet包含符合SQL語句中條件的所有行,并且它通過一套get方法(這些get方法可以訪問當前行中的不同列)提供了對這些行中數(shù)據(jù)的訪問。,獲得SQL語句的執(zhí)行結果,常

15、用的方法有: Boolean next,在ResutlSet對象中,向下移動一行,將得到下一條查詢結果。(previous()方法,從末行到第一行取結果) Void close(),關閉同數(shù)據(jù)庫的連接,并釋放所有占有的JDBC資源。 Boolean wasNull(),判斷返回結果中是否是SQL中的空值null,獲得SQL語句的執(zhí)行結果,String sqlStr = select * from student_info; ResultSet rs = st.executeQuery( sqlStr ); while (rs.next() String col1 = rs.getString(

16、sno); String col2 = rs.getString(sname); String col3=rs.getString(sex); String col4 = rs.getString(telephone); String col5 = rs.getString(deptno); ,關閉對象,rs.close(); st.close(); / Statement對象將由Java垃圾收集程序自動關閉 con.close();,實例,例: Connection con=DriverManager.getConnection(“jdbc:odbc:test”, “l(fā)ogin”,”pass

17、word”); Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery(“select a,b,c from table1”); While(rs.next() int x=rs.getInt(“a”); String s=rs.getString(“b”); float f=rs.getFloat(“c”); ,String s_i1=78; int i1=Integer.parseInt(s_i1);/字符類型轉換為數(shù)值型 s_i1=Integer.toString(i1);/數(shù)值型數(shù)據(jù)轉換為字符型,實現(xiàn)與應

18、用,數(shù)據(jù)查詢 例:jdbcodbcaccess.jsp 數(shù)據(jù)更新 例:insert.htm,insert.jsp,數(shù)據(jù)更新的實現(xiàn),Connection con; Statement stmt; ResultSet rs; Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); String url=jdbc:odbc:student; con=DriverManager.getConnection(url, sa, ); stmt = con.createStatement(); String strSQL=insert into student(sno,sn

19、ame,ssex,sage,sdept) values(+isno+,+sname+,+sex+,+sage+,+sdept+); out.println(strSQL); stmt.executeUpdate(strSQL);/插入數(shù)據(jù) out.println(數(shù)據(jù)已插入); String s=delete from student where sno=95010; out.print(s);stmt.executeUpdate(s); out.println(數(shù)據(jù)刪除);,進一步使用ResultSet,ResultSet數(shù)據(jù)字典(ResultSet MetaData) 結合使用getMet

20、aData的方法實現(xiàn)所有字段數(shù)據(jù)的讀取,ResultSet rs = stmt.executeQuery(query); ResultSetMetaData rsmd = rs.getMetaData(); int cols = rsmd.getColumnCount(); for (int i = 1; i = cols; i+) out.println(Column + i); out.println(Name: + rsmd.getColumnName(i); out.println(Type name: + rsmd.getColumnTypeName(i); 以上程序是獲得數(shù)據(jù)庫表中

21、的列號,列名及數(shù)據(jù)類型,ResultSet rs = stmt.executeQuery(query); ResultSetMetaData rsmd = rs.getMetaData (); / 獲得結果集的列數(shù) int numCols = rsmd.getColumnCount (); while (rs.next () /循環(huán)顯示結果集中的所有數(shù)據(jù) for (i=1; i 1) out.print(, ); out.print(rs.getString(i); 以上程序是獲得數(shù)據(jù)庫表中的數(shù)據(jù),PreparedStatement,PreparedStatement 實例包含已編譯的 SQL

22、 語句。這就是使語句“準備好”。 包含于 PreparedStatement 對象中的 SQL 語句可具有一個或多個 IN 參數(shù)。IN 參數(shù)的值在 SQL 語句創(chuàng)建時未被指定。 相反的,該語句為每個 IN 參數(shù)保留一個問號(“?”)作為占位符。每個問號的值必須在該語句執(zhí)行之前,通過適當?shù)?setXXX 方法來提供。,PreparedStatement,PreparedStatement 對象已預編譯過,所以其執(zhí)行速度要快于 Statement 對象。因此,多次執(zhí)行的 SQL 語句經常創(chuàng)建為 PreparedStatement 對象,以提高效率。 PreparedStatement 繼承了 St

23、atement 的所有功能。另外它還添加了一整套方法,用于設置發(fā)送給數(shù)據(jù)庫以取代 IN 參數(shù)占位符的值。,創(chuàng)建 PreparedStatement 對象,以下的代碼段(其中 con 是 Connection 對象)創(chuàng)建包含帶兩個 IN 參數(shù)占位符的 SQL 語句的 PreparedStatement 對象: PreparedStatement pstmt = con.prepareStatement( UPDATE table4 SET m = ? WHERE x = ?); pstmt 對象包含語句 UPDATE table4 SET m = ? WHERE x = ?,它已發(fā)送給 DBMS,并為執(zhí)行作好了準備。,傳遞 IN 參數(shù),PreparedStatement pstmt =

溫馨提示

  • 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

提交評論