Java數(shù)據(jù)庫連接技術(shù)JDBC.ppt
《Java數(shù)據(jù)庫連接技術(shù)JDBC.ppt》由會員分享,可在線閱讀,更多相關(guān)《Java數(shù)據(jù)庫連接技術(shù)JDBC.ppt(37頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、1,第十二章 JDBC技術(shù),賀玉珍 ,計(jì)算機(jī)科學(xué)與技術(shù)系,,2,主要內(nèi)容,JDBC概述 JDBC API的幾個(gè)基本類和接口 應(yīng)用JDBC訪問數(shù)據(jù)庫,計(jì)算機(jī)科學(xué)與技術(shù)系,3,ODBC,12.1 JDBC概述,計(jì)算機(jī)科學(xué)與技術(shù)系,Open DataBase Connectivity 開放數(shù)據(jù)庫互連 是微軟開發(fā)的、當(dāng)前被業(yè)界廣泛接受的、用于數(shù)據(jù)庫訪問的應(yīng)用程序編程接口(API)。 是用C語言實(shí)現(xiàn)的,標(biāo)準(zhǔn)應(yīng)用程序數(shù)據(jù)接口。 支持異構(gòu)的DBMS。,4,,12.1 JDBC概述,5,12.1 JDBC概述,JDBC(Java DataBase Connectivity),JDBC是為在Java Apple
2、t和應(yīng)用程序中訪問關(guān)系數(shù)據(jù)庫而設(shè)計(jì)的API類和接口。 JDBC獨(dú)立于平臺和數(shù)據(jù)庫。 在JDBC規(guī)范中,成功地提供了SQL數(shù)據(jù)庫訪問的 JAVA方法。 JDBC結(jié)構(gòu)如下圖所示:,計(jì)算機(jī)科學(xué)與技術(shù)系,6,JDBC應(yīng)用框架,,7,12.1 JDBC概述,12.1.2 JDBC驅(qū)動程序的類型,有四種,分別用于不同的場合。,JDBC-ODBC橋接驅(qū)動程序 本機(jī)應(yīng)用編程接口部分Java驅(qū)動程序 數(shù)據(jù)庫中間件的純Java驅(qū)動程序 直接連接數(shù)據(jù)庫的純Java驅(qū)動程序,計(jì)算機(jī)科學(xué)與技術(shù)系,8,,,JDBC驅(qū)動類型,9,12.1.2 JDBC驅(qū)動類型,JDBC-ODBC橋接驅(qū)動程 序 這種類型的驅(qū)動實(shí)際是把所有j
3、dbc的調(diào)用傳遞給odbc ,再由odbc調(diào)用本地?cái)?shù)據(jù)庫驅(qū)動代碼 jdbc-odbc橋 - odbc- 廠商DB代碼-----數(shù)據(jù)庫Server 優(yōu)點(diǎn):只要本地機(jī)裝有相關(guān)的odbc驅(qū)動,那么采用jdbc-odbc橋幾乎可以訪問所有的數(shù)據(jù)庫 缺點(diǎn):執(zhí)行效率比較低;平臺的依賴性。,計(jì)算機(jī)科學(xué)與技術(shù)系,10,12.1.2 JDBC驅(qū)動類型,本機(jī)應(yīng)用編程接口部分Java驅(qū)動程序 直接把jdbc調(diào)用轉(zhuǎn)變?yōu)閿?shù)據(jù)庫的標(biāo)準(zhǔn)調(diào)用再去訪問數(shù)據(jù)庫。 本地api驅(qū)動---廠商DB代碼---數(shù)據(jù)庫Server 優(yōu)點(diǎn):這種驅(qū)動比起jdbc-odbc橋加odbc執(zhí)行效率大大提高了缺點(diǎn):仍然需要在客戶端加載數(shù)據(jù)庫廠商提供的代
4、碼庫。這樣就不適合基于internet的應(yīng)用,計(jì)算機(jī)科學(xué)與技術(shù)系,11,12.1.2 JDBC驅(qū)動類型,數(shù)據(jù)庫中間件的純Java驅(qū)動程序 使用與具體數(shù)據(jù)庫無關(guān)的網(wǎng)絡(luò)應(yīng)用通信協(xié)議,將java應(yīng)用程序中對數(shù)據(jù)庫的訪問發(fā)送給網(wǎng)絡(luò)上的中間件服務(wù)器。中間件服務(wù)器再把請求翻譯為符合數(shù)據(jù)庫規(guī)范的調(diào)用,再把這種調(diào)用傳給數(shù)據(jù)庫服務(wù)器 網(wǎng)絡(luò)協(xié)議驅(qū)動---中間件服務(wù)器----數(shù)據(jù)庫Server 優(yōu)點(diǎn):不需要在客戶端加載數(shù)據(jù)庫廠商提供的代碼庫;在執(zhí)行效率和可升級性方面是比較好的。 缺點(diǎn):這種驅(qū)動在中間件層仍然需要有配置其它數(shù)據(jù)庫驅(qū)動程序,并且由于多了一個(gè)中間層傳遞數(shù)據(jù),計(jì)算機(jī)科學(xué)與技術(shù)系,12,12.1.2 JDBC
5、驅(qū)動類型,直接連接數(shù)據(jù)庫的純Java驅(qū)動程序 這種驅(qū)動直接把jdbc調(diào)用轉(zhuǎn)換為符合相關(guān)數(shù)據(jù)庫系統(tǒng)規(guī)范的請求。由于這種驅(qū)動寫的應(yīng)用可以直接和數(shù)據(jù)庫服務(wù)器通信,這種類型的驅(qū)動完全由java實(shí)現(xiàn),因此實(shí)現(xiàn)了平臺獨(dú)立性. 本地協(xié)議驅(qū)動---------數(shù)據(jù)庫Server 優(yōu)點(diǎn)1:所以它的執(zhí)行效率是非常高的優(yōu)點(diǎn)2:平臺獨(dú)立性 缺點(diǎn):雖然驅(qū)動程序可以動態(tài)的被下載,但是對于不同的數(shù)據(jù)庫需要下載不同的驅(qū)動程序,計(jì)算機(jī)科學(xué)與技術(shù)系,13,12.2 JDBC API,JDBC API的基本功能,建立一個(gè)與數(shù)據(jù)源的連接; 向數(shù)據(jù)源發(fā)出查詢和更新語句; 處理得到的結(jié)果,計(jì)算機(jī)科學(xué)與技術(shù)系,14,12.2 JDBC A
6、PI,Java中有關(guān)JDBC API的類,java.sql包,DriverManager類:驅(qū)動程序管理類 Driver接口:數(shù)據(jù)庫驅(qū)動程序 Connection接口:到特定數(shù)據(jù)庫的連接 Statement接口:用于執(zhí)行靜態(tài) SQL 語句并返回它所生成結(jié)果的對象。 ResultSet接口:數(shù)據(jù)庫結(jié)果集的一個(gè)數(shù)據(jù)表,計(jì)算機(jī)科學(xué)與技術(shù)系,15,使用JDBC訪問數(shù)據(jù)庫,基本上需要以下幾個(gè)方法和步驟,計(jì)算機(jī)科學(xué)與技術(shù)系,裝入合適的驅(qū)動程序; 創(chuàng)建一個(gè)連接對象; 生成一個(gè)SQL語句并執(zhí)行; 處理結(jié)果集; 關(guān)閉連接。,12.3 基于JDBC的數(shù)據(jù)庫應(yīng)用開發(fā)方法,16,裝入驅(qū)動程序,計(jì)算機(jī)科學(xué)與技術(shù)系,Dr
7、iverManager類,12.3 基于JDBC的數(shù)據(jù)庫應(yīng)用開發(fā)方法,驅(qū)動程序管理類 實(shí)現(xiàn)驅(qū)動程序的裝載,并實(shí)現(xiàn)與JDBC數(shù)據(jù)源的連接。 是JDBC的管理層,工作在用戶和驅(qū)動程序之間。它跟蹤可用的驅(qū)動程序,并在數(shù)據(jù)庫和相應(yīng)驅(qū)動程序之間建立連接。 Class.forName(“數(shù)據(jù)庫驅(qū)動程序類”);,Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); Class.forName(“oracle.jdbc.driver.OracleDriver”); Class.forName(“com.mysql.jdbc.Driver”);,17,Class類,jav
8、a.lang.Class類 一個(gè)普通類,可以提供程序中每個(gè)類的信息,如類名、類的父類、接口、類的成員變量、類的構(gòu)造方法和方法等。 主要方法:,12.3 基于JDBC數(shù)據(jù)庫應(yīng)用開發(fā)方法,public static Class forName (String className) throws ClassNotFoundException; //該方法根據(jù)給定的字符串參數(shù)返回相應(yīng)的Class對象。,計(jì)算機(jī)科學(xué)與技術(shù)系,18,Class類,主要方法:,12.3 基于JDBC數(shù)據(jù)庫應(yīng)用開發(fā)方法,public boolean isInterface(); public Object new
9、Instance() throws InstantiationException, IllegalAccessException; public Class getInterfaces(); public String getName(); public Class getSuperclass();,計(jì)算機(jī)科學(xué)與技術(shù)系,19,建立與數(shù)據(jù)源的連接。,計(jì)算機(jī)科學(xué)與技術(shù)系,JDBC URL,12.3 基于JDBC數(shù)據(jù)庫應(yīng)用開發(fā)方法,JDBC數(shù)據(jù)源url的標(biāo)準(zhǔn)格式: jdbc::,jdbc:總協(xié)議 子協(xié)議:驅(qū)動程序名或數(shù)據(jù)庫連接機(jī)制(可由一個(gè)或多個(gè)驅(qū)動程序支持)的名稱。 子名稱:指定具體數(shù)據(jù)庫或數(shù)據(jù)源
10、的連接信息(數(shù)據(jù)庫服務(wù)器的IP地址,端口號,ODBC數(shù)據(jù)源名稱,連接用戶名/密碼等)。,例:jdbc:odbc:bookstore jdbc:dbnet://wombat:356 jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=stud,20,建立與數(shù)據(jù)源的連接。,計(jì)算機(jī)科學(xué)與技術(shù)系,建立連接,12.3 基于JDBC數(shù)據(jù)庫應(yīng)用開發(fā)方法,Connection DriverManager.getConnection(url),例: String url = “jdbc:odbc:bookstore”; Connection con
11、 = DriverManager.getConnection(url);,21,Connection類,計(jì)算機(jī)科學(xué)與技術(shù)系,數(shù)據(jù)庫的連接類。 定義了上下文的行為,在其中發(fā)布SQL語句并接收結(jié)果 提供的主要方法:,12.3 基于JDBC數(shù)據(jù)庫應(yīng)用開發(fā)方法,createStatement(); //創(chuàng)建Statement 對象來將 SQL 語句發(fā)送到數(shù)據(jù)庫。 2) prepareStatement(String query); //創(chuàng)建PreparedStatement 對象來將參數(shù)化的 SQL 語句發(fā)送到數(shù)據(jù)庫 3) close(); 4) commit(); //事務(wù)提交 5) rollba
12、ck(); //事務(wù)回滾,22,創(chuàng)建SQL語句,計(jì)算機(jī)科學(xué)與技術(shù)系,Statement類,SQL語句類。 執(zhí)行SQL語句并獲得處理結(jié)果。 PrepareStatement類,預(yù)編譯類。 用于執(zhí)行預(yù)編譯的SQL語句。 CallableStatement類,存儲過程類。 用于執(zhí)行對一個(gè)數(shù)據(jù)庫存儲過程的調(diào)用。,12.3 基于JDBC數(shù)據(jù)庫應(yīng)用開發(fā)方法,23,執(zhí)行SQL語句,計(jì)算機(jī)科學(xué)與技術(shù)系,方法executeQuery() 用于產(chǎn)生單個(gè)結(jié)果集的語句,例如SELECT語句。 方法executeUpdate() 用于執(zhí)行INSERT、UPDATE或DELETE語句以及SQL DDL語句,例如CREA
13、TE TABLE和DROP TABLE。 方法execute() 用于執(zhí)行返回多個(gè)結(jié)果集、多個(gè)更新計(jì)數(shù)或二者組合的語句。,12.3 基于JDBC數(shù)據(jù)庫應(yīng)用開發(fā)方法,24,Statement類,計(jì)算機(jī)科學(xué)與技術(shù)系,主要方法:,12.3 基于JDBC數(shù)據(jù)庫應(yīng)用開發(fā)方法,ResultSet executeQuery(String query); int executeUpdate(String query); boolean execute(String query); setMaxRows(int rownum); getMaxRows(); close(); ResultSet getResul
14、tSet(); int getUpdateCount(); boolean getMoreResults();,25,Statement類,計(jì)算機(jī)科學(xué)與技術(shù)系,示例:,12.3 基于JDBC數(shù)據(jù)庫應(yīng)用開發(fā)方法,Statement stmt = con.createStatement(); String query = “SELECT * FROM books”; ResultSet r = stmt.executeQuery(query);,stmt.executeUpdate(UPDATE information SET bk_num = 130WHERE name=袖珍英漢詞典 );,26
15、,處理結(jié)果集,計(jì)算機(jī)科學(xué)與技術(shù)系,ResultSet類,12.3 基于JDBC數(shù)據(jù)庫應(yīng)用開發(fā)方法,結(jié)果集類 提供對結(jié)果集進(jìn)行處理的方法。 主要方法:,boolean next(); //first();last();previous(); getXxx(String itemname/int num); ResultSetMetaData getMetaData() //檢索此 ResultSet 對象的列的編號、類型和名字,27,ResultSet類,計(jì)算機(jī)科學(xué)與技術(shù)系,示例:,String query = “SELECT * FROM books”; ResultSet r = stmt.
16、executeQuery(query); //stmt.executeQuery(query); //r=stmt.getResultSet(); while(r.next()) String r1 = r.getString(name);double r4 = r.getDouble(4); ,12.3 基于JDBC數(shù)據(jù)庫應(yīng)用開發(fā)方法,28,關(guān)閉連接,計(jì)算機(jī)科學(xué)與技術(shù)系,關(guān)閉結(jié)果集 關(guān)閉Statement對象 關(guān)閉連接,12.3 基于JDBC數(shù)據(jù)庫應(yīng)用開發(fā)方法,29,利用JDBC/ODBC橋接驅(qū)動程序訪問數(shù)據(jù)庫的一般步驟:,計(jì)算機(jī)科學(xué)與技術(shù)系,通過ODBC建立訪問的數(shù)據(jù)源,其URL地址為ur
17、l。 創(chuàng)建驅(qū)動程序管理類的對象。常用的方法如下:Class.forName(數(shù)據(jù)庫驅(qū)動程序類); 建立與數(shù)據(jù)源的連接。方法如下:Connection con = DriverManager.getConnection(url);,應(yīng)用JDBC/ODBC橋訪問數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)庫。 設(shè)置系統(tǒng)的ODBC數(shù)據(jù)源。,30,利用JDBC/ODBC橋接驅(qū)動程序訪問數(shù)據(jù)庫的一般步驟:,計(jì)算機(jī)科學(xué)與技術(shù)系,利用Statement或它的子類對象,實(shí)現(xiàn)把SQL語句發(fā)送到DBMS。以查詢數(shù)據(jù)庫表為例。步驟如下: 對返回的記錄集進(jìn)行處理。 關(guān)閉結(jié)果集;關(guān)閉Statement對象;關(guān)閉連接。,應(yīng)用JDBC/ODB
18、C橋訪問數(shù)據(jù)庫,創(chuàng)建Statement對象; 執(zhí)行SQL語句。 另外,還可獲取和設(shè)置選項(xiàng)。,31,應(yīng)用JDBC/ODBC橋訪問數(shù)據(jù)庫,計(jì)算機(jī)科學(xué)與技術(shù)系,例: 對一個(gè)數(shù)據(jù)庫的數(shù)據(jù)表進(jìn)行選擇、插入、刪除、更新記錄的操作,對表進(jìn)行創(chuàng)建和刪除操作,32,import java.sql.*; class Query public static void main(String args) try Class t=Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException ce) System
19、.out.println(SQLException:+ce.getMessage()); try Connection con = DriverManager.getConnection(jdbc:odbc:mydb); Statement stmt = con.createStatement(); ResultSet rs=stmt.executeQuery(select * from mytable); while (rs.next()) System.out.println( 姓名 + rs.getString(name) + t + 性別 + rs.getS
20、tring(sex) + t + 工資 + rs.getFloat(salary) ); rs.close(); stmt.close(); con.close() catch (SQLException e) System.out.println(SQLException:+e.getMessage()); ,33,import java.sql.*; class Insert public static void main(String args) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catc
21、h (ClassNotFoundException ce) System.out.println(SQLException:+ce.getMessage()); try Connection con = DriverManager.getConnection(jdbc:odbc:mydb,li,1234); Statement stmt = con.createStatement(); String sqlstr = insert into mytable values(2001, 邢雪花,女,650); stmt.executeUpdate(sqlstr); stm
22、t.executeUpdate(insert into mytable values(2020,翟建設(shè),男,746)); stmt.close(); con.close(); catch (SQLException e) System.out.println(SQLException:+e.getMessage()); ,34,import java.sql.*; class Delete public static void main(String args) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); ca
23、tch (ClassNotFoundException ce) System.out.println(SQLException:+ce.getMessage()); try Connection con = DriverManager.getConnection(jdbc:odbc:mydb,li,1234); Statement stmt = con.createStatement(); String sql = delete from mytable where name=王五; stmt.executeUpdate(sql); stmt.close();
24、 con.close(); catch (SQLException e) System.out.println(SQLException:+e.getMessage()); ,35,import java.sql.*; class Create public static void main(String args) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException ce) System.out.println(SQLException:+ce.getM
25、essage()); try Connection con = DriverManager.getConnection(jdbc:odbc:mydb,li,1234); Statement stmt = con.createStatement(); String sql= create table student (s_num char(4), s_name char(6) null, score int); stmt.executeUpdate(sql); sql = insert into student(s_num, s_name,score
26、) values(9901, 張學(xué)軍,85); stmt.executeUpdate(sql); stmt.close(); con.close(); catch (SQLException e) System.out.println(SQLException:1 +e.getMessage()); ,36,import java.sql.*; class Drop public static void main(String args) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (Class
27、NotFoundException ce) System.out.println(SQLException:+ce.getMessage()); try Connection con = DriverManager.getConnection(jdbc:odbc:mydb,li,1234); Statement stmt = con.createStatement(); String sql = drop table student; stmt.executeUpdate(sql); stmt.close(); con.close(); catch (SQ
28、LException e) System.out.println(SQLException:1 +e.getMessage()); ,37,//將結(jié)果集放到表格中顯示 Vector columnHeads = new Vector(); Vector rows = new Vector(); try String query = SELECT * FROM stud; statement = connection.createStatement(); resultSet = statement.executeQuery( query ); rsmd = resultSet
29、.getMetaData(); for ( int i = 1; i <= rsmd.getColumnCount(); ++i ) columnHeads.addElement( rsmd.getColumnName( i ) ); while ( resultSet.next() ) Vector currentRow = new Vector(); for ( int i = 1; i <= rsmd.getColumnCount(); ++i ) currentRow.addElement( resultSet.getString( i ) ); rows.addElement(currentRow); JTable table = new JTable( rows, columnHeads );,
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中生物對照實(shí)驗(yàn)專題復(fù)習(xí)課件
- 初中物理資源九年級第十五單元課件串并聯(lián)識別
- 咯血與嘔血課件
- What's_your_number_課件
- 外研版七下Module3Unit1(教育精品)
- 浙美版三年級上冊美術(shù)第15課-剪雪花教學(xué)ppt課件
- 蘇教版六年級下冊數(shù)學(xué)正比例和反比例的意義課件
- 蘇教版五下《單式折線統(tǒng)計(jì)圖》教研課件
- 固態(tài)相變概論
- 三角形全等的判定復(fù)習(xí)-課件2
- 太陽能發(fā)展趨勢課件
- 道路工程監(jiān)理最新規(guī)劃范本課件
- SPC及CPK教程(理論篇)課件
- Travel-Plan旅行計(jì)劃-PPT
- 新冠肺炎疫情期間醫(yī)務(wù)人員防護(hù)技術(shù)指南