《Java數(shù)據(jù)庫連接》PPT課件
《《Java數(shù)據(jù)庫連接》PPT課件》由會員分享,可在線閱讀,更多相關(guān)《《Java數(shù)據(jù)庫連接》PPT課件(36頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、唐好選Email: 主 要 內(nèi) 容ODBC介 紹JDBC介 紹JDBC例 程JDBC結(jié) 構(gòu) (包 括 JDBC API和 JDBC驅(qū) 動 )Java JDBC應(yīng) 用 框 架Java JDBC基 本 類 介 紹Java JDBC異 常事 務(wù) 處 理 ODBC介 紹ODBC (Open DataBase Connectivity)ODBC是 用 C語 言 實(shí) 現(xiàn) 的 一 種 標(biāo) 準(zhǔn) 應(yīng) 用 程 序 數(shù) 據(jù) 庫接 口 , 包 括 以 下 幾 個(gè) 方 面 的 內(nèi) 容應(yīng) 用 程 序 接 口 :統(tǒng) 一 的 SQL編 程 接 口驅(qū) 動 器 管 理 器 :為 應(yīng) 用 程 序 裝 載 數(shù) 據(jù) 庫 驅(qū) 動 器數(shù)
2、據(jù) 庫 驅(qū) 動 器 :實(shí) 現(xiàn) ODBC的 函 數(shù) 調(diào) 用 ,提 供 對 特 定 數(shù) 據(jù) 源的 SQL請 求數(shù) 據(jù) 源 :由 DBMS、 操 作 系 統(tǒng) 和 相 關(guān) 的 網(wǎng) 絡(luò) 平 臺 組 成 JDBC介 紹JDBC(Java DataBase Connectivity)JDBC 是 一 種 用 于 執(zhí) 行 SQL語 句 的 Java API , 可以 按 統(tǒng) 一 的 方 式 訪 問 數(shù) 據(jù) 庫JDBC程 序 包 : java.sqlJDBC提 供 實(shí) 現(xiàn) :訪 問 數(shù) 據(jù) 庫 與 平 臺 無 關(guān) 對 數(shù) 據(jù) 庫 使 用 者 而 言 是 透 明 的對 數(shù) 據(jù) 庫 本 身 而 言 也 是 透 明
3、的幾 乎 每 個(gè) 數(shù) 據(jù) 庫 供 應(yīng) 商 都 具 有 JDBC驅(qū) 動 JDBC介紹JDBC可 以 使 java應(yīng) 用 (APP和 Applet)同 大 量 關(guān) 系數(shù) 據(jù) 庫 系 統(tǒng) 之 間 建 立 起 獨(dú) 立 于 數(shù) 據(jù) 庫 的 連 接 ( 例如 Oracle/Sybase/SQL Server等 )JDBC主 要 實(shí) 現(xiàn) 以 下 功 能連 接 到 數(shù) 據(jù) 庫向 數(shù) 據(jù) 庫 發(fā) 送 SQL語 句處 理 數(shù) 據(jù) 庫 返 回 的 結(jié) 果執(zhí) 行 更 新 /插 入 和 刪 除 操 作執(zhí) 行 存 儲 過 程 import java.sql.* try Class.forName(“sun.jdbc.od
4、bc.JdbcOdbcDriver”); Connection connection = DriverManager.getConnection(“jdbc:odbc:Demo”,”a”,”a”);Step1:連 接 到 數(shù) 據(jù) 庫 Statement statement = connection.createStatement(); String sql = “SELECT * FROM student”; ResultSet resultSet = statement.executeQuery(sql);Step2:執(zhí) 行 SQL語 句 , 查 詢 數(shù) 據(jù) 庫JDBC例 程 while(
5、resultSet.next() ) name = resultSet.getString(1); phone = resultSet.getString(2); System.out.println( name + “,” + phone ); Step3:產(chǎn) 生 查 詢 結(jié) 果 resultSet.close(); statement.close(); connection.close(); catch(Exception e) Step4:關(guān) 閉 連 接JDBC例 程 步 驟 1: 得 到 正 確 的 driver 并 創(chuàng) 建 一 個(gè) 連 接Driver 是 動 態(tài) 裝 入 的The C
6、onnection URL 是 與 數(shù) 據(jù) 庫 有 關(guān) 的 , 并 指 向服 務(wù) 器Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Connection connection = DriverManager.getConnection(“jdbc:odbc:Demo”,”a”,”a”);JDBC例 程 步 驟 2 : 建 立 一 個(gè) statement; 向 字 符 串 中 寫 入 SQL 命令 , 執(zhí) 行 它SQL 命 令 會 傳 送 到 數(shù) 據(jù) 庫會 返 回 一 個(gè) 結(jié) 果 集 對 象 (ResultSetObject),該 對 象包 含 查 詢
7、 后 的 結(jié) 果Statement statement = connection.createStatement();String sql = “SELECT * FROM student”;ResultSet resultSet = statement.executeQuery(sql);JDBC例程 步 驟 3 : 分 析 結(jié) 果get()方 法 得 到 每 種 數(shù) 據(jù) 類 型 的 數(shù) 據(jù) (getString(col), getDate(col), )更 改 數(shù) 據(jù) 的 方 法 (updateString(col, val), )scrollable 結(jié) 果 集 可 以 定 位 具 體
8、行 (first(), last(), previous(), next(), absolute(int), )while( resultSet.next() ) name = resultSet.getString(1); phone = resultSet.getString(2); System.out.println( name + “,” + phone );JDBC例 程 步 驟 4 : 操 作 完 成 后 要 關(guān) 閉關(guān) 閉 順 序 很 重 要 :1. ResultSet2. Statement3. Connection resultSet.close(); statement.c
9、lose(); connection.close();JDBC例程 JDBC結(jié)構(gòu)JDBC結(jié) 構(gòu) 由 兩 個(gè) 層 次 組 成JDBC API支 持 Java應(yīng) 用 到 JDBC驅(qū) 動 管 理器 的 通 信JDBC驅(qū) 動 API支 持 JDBC驅(qū) 動 管 理 器 到ODBC驅(qū) 動 的 通 信JDBC API同 時(shí) 支 持 數(shù) 據(jù) 庫 訪 問 的 兩 層 和 三 層模 型 JDBC結(jié)構(gòu) 在 兩 層 數(shù) 據(jù) 庫 訪 問 模 型 中 ,應(yīng) 用 程 序 直 接 同 數(shù) 據(jù) 庫 進(jìn) 行通 信 ,兩 層 模 型 需 要 JDBC的 驅(qū) 動 ,由 JDBC驅(qū) 動 把 SQL語句 直 接 傳 遞 給 數(shù) 據(jù) 庫
10、,并 將 結(jié) 果 發(fā) 送 回 應(yīng) 用 程 序 JDBC結(jié)構(gòu) 在 三 層 的 數(shù) 據(jù) 庫 訪 問 模 型 中 ,JDBC驅(qū) 動 把 用 戶 命 令 發(fā) 送給 一 個(gè) 中 間 層 應(yīng) 用 服 務(wù) ,然 后 由 它 把 命 令 發(fā) 送 給 數(shù) 據(jù) 庫 ,數(shù) 據(jù) 庫 處 理 這 些 命 令 ,把 結(jié) 果 發(fā) 送 回 中 間 層 ,由 中 間 層 把結(jié) 果 發(fā) 送 回 應(yīng) 用 程 序 JDBC結(jié)構(gòu)對 于 應(yīng) 用 程 序 開 發(fā) 人 員 , JDBC API允 許 如 下 操 作連 接 到 數(shù) 據(jù) 源發(fā) 送 SQL語 句通 過 瀏 覽 /檢 查 和 編 輯 數(shù) 據(jù) 的 方 法 來 處 理 結(jié) 果訪 問 數(shù)
11、 據(jù) 庫 的 元 數(shù) 據(jù) 和 查 詢 結(jié) 果 JDBC驅(qū)動所 有 的 Java程 序 與 數(shù) 據(jù) 庫 創(chuàng) 建 連 接 過 程 的 第 一 步 是在 JVM中 注 冊 JDBC驅(qū) 動靜 態(tài) 注 冊DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver();動 態(tài) 注 冊Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);一 旦 JDBC驅(qū) 動 程 序 用 DriverManager注 冊 了 , 就 可 用 于 建立 到 數(shù) 據(jù) 庫 的 連 接 JDBC驅(qū)動JDBC數(shù) 據(jù) 庫 驅(qū) 動 具
12、有 四 種 類 型JDBC-ODBC橋 :JDBC先 連 接 到 ODBC,ODBC再 連接 到 數(shù) 據(jù) 庫 ,把 JDBC的 方 法 轉(zhuǎn) 換 為 ODBC的 功 能部 分 java驅(qū) 動 :直 接 連 接 到 供 應(yīng) 商 客 戶 庫 中 中 間 件 驅(qū) 動 :由 JDBC連 接 到 中 間 件 ,中 間 件 再 連 接到 數(shù) 據(jù) 庫 上純 java驅(qū) 動 :直 接 把 JDBC的 驅(qū) 動 轉(zhuǎn) 化 為 DBMS使 用的 網(wǎng) 絡(luò) 協(xié) 議 ,允 許 從 客 戶 機(jī) 上 直 接 調(diào) 用 DBMS服 務(wù)器 ,是 一 種 “ 瘦 ” 驅(qū) 動類 型 3和 類 型 4都 可 以 用 在 有 關(guān) 因 特 網(wǎng)
13、的 應(yīng) 用 程 序 中 ClientJDBC-ODBC BridgeJDBC APIJava AppODBC DriverODBC-supportedNative DriverNative program (must be installed)Java program (could be downloaded) ServerRDBMS運(yùn) 行 在 Windows上需 要 在 客 戶 端 安 裝 ODBC driver 類型 1:JDBC-ODBC驅(qū)動import java.sql.* try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); Conne
14、ction connection = DriverManager.getConnection(“jdbc:odbc:Demo”,”a”,”a”); ClientJDBC-Native BridgeJDBC APIJava AppNative DriverNative program (must be installed)Java program (could be downloaded) ServerRDBMS類 型 2:部 分 java驅(qū) 動 ( 本 地 API驅(qū) 動 ) 客 戶 端 安 裝 driver driver將 JDBC請 求 轉(zhuǎn) 成 數(shù) 據(jù) 庫 本 地 API請 求 每 臺 客
15、戶 機(jī) 上 加 載 數(shù) 據(jù) 庫 庫 文 件 不 能 用 在 因 特 網(wǎng) 上 import java.sql.* try Class.forName(“com.ibm.db2.jdbc.app.DB2Driver”); Connection connection = DriverManager.getConnection(“jdbc:db2:Demo”,”a”,”a”);類 型 2:部 分 java驅(qū) 動 ( 本 地 API驅(qū) 動 ) 類型 3 :中間件驅(qū)動(網(wǎng)絡(luò)協(xié)議驅(qū)動)Client bJDBC-Net BridgeJDBC APIJava AppClient aClient c Networ
16、kServer RDBMSc Native program (must be installed)Java program (could be downloaded)Network Protocol RDBMSbRDBMSaDatabase ProtocolaDatabase ProtocolbDatabase Protocolc 網(wǎng) 絡(luò) 服 務(wù) 器 作 用負(fù) 責(zé) 管 理 職 責(zé)緩 沖 caching池 pooling Client ServerConnection in use Free ConnectiongetConnection() Connection Pool RDBMS 類型 3
17、 :中間件驅(qū)動(網(wǎng)絡(luò)協(xié)議驅(qū)動) 類型 4 :純java驅(qū)動(本地協(xié)議驅(qū)動)其 實(shí) 現(xiàn) 不 需 要 客 戶 端 的 任 何 配 置 !Client JDBC DriverJDBC APIJava App Native program (must be installed)Java program (could be downloaded) ServerRDBMS import java.sql.* try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);conn = DriverManager.getConnection(j
18、dbc:microsoft:sqlserver:/TANGHX:1433;DatabaseName=teach,sa,);類型 4 :純java驅(qū)動(本地協(xié)議驅(qū)動) MySQLClass.forName(“org.gjt.mm.mysql.Driver”)DriverManage.getConnection(“jdbc.mysql:/Hostname:3306/DatabaseName”,sUsr,spwd)OracleClass.forName(“oracle.jdbc.driver.OracleDriver”);DriverManager.getConnection(“jdbc:oracl
19、e:thin:1521:DatabaseName”,sUsr,sPwd) SybaseClass.forName(“com.sybase.jdbc2.jdbc.SybDriver”)DriverManage.getConnection(“jdbc.sybase:Tds:HostName:2638”,sUsr,spwd)SqlServerClass.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);DriverManager.getConnection(“jdbc:microsoft:sqlserver:/HostName:1433;
20、DatabaseName=demo”,sUsr,sPwd)DB2Class.forName(“.DB2Driver”);DriverManager.getConnection(“jdbc:db2:/HostName/DatabaseName”,sUsr,sPwd)JDBC URL DriverManage類 可 維 護(hù) 驅(qū) 動 實(shí) 現(xiàn) 的 列 表 ,最 終 向 應(yīng)用 程 序 提 供 一 個(gè) 匹 配 了 JDBC URL的 驅(qū) 動 實(shí) 現(xiàn)Driver類 是 JDBC驅(qū) 動 的 接 口 ,任 何 特 定 的 數(shù) 據(jù) 庫 驅(qū)動 都 必 須 實(shí) 現(xiàn) 該 接 口Connection接 口 用 來 把 一
21、 系 列 SQL語 句 發(fā) 送 給 數(shù) 據(jù)庫 ,并 管 理 其 提 交 或 中 斷 , 具 體 包 含 如 下 步 驟加 載 數(shù) 據(jù) 庫 驅(qū) 動定 義 URL建 立 連 接Java.sql核心類介紹 JDBC支 持 三 種 類 型 的 語 句Statement:用 來 立 即 執(zhí) 行 SQL語 句PreparedStatement:用 來 執(zhí) 行 編 譯 后 的 SQL語 句CollableStatement:用 來 執(zhí) 行 存 儲 過 程Statement用 來 執(zhí) 行 靜 態(tài) SQL語 句 ,并 獲 得 處 理 結(jié) 果可 使 用 Connection對 象 中 的 createStatem
22、ent()方 法 創(chuàng)建 Statement對 象對 于 SELECT語 句 ,使 用 的 方 法 是 executeQuery()對 于 諸 如 UPDATE/DELETE/DDL等 語 句 ,使 用 的 方 法 是executeUpdate()Java.sql核心類介紹 PreparedStatement:用 來 執(zhí) 行 編 譯 后 的 SQL語 句Java.sql核心類介紹PreparedStatement pstmt = con.prepareStatement(UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?); pstmt.setBigDeci
23、mal(1, 153833.00);pstmt.setInt(2, 110592);pstmt.executeUpdate();CallableStatement:用 來 執(zhí) 行 存 儲 過 程Connection.prepareCall(call proc_test(?,?); ResultSet接 口 封 裝 了 代 表 數(shù) 據(jù) 庫 查 詢 返 回 數(shù) 據(jù) 的 對象Statement接 口 的 executeQuery()方 法 返 回 了 ResultSet對 象獲 得 ResultSet對 象 的 句 柄 之 后 ,指 針 最 初 定 位 在 第 1行 之 前 ,使 用 ResultS
24、et對 象 的 next()方 法 可 以 循 環(huán) 遍 歷數(shù) 據(jù) 庫 返 回 全 部 數(shù) 據(jù) 行Java.sql核心類介紹 DatabaseMetaData接 口 提 供 了 描 述 數(shù) 據(jù) 庫 全 局 信息 的 所 有 變 量 和 方 法Java.sql核心類介紹DatabaseMetaData dm = conn.getMetaData();System.out.println(dm.getDatabaseProductName();System.out.println(dm.getDatabaseProductVersion();System.out.println(dm.getDriv
25、erName();System.out.println(dm.getDriverVersion();System.out.println(dm.getMaxRowSize();System.out.println(dm.getURL();System.out.println(dm.getUserName(); JDBC異常類型JDBC提 供 的 異 常 類 型 包 括 :SQLException/SQLWarning/DataTruncationJava.sql程 序 包 中 大 多 數(shù) 方 法 都 用 SQLException指 示 異常 ,要 求 用 try/catch程 序 塊 處 理
26、異 常 try catch(SQLException sqle) while(sqle!=null) System.err.print(“SQLException: “); System.println(sqle.toString(); sqle=sqle.getNextException(); 事務(wù)處理 不 進(jìn) 行 事 務(wù) 處 理 例 :1. Client A reads the record(a, b)2. Client B reads the record(a, b)3. Client A changes a for x and writes(x, b)4. Client B chang
27、es b for z and writes(a, z)客 戶 B覆 蓋 了 A的 變 化 進(jìn)行事務(wù)處理, 記錄可得到保護(hù):1. Transaction 1 begins; Client A reads the record(a, b)2. Transaction 2 begins; Client B reads the record(a, b)3. Client A changes a for x and writes(x, b); Transaction 1 ends4. Client B changes b for z and writes(a, z); 由 于 記 錄 已 被 更 新 ,
28、事 務(wù) 2更 新 失 敗 JDBC事務(wù)支持Connection對 象 省 設(shè) 置 為 自 動 提 交 方 式 ,意 味 著 每 次 執(zhí)行 一 條 語 句 ,都 會 向 數(shù) 據(jù) 庫 提 交Connection對 象 可 直 接 控 制 事 務(wù) 并 進(jìn) 行 提 交 或 回 滾 ,通常 由 以 下 幾 個(gè) 方 法 完 成Void setAutoCommit(boolean autoCommit)Void commit()Void rollback()在 事 務(wù) 的 開 始 位 置 ,通 常 調(diào) 用 con.setAutoCommit(false)方 法 ,如 果 成 組 的 更 新 操 作 都 成 功 執(zhí) 行 ,便 調(diào) 用mit()方 法 ,如 果 發(fā) 生 了 異 常 ,則 調(diào) 用 con.rollback()方 法 撤 消 全 部 修 改 我 們 的 例 子數(shù) 據(jù) 的 導(dǎo) 入 需 要 將 數(shù) 據(jù) 寫 入 數(shù) 據(jù) 庫執(zhí) 行 Insert數(shù) 據(jù) 導(dǎo) 出 需 要 從 數(shù) 據(jù) 庫 讀 取 數(shù) 據(jù)執(zhí) 行 查 詢數(shù) 據(jù) 的 添 加 和 修 改 需 要 寫 入 數(shù) 據(jù) 庫執(zhí) 行 insert 或 update數(shù) 據(jù) 的 刪 除 需 要 刪 除 數(shù) 據(jù) 庫 記 錄執(zhí) 行 Delete
- 溫馨提示:
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ù)指南