JDBC數(shù)據(jù)庫(kù)連接技術(shù).ppt
《JDBC數(shù)據(jù)庫(kù)連接技術(shù).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《JDBC數(shù)據(jù)庫(kù)連接技術(shù).ppt(26頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、JDBC數(shù)據(jù)庫(kù)連接技術(shù) 主要內(nèi)容 JDBC概述 面向程序開(kāi)發(fā)人員的 JDBC API 面向底層的 JDBC Driver API JDBC Driver介紹 創(chuàng)建數(shù)據(jù)庫(kù)的連接 數(shù)據(jù)庫(kù)連接及應(yīng)用舉例 JDBC概述 JDBC出現(xiàn)以前,通過(guò) Java訪問(wèn)數(shù)據(jù)庫(kù)的唯一方法是 利用 Java I/O訪問(wèn)服務(wù)器端的 CGI程序,通過(guò) CGI程序 訪問(wèn)和操作數(shù)據(jù)庫(kù),每一次訪問(wèn)都會(huì)由 web服務(wù)器啟 動(dòng)一個(gè)新的 CGI進(jìn)程與數(shù)據(jù)庫(kù)建立連接,所以效率低、 速度慢且容易出錯(cuò)。 JDBC的出現(xiàn)擴(kuò)充了 java的應(yīng)用范圍,通過(guò)使用 JDBC, 應(yīng)用程序可以很方便的將 SQL語(yǔ)句傳送給
2、幾乎任何一 種數(shù)據(jù)庫(kù)。 簡(jiǎn)單地說(shuō), JDBC能完成: 與數(shù)據(jù)庫(kù)建立連接 向數(shù)據(jù)庫(kù)發(fā)送 SQL語(yǔ)句 處理數(shù)據(jù)庫(kù)返回的結(jié)果 JDBC概述 Java通過(guò) JDBC訪問(wèn)數(shù)據(jù)庫(kù)的關(guān)系: JDBC包含兩部分 API:面向應(yīng)用程序開(kāi)發(fā)人員的 JDBC API和面向底層的 JDBC Driver API 面向程序開(kāi)發(fā)人員的 JDBC API 被描述成為聚集抽象的接口,通過(guò)這些接口應(yīng) 用程序可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的各種操作。最重要 的接口包括: Java.sql.DriverManager 處理驅(qū)動(dòng)的加載并且對(duì)產(chǎn) 生新的數(shù)據(jù)庫(kù)連接提供支持 Java.sql.Connection
3、 數(shù)據(jù)庫(kù)連接對(duì)象 Java.sql.Statement SQL語(yǔ)句對(duì)象 PreparedStatement 執(zhí)行預(yù)編譯的 SQL語(yǔ)句 CallableStatement 調(diào)用數(shù)據(jù)庫(kù)內(nèi)嵌過(guò)程 Java.sql.ResultSet 查詢結(jié)果集對(duì)象 面向底層的 JDBC Driver API 數(shù)據(jù)庫(kù)廠商開(kāi)發(fā)數(shù)據(jù)庫(kù)底層驅(qū)動(dòng)程序要使用的,一般 情況下程序員用不上這些類庫(kù)。 數(shù)據(jù)庫(kù)廠商會(huì)提供多種不同類型的驅(qū)動(dòng)程序連接數(shù)據(jù) 庫(kù),一般可分為 4種類型: Type1、 Type2、 Type3、 Type4 清楚了解 4種類型的驅(qū)動(dòng)程序的運(yùn)作方式,對(duì)于程序 員是很重要的,因?yàn)閷?shí)際開(kāi)發(fā)
4、過(guò)程中經(jīng)常會(huì)使用各種 不同的數(shù)據(jù)庫(kù)、而且在不同的時(shí)機(jī)必須使用不同類型 的的驅(qū)動(dòng)程序來(lái)連接數(shù)據(jù)庫(kù)。 招聘題:你常用的是 JDBC驅(qū)動(dòng)的那一種?與其他 JDBC 驅(qū)動(dòng)相比較,有什么優(yōu)點(diǎn)? JDBC Driver介紹 Type1JDBC-ODBC Bridge plus ODBC Driver 必須事先創(chuàng)建數(shù)據(jù)庫(kù)的 ODBC連接,然后再利用 JDBC-ODBC Bridge(DBC橋接器 )驅(qū)動(dòng)程序,通過(guò) ODBC連接數(shù)據(jù)庫(kù),此種方式通常用在實(shí)驗(yàn)、測(cè)試 階段,或者暫時(shí)沒(méi)有其他驅(qū)動(dòng)可用的情況下。 優(yōu)點(diǎn) :簡(jiǎn)單 缺點(diǎn) :要設(shè)置 ODBC連接;項(xiàng)目大、用戶多時(shí)維護(hù) ODBC連接很麻煩;
5、性能低、大量效率耗在了 JDBC和 ODBC之間的數(shù)據(jù)傳遞與轉(zhuǎn)換。 JDBC Driver介紹 Type2Native-API partly-Java Driver 運(yùn)作方式與 Type1很相似。訪問(wèn)數(shù)據(jù)庫(kù)時(shí),利用數(shù) 據(jù)庫(kù)提供的特別的函數(shù)庫(kù)來(lái)完成 (Oracle、 DB2、 Sybase等都有提供 ), java利用本地函數(shù)的機(jī)制與 這些函數(shù)庫(kù)溝通。此種方式適用于于用戶機(jī)器上存 在這些函數(shù)庫(kù)。 優(yōu)點(diǎn) :效率高。由于 java是利用本地函數(shù)機(jī)制與數(shù) 據(jù)庫(kù)提供的函數(shù)庫(kù)溝通,而這些函數(shù)庫(kù)通常是數(shù)據(jù) 庫(kù)廠商精心優(yōu)化了的,所以效率很高! 缺點(diǎn) :用戶必須安裝數(shù)據(jù)庫(kù)的函數(shù)庫(kù) JDBC
6、Driver介紹 Type3Pure Java Driver for Database MiddleWare 這種類型的驅(qū)動(dòng)就是要解決上面兩種驅(qū)動(dòng)所存在的問(wèn)題。首先這 種驅(qū)動(dòng)程序必須有一個(gè)中間層服務(wù)器 (middleware server),當(dāng)用戶 要與數(shù)據(jù)庫(kù)溝通時(shí),會(huì)利用 JDBC與中間層服務(wù)器連接,而中間層 服務(wù)器會(huì)將 JDBC的調(diào)用轉(zhuǎn)換成數(shù)據(jù)庫(kù)的協(xié)議并調(diào)用數(shù)據(jù)庫(kù),最后 將數(shù)據(jù)庫(kù)的返回值再轉(zhuǎn)換成 JDBC的格式返回給用戶。如此一來(lái)用 戶就不需要設(shè)置 ODBC數(shù)據(jù)源或者安裝數(shù)據(jù)庫(kù)連接的函數(shù)庫(kù)了。 事實(shí)上,中間層服務(wù)器還是利用 ODBC或者函數(shù)庫(kù)來(lái)與數(shù)據(jù)庫(kù)進(jìn) 行溝通的。 優(yōu)點(diǎn):用戶端
7、不用做任何設(shè)置;直接連接的是中間層服務(wù)器,所 以驅(qū)動(dòng)程序 SIZE較小;非常適用于 Applet中要連接數(shù)據(jù)庫(kù)的應(yīng)用。 缺點(diǎn):要花錢買中間層服務(wù)器,且需要考慮它的性能及穩(wěn)定性 JDBC Driver介紹 Type4Direct-to-Database Pure Java Driver 算是真正的 JDBC驅(qū)動(dòng)程序,因?yàn)檫@種驅(qū)動(dòng)程序完 全由 Java完成,包括與數(shù)據(jù)庫(kù)打交道的各種網(wǎng)絡(luò)、 溝通協(xié)議,幾乎所有的數(shù)據(jù)庫(kù)廠商都提供了這種類 型的驅(qū)動(dòng)程序,甚至有公司在專門制作這種驅(qū)動(dòng)程 序。 優(yōu)點(diǎn):性能好,不必事先安裝任何函數(shù)庫(kù)或作任何 設(shè)置,是選擇驅(qū)動(dòng)程序時(shí)非常好的選擇。 缺點(diǎn):不同
8、的數(shù)據(jù)庫(kù)需要不同的驅(qū)動(dòng)。 JDBC Driver介紹 4種類型的驅(qū)動(dòng)比較表 T ype1 T ype2 T ype3 T ype4 客戶端設(shè)置 設(shè)置 O DB C 數(shù) 據(jù)源 設(shè)置數(shù)據(jù)庫(kù)連 接的函數(shù)庫(kù) 無(wú) 無(wú) 服務(wù)器端設(shè)置 無(wú) 無(wú) 中間層服務(wù)器 無(wú) 性能 較差 優(yōu) 較差 優(yōu) 100% Java ? 否 否 是 是 使用時(shí)機(jī) 測(cè)試 數(shù)據(jù)庫(kù)連接的 函數(shù)庫(kù)已經(jīng)安 裝 Applet Java Applic at ion 及大多數(shù)情形 總結(jié): 基本上 Type1與 Type2屬于同一種類型,而 Type3與 Type4則都是 數(shù)據(jù) pure Java的 JDBC驅(qū)動(dòng)程序
9、 一般情況下都使用 Type4, Type1用于測(cè)試或暫時(shí)找不到其他驅(qū)動(dòng) 的情況下 JDBC Driver介紹 思考:怎樣知道自己現(xiàn)在到底用的是那種類型 的驅(qū)動(dòng)呢? 如果須設(shè)置用戶端,則為 Type1或 Type2;反之若 不需考慮用戶端,則為 Type3或者 Type4。 在 Type1與 Type2中,若需設(shè)置的是 ODBC數(shù)據(jù)源, 則為 Type1,否則為 Type2 在 Type3與 Type4中,若存在中間層服務(wù)器,則為 Type3,否則為 Type4 創(chuàng)建數(shù)據(jù)庫(kù)的連接 環(huán)境設(shè)置步驟: 找到 JDBC驅(qū)動(dòng)程序,通常以一個(gè)或者多個(gè) Jar包的 形式提供 判
10、斷驅(qū)動(dòng)程序的 Type,根據(jù) Type作一些使用前的 額外設(shè)置,如: Type1: 安裝 ODBC驅(qū)動(dòng)程序、設(shè)置 ODBC數(shù)據(jù)源 Type2: 安裝 DB Client的函數(shù)庫(kù)、設(shè)置數(shù)據(jù)庫(kù)的連接 Type3: 安裝設(shè)置 Middle Ware服務(wù)器 Type4: 無(wú) 將驅(qū)動(dòng)程序 jar包設(shè)置到 classpath中 創(chuàng)建數(shù)據(jù)庫(kù)的連接 一個(gè)基本的 JDBC應(yīng)用的開(kāi)發(fā)都包含以下步驟: 引入相應(yīng)的包 加載 JDBC驅(qū)動(dòng)程序 創(chuàng)建連接對(duì)象 創(chuàng)建 SQL語(yǔ)句對(duì)象 執(zhí)行數(shù)據(jù)庫(kù)操作 如果有查詢結(jié)果集返回,處理結(jié)果集 釋放相關(guān)資源 創(chuàng)建數(shù)據(jù)庫(kù)的連接
11、引入相應(yīng)的包 import java.sql.*; import javax.sql.*;(高級(jí)應(yīng)用 ) 加載 JDBC驅(qū)動(dòng)程序 Class.forName(“JDBC驅(qū)動(dòng)類名 ); 每個(gè) Driver類在得到加載的時(shí)候,一般都會(huì)自動(dòng)創(chuàng)建一個(gè)它本 身的實(shí)例,并通過(guò) DriverManager類的 registerDriver方法來(lái) 自動(dòng)注冊(cè)該實(shí)例;程序員也可以顯示的調(diào)用 newInstance()方 法強(qiáng)制實(shí)施這一過(guò)程,即: Class.forName(“JDBC驅(qū)動(dòng)類名 ”).newInstance(); 對(duì)于 ”JDBC驅(qū)動(dòng)類名 ”, Type4各有不同, Type1均 為 ”su
12、n.jdbc.odbc.JdbcOdbcDriver” 創(chuàng)建數(shù)據(jù)庫(kù)的連接 創(chuàng)建連接對(duì)象 Connection con = DriverManager.getConnection(“數(shù)據(jù)庫(kù) url”, “userName”, “password”); DriverManager類會(huì)嘗試找到與傳遞進(jìn)來(lái)的 url字符串所代表的 數(shù)據(jù)庫(kù)進(jìn)行連接的驅(qū)動(dòng)程序 (DriverManager類存有已注冊(cè)的 Driver類的清單 ),然后創(chuàng)建一個(gè)連接對(duì)象并返回。 關(guān)于 ”數(shù)據(jù)庫(kù) url”JDBC URL標(biāo)準(zhǔn)部分由三部分組成, jdbc:: jdbc固定 標(biāo)識(shí)驅(qū)動(dòng)名或數(shù)據(jù)庫(kù)連接機(jī)制,如 mysql
13、 一種標(biāo)識(shí)數(shù)據(jù)庫(kù)的方法,如 //localhost/mydb MySQL中 mydb數(shù)據(jù)庫(kù)的 url完整寫(xiě)法: jdbc:mysql://localhost/mydb 創(chuàng)建數(shù)據(jù)庫(kù)的連接 創(chuàng)建 SQL語(yǔ)句對(duì)象 Statement stmt = con.createStatement(); SQL語(yǔ)句對(duì)象用于向數(shù)據(jù)庫(kù)傳送 SQL語(yǔ)句,另外還有 PreparedStatement和 CallableStatement這兩種語(yǔ)句對(duì)象。 用 SQL語(yǔ)句對(duì)象執(zhí)行數(shù)據(jù)庫(kù)操作 查詢: ResultSet rs = statement.executeQuery(String sql); 更新
14、 (刪除 ): int updatedrowcount = statement.executeUpdate(String sql); 創(chuàng)建數(shù)據(jù)庫(kù)的連接 如果有查詢結(jié)果集返回,處理結(jié)果集 調(diào)用 SQL語(yǔ)句對(duì)象的方法對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢操作后,將返回一個(gè) ResultSet對(duì)象,此對(duì)象是由統(tǒng)一形式的列組織的數(shù)據(jù)行組成。 ResultSet對(duì)象一次只能看到一個(gè)數(shù)據(jù)行,使用 next()方法走到下一 數(shù)據(jù)行。獲得一行數(shù)據(jù)后, ResultSet對(duì)象可以使用 getXxx() 方 法獲得字段值,將位置索引 (第一列為 1, 第二列為 2等 )或字段名傳 遞給 getXxx(..)方法的參數(shù)即可
15、ResultSet類的若干方法 (查閱 JDK文檔 ) Boolean next() String getString(int columnIndex) Int getInt(int columnIndex) float getFloat(int columnIndex) 釋放相關(guān)資源 rs.close(); stmt.close(); con.close(); ResultSet對(duì)象會(huì)在生成它的 SQL語(yǔ)句對(duì)象被關(guān)閉或重新執(zhí)行時(shí)自動(dòng)關(guān)閉 使用 Type4驅(qū)動(dòng)連接數(shù)據(jù)庫(kù)舉例 SQL Server2000 驅(qū)動(dòng)程序 jar文件: msbase.jar, ms
16、sqlserver.jar, msutil.jar 驅(qū)動(dòng)類名: com.microsoft.jdbc.sqlserver.SQLServerDriver 數(shù)據(jù)庫(kù) URL, 如 yinhe數(shù)據(jù)庫(kù): jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=yinh e 1433是 SQL Server數(shù)據(jù)庫(kù)連接服務(wù)的默認(rèn)端口,可用 telnet 先測(cè)試 舉例:檢索出一個(gè)數(shù)據(jù)表里的所有內(nèi)容,并打印結(jié)果到命令 提示符終端。 使用 Type4驅(qū)動(dòng)連接數(shù)據(jù)庫(kù)舉例 MySQL MySQL沒(méi)有提供數(shù)據(jù)庫(kù)操作的 GUI,數(shù)據(jù)庫(kù)、表
17、的創(chuàng)建需 要使用 DDL 驅(qū)動(dòng)程序 jar文件: mm.mysql-2.0.4-bin.jar 驅(qū)動(dòng)類名: org.gjt.mm.mysql.Driver 數(shù)據(jù)庫(kù) URL, 如 yinhe數(shù)據(jù)庫(kù): jdbc:mysql://localhost/yinhe 復(fù)習(xí)與實(shí)踐 使用 Type4驅(qū)動(dòng)連接 MySQL數(shù)據(jù)庫(kù) 安裝 MySQL數(shù)據(jù)庫(kù) 使用 DDL創(chuàng)建數(shù)據(jù)庫(kù) (如 yinhe)、數(shù)據(jù)表 (employees) 使用 Java連接數(shù)據(jù)庫(kù),并檢索出一個(gè)數(shù)據(jù)表中的全 部?jī)?nèi)容打印到屏幕終端 復(fù)習(xí)內(nèi)容: JDBC數(shù)據(jù)庫(kù)應(yīng)用的一般流程, Type4驅(qū)動(dòng)的使用 使用 T
18、ype4驅(qū)動(dòng)連接其它常見(jiàn)數(shù)據(jù)庫(kù) Oracle Class.forName(“oracle.jdbc.driver.OracleDriver”); Connection con = DriverManager.getConnection(“jdbc:oracle:thin:localhost: 1521:databaseName”, “user”, “password”); Postgre SQL Class.forName(“org.postgresql.Driver”); Connection con = DriverManager.getConnection(“jdbc:postgr
19、esql://localhost/d atabaseName”, “user”, “password”); 使用 Type1驅(qū)動(dòng)連接數(shù)據(jù)庫(kù)舉例 要點(diǎn): 首先要設(shè)置并測(cè)試 ODBC數(shù)據(jù)源 Type1驅(qū)動(dòng)名均為: sun.jdbc.odbc.JdbcOdbcDriver 此驅(qū)動(dòng)位于 rt.jar包中,所以 classpath不需要專門設(shè)置 數(shù)據(jù)庫(kù) URL: jdbc:odbc:數(shù)據(jù)源名字 如 yinhe數(shù)據(jù)庫(kù),對(duì)應(yīng)的 ODBC數(shù)據(jù)源是 milkway,則為: jdbc:odbc:milkway 舉例: 使用 Type1驅(qū)動(dòng)連接 SQL Server20
20、00數(shù)據(jù)庫(kù) 復(fù)習(xí)與實(shí)踐 使用 Type1驅(qū)動(dòng)連接 Access數(shù)據(jù)庫(kù) Notes: 與使用 Type1驅(qū)動(dòng)連接 SQL Server2000的步驟完全 一樣 復(fù)習(xí)內(nèi)容 JDBC數(shù)據(jù)庫(kù)應(yīng)用的一般流程, Type1驅(qū)動(dòng)的使用 補(bǔ)充小技巧 不用手動(dòng)注冊(cè) ODBC數(shù)據(jù)源直接連接 Access數(shù)據(jù)庫(kù): 只需將數(shù)據(jù)庫(kù)得連接 url寫(xiě)成 “jdbc:odbc:Driver=Microsoft Access Driver (*.mdb);DBQ=c:test.mdb“的形式即可,對(duì) 于其他的小型數(shù)據(jù)庫(kù)如 foxpro,甚至 excel也可以。 以數(shù)據(jù)庫(kù)的方式查 詢 Exce
21、l表格 方法,通過(guò) jdbc-odbc橋接器 (即 Type1驅(qū)動(dòng) ) 步驟: (1). 建立 ODBC數(shù)據(jù)源,指向要連接的 Excel文件 (2). Excel文件中是沒(méi)有像數(shù)據(jù)庫(kù)中那樣的數(shù)據(jù)表的, 需要手工指定,數(shù)據(jù)表的概念在 Excel文件中對(duì)應(yīng) 就是自定義名稱:在 Excel表格中選中一塊要操作 的區(qū)域 -- “插入 ”--“名稱 ”--“定義 ”, 取個(gè)名字,這 個(gè)名字就是在程序中要操作的數(shù)據(jù)表名。 (3). 以后的步驟完全同其他情況下 Type1驅(qū)動(dòng)的使 用。 作業(yè): 在自己機(jī)器上安裝 SQL Server2000數(shù)據(jù)庫(kù) 編寫(xiě)一個(gè)類用于連接數(shù)據(jù)庫(kù),其中數(shù)據(jù)庫(kù) URL,用戶名和密碼可以通過(guò)構(gòu)造函數(shù)傳遞 使用上面的類連接數(shù)據(jù)庫(kù),并用 Statement執(zhí) 行一個(gè)查詢語(yǔ)句,打印出結(jié)果
- 溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中生物對(duì)照實(shí)驗(yàn)專題復(fù)習(xí)課件
- 初中物理資源九年級(jí)第十五單元課件串并聯(lián)識(shí)別
- 咯血與嘔血課件
- What's_your_number_課件
- 外研版七下Module3Unit1(教育精品)
- 浙美版三年級(jí)上冊(cè)美術(shù)第15課-剪雪花教學(xué)ppt課件
- 蘇教版六年級(jí)下冊(cè)數(shù)學(xué)正比例和反比例的意義課件
- 蘇教版五下《單式折線統(tǒng)計(jì)圖》教研課件
- 固態(tài)相變概論
- 三角形全等的判定復(fù)習(xí)-課件2
- 太陽(yáng)能發(fā)展趨勢(shì)課件
- 道路工程監(jiān)理最新規(guī)劃范本課件
- SPC及CPK教程(理論篇)課件
- Travel-Plan旅行計(jì)劃-PPT
- 新冠肺炎疫情期間醫(yī)務(wù)人員防護(hù)技術(shù)指南