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