SlideShare a Scribd company logo
Submit Search
Upload
CH16:整合資料庫
Report
Share
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
•
0 likes
•
359 views
1
of
107
CH16:整合資料庫
•
0 likes
•
359 views
Report
Share
Download Now
Download to read offline
Technology
了解JDBC架構 使用JDBC API 瞭解交易與隔離層級 認識RowSet
Read more
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
Recommended
Ch07 使用 JSTL by
Ch07 使用 JSTL
Justin Lin
161 views
•
74 slides
CH17:反射與類別載入器 by
CH17:反射與類別載入器
Justin Lin
280 views
•
65 slides
CH04:認識物件 by
CH04:認識物件
Justin Lin
421 views
•
87 slides
CH09:Collection與Map by
CH09:Collection與Map
Justin Lin
288 views
•
87 slides
Ch09 整合資料庫 by
Ch09 整合資料庫
Justin Lin
233 views
•
92 slides
10. 資料永續與交換 by
10. 資料永續與交換
Justin Lin
156 views
•
70 slides
More Related Content
What's hot
整合資料庫 by
整合資料庫
Justin Lin
855 views
•
102 slides
Ch06 使用 JSP by
Ch06 使用 JSP
Justin Lin
250 views
•
83 slides
Java SE 8 技術手冊第 1 章 - Java平台概論 by
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
11.6K views
•
44 slides
Java SE 8 技術手冊第 16 章 - 整合資料庫 by
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
2.9K views
•
101 slides
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤 by
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Justin Lin
1.8K views
•
55 slides
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL by
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Justin Lin
2.9K views
•
71 slides
What's hot
(20)
整合資料庫 by Justin Lin
整合資料庫
Justin Lin
•
855 views
Ch06 使用 JSP by Justin Lin
Ch06 使用 JSP
Justin Lin
•
250 views
Java SE 8 技術手冊第 1 章 - Java平台概論 by Justin Lin
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
•
11.6K views
Java SE 8 技術手冊第 16 章 - 整合資料庫 by Justin Lin
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
•
2.9K views
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤 by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Justin Lin
•
1.8K views
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Justin Lin
•
2.9K views
Ch08 自訂標籤 by Justin Lin
Ch08 自訂標籤
Justin Lin
•
133 views
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應 by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Justin Lin
•
4.5K views
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式 by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Justin Lin
•
19.2K views
Ch02 撰寫與設定 Servlet by Justin Lin
Ch02 撰寫與設定 Servlet
Justin Lin
•
352 views
Ch03 請求與回應 by Justin Lin
Ch03 請求與回應
Justin Lin
•
236 views
Java SE 7 技術手冊投影片第 09 章 - Collection與Map by Justin Lin
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
•
2.5K views
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫 by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Justin Lin
•
3.4K views
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Justin Lin
•
6.1K views
深入模組化 by Justin Lin
深入模組化
Justin Lin
•
1K views
Java SE 7 技術手冊投影片第 05 章 - 物件封裝 by Justin Lin
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
•
2.6K views
Servlet & JSP 教學手冊第二版 - 課後練習解答 by Justin Lin
Servlet & JSP 教學手冊第二版 - 課後練習解答
Justin Lin
•
4.9K views
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE by Justin Lin
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Justin Lin
•
3.6K views
Ch13 整合 Spring MVC/Security by Justin Lin
Ch13 整合 Spring MVC/Security
Justin Lin
•
280 views
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API by Justin Lin
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
•
3.1K views
Similar to CH16:整合資料庫
Ch09 整合資料庫 by
Ch09 整合資料庫
Justin Lin
468 views
•
103 slides
Java_08:SQL by
Java_08:SQL
Brad Chao
584 views
•
17 slides
03.wls depoly jdbc by
03.wls depoly jdbc
Meng He
308 views
•
111 slides
Oracle Instance 介紹 by
Oracle Instance 介紹
Chien Chung Shen
2.5K views
•
45 slides
中远公司 Java培训资料 by
中远公司 Java培训资料
yiditushe
132 views
•
4 slides
SQL Server 資料庫版本控管 by
SQL Server 資料庫版本控管
Will Huang
9.4K views
•
28 slides
Similar to CH16:整合資料庫
(20)
Ch09 整合資料庫 by Justin Lin
Ch09 整合資料庫
Justin Lin
•
468 views
Java_08:SQL by Brad Chao
Java_08:SQL
Brad Chao
•
584 views
03.wls depoly jdbc by Meng He
03.wls depoly jdbc
Meng He
•
308 views
Oracle Instance 介紹 by Chien Chung Shen
Oracle Instance 介紹
Chien Chung Shen
•
2.5K views
中远公司 Java培训资料 by yiditushe
中远公司 Java培训资料
yiditushe
•
132 views
SQL Server 資料庫版本控管 by Will Huang
SQL Server 資料庫版本控管
Will Huang
•
9.4K views
Azure Data Lake 簡介 by Herman Wu
Azure Data Lake 簡介
Herman Wu
•
852 views
山頂洞人日記 - 回歸到最純樸的開發 by koji lin
山頂洞人日記 - 回歸到最純樸的開發
koji lin
•
842 views
開放原始碼 Ch2.4 app - oss - db (ver 1.0) by My own sweet home!
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
My own sweet home!
•
479 views
千呼萬喚始出來的 Java SE 7 by Justin Lin
千呼萬喚始出來的 Java SE 7
Justin Lin
•
1.9K views
02.web sphere培训 应用websphere by littlecong
02.web sphere培训 应用websphere
littlecong
•
432 views
Oracle 資料庫建立 by Chien Chung Shen
Oracle 資料庫建立
Chien Chung Shen
•
1.2K views
000 北京圣思园教育科技有限公司第一期面授培训大纲 by ArBing Xie
000 北京圣思园教育科技有限公司第一期面授培训大纲
ArBing Xie
•
786 views
Jdbc by vampire1128
Jdbc
vampire1128
•
576 views
Jdbc中驱动加载的过程分析(下) by yiditushe
Jdbc中驱动加载的过程分析(下)
yiditushe
•
193 views
Lucene实践 by 晓锋 陈
Lucene实践
晓锋 陈
•
655 views
Java类加载器 by Fu Cheng
Java类加载器
Fu Cheng
•
1K views
02.wls概览 by Meng He
02.wls概览
Meng He
•
583 views
2. java introduction by netdbncku
2. java introduction
netdbncku
•
1.4K views
Oracle北大青鸟完全教程 by yiditushe
Oracle北大青鸟完全教程
yiditushe
•
925 views
More from Justin Lin
Ch14 簡介 Spring Boot by
Ch14 簡介 Spring Boot
Justin Lin
872 views
•
22 slides
Ch12 Spring 起步走 by
Ch12 Spring 起步走
Justin Lin
274 views
•
31 slides
Ch11 簡介 JavaMail by
Ch11 簡介 JavaMail
Justin Lin
157 views
•
8 slides
Ch10 Web 容器安全管理 by
Ch10 Web 容器安全管理
Justin Lin
153 views
•
30 slides
Ch05 Servlet 進階 API、過濾器與傾聽器 by
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
204 views
•
69 slides
Ch04 會話管理 by
Ch04 會話管理
Justin Lin
238 views
•
30 slides
More from Justin Lin
(20)
Ch14 簡介 Spring Boot by Justin Lin
Ch14 簡介 Spring Boot
Justin Lin
•
872 views
Ch12 Spring 起步走 by Justin Lin
Ch12 Spring 起步走
Justin Lin
•
274 views
Ch11 簡介 JavaMail by Justin Lin
Ch11 簡介 JavaMail
Justin Lin
•
157 views
Ch10 Web 容器安全管理 by Justin Lin
Ch10 Web 容器安全管理
Justin Lin
•
153 views
Ch05 Servlet 進階 API、過濾器與傾聽器 by Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
•
204 views
Ch04 會話管理 by Justin Lin
Ch04 會話管理
Justin Lin
•
238 views
CH1. 簡介 Web 應用程式 by Justin Lin
CH1. 簡介 Web 應用程式
Justin Lin
•
1.2K views
14. 進階主題 by Justin Lin
14. 進階主題
Justin Lin
•
406 views
13.並行、平行與非同步 by Justin Lin
13.並行、平行與非同步
Justin Lin
•
237 views
12. 除錯、測試與效能 by Justin Lin
12. 除錯、測試與效能
Justin Lin
•
153 views
11. 常用內建模組 by Justin Lin
11. 常用內建模組
Justin Lin
•
149 views
9. 資料結構 by Justin Lin
9. 資料結構
Justin Lin
•
292 views
8. open() 與 io 模組 by Justin Lin
8. open() 與 io 模組
Justin Lin
•
245 views
7. 例外處理 by Justin Lin
7. 例外處理
Justin Lin
•
115 views
6. 類別的繼承 by Justin Lin
6. 類別的繼承
Justin Lin
•
166 views
5. 從模組到類別 by Justin Lin
5. 從模組到類別
Justin Lin
•
169 views
4. 流程語法與函式 by Justin Lin
4. 流程語法與函式
Justin Lin
•
188 views
3.型態與運算子 by Justin Lin
3.型態與運算子
Justin Lin
•
199 views
1. Python起步走 by Justin Lin
1. Python起步走
Justin Lin
•
662 views
2. 從 REPL 到 IDE by Justin Lin
2. 從 REPL 到 IDE
Justin Lin
•
234 views
CH16:整合資料庫
1.
1
2.
整合資料庫 學習目標 • 了解JDBC架構 • 使用JDBC
API • 瞭解交易與隔離層級 • 認識RowSet 2
3.
簡介JDBC • 資料庫本身是個獨立運行的應用程式 • 撰寫的應用程式是利用網路通訊協定與資料 庫進行指令交換,以進行資料的增刪查找 3
4.
簡介JDBC • 應用程式會利用一組專門與資料庫進行通訊 協定的程式庫 4
5.
簡介JDBC • 應用程式如何呼叫這組程式庫? • 不同的資料庫通常會有不同的通訊協定 •
用以連線不同資料庫的程式庫在API上也會有 所不同 5
6.
簡介JDBC • JDBC全名Java DataBase
Connectivity • Java連線資料庫的標準規範,定義一組標準 類別與介面: – 應用程式需要連線資料庫時就呼叫這組標準API, 而標準API中的介面會由資料庫廠商實作,通常 稱之為JDBC驅動程式(Driver) 6
7.
簡介JDBC • JDBC應用程式開發者介面(Application Developer Interface) –
應用程式需要連線資料庫 – 相關API主要是座落於java.sql與javax.sql • JDBC驅動程式開發者介面(Driver Developer Interface) – 資料庫廠商要實作驅動程式時的規範,一般開發 者並不用瞭解 7
8.
簡介JDBC 8
9.
簡介JDBC • 應用程式會使用JDBC連線資料庫 9
10.
簡介JDBC • 廠商在實作JDBC驅動程式時,依方式可將驅 動程式分作四種類型 – Type
1:JDBC-ODBC Bridge Driver – Type 2:Native API Dirver – Type 3:JDBC-Net Driver – Type 4:Native Protocol Driver 10
11.
Type 1:JDBC-ODBC Bridge
Driver 11
12.
Type 1:JDBC-ODBC Bridge
Driver • 實作這種驅動程式非常簡單 • JDBC與ODBC並非一對一的對應,所以部份 呼叫無法直接轉換,因此有些功能是受限的 • 多層呼叫轉換結果,存取速度也會受到限制 • ODBC本身需在平台上先設定好,彈性不足, ODBC驅動程式本身也有跨平台的限制 12
13.
Type 2:Native API
Dirver 13
14.
Type 2:Native API
Dirver • 驅動程式本身與平台相依,沒有達到JDBC驅 動程式的目標之一:跨平台 • 直接呼叫資料庫原生API,因此在速度上,有 機會成為四種類型中最快的驅動程式 – 速度的優勢是在於獲得資料庫回應資料後,建構 相關 JDBC API 實作物件時 • 使用前必須先在各平台進行驅動程式的安裝 設定(像是安裝資料庫專屬的原生程式庫) 14
15.
Type 3:JDBC-Net Driver 15
16.
Type 3:JDBC-Net Driver •
可使用純綷的Java技術來實現,可以跨平台 • 架構彈性高,客戶端不受影響 • 經由中介伺服器轉換,速度較慢,獲得架構 上的彈性是使用這類型驅動程式的目的 16
17.
Type 4:Native Protocol
Driver 17
18.
Type 4:Native Protocol
Driver • 驅動程式可以使用純綷Java技術來實現,可 以跨平台 • 效能上也能有不錯的表現 • 不需要如Type 3獲得架構上的彈性時,通常 會使用這類型驅動程式 18
19.
簡介JDBC • 許多資料庫都是採伺服器獨立運行的方式 • 有時因為裝置本身資源限制,或者是實行測 試時方便,應用程式會搭配可執行於記憶體 的資料庫,或者是資料庫本身是個檔案 –
HSQLDB(Hyper SQL Database) – SQLite – H2 19
20.
H2 20
21.
21
22.
22
23.
23
24.
連接資料庫 • JDBC驅動程式 – 可以在壓縮檔解開後的h2/bin資料夾中,找到h2- 1.4.200.jar •
至今的專案都是採取模組化設計,你撰寫的 類別都是在明確定義模組之中,這樣的模組 稱為顯式模組(Explicit module) – 無法requires未具名模組,因為未具名模組沒 有名稱 24
25.
連接資料庫 • 可以將未支援模組化設計的JAR檔案放在模 組路徑(使用--module-path指定) • 這會使得該JAR檔案被視為自動模組( Automatic
module) • 自動模組也是具名模組的一種,名稱產生有 其規則 25
26.
連接資料庫 • 如果無法自動生成正確模組名稱的話,會導 致執行時產生錯誤訊息 • 基於相容性,自動模組有隱含的模組定義, 可以讀取其他模組 •
其他模組也可存取(與深層反射)自動模組 • 應用程式在遷移至模組化設計的過程中,自 動模組是未具名模組至顯式模組之間的橋樑 26
27.
連接資料庫 • 如果無法自動生成正確模組名稱的話,會導 致執行時產生錯誤訊息 • 可以在JAR檔案的META-INF/MANIFEST.MF 裏增加Automatic-Module-Name,指定自動 模組名稱 •
對於第三方程式庫的既有JAR,不建議自己 做這個動作 27
28.
• 應該讓第三方程式庫的釋出者決定自動模組 名稱,免得以後產生名稱上的困擾 • H2的JAR檔案的META-INF/MANIFEST.MF 中,Automatic-Module-Name被設置為 com.h2database 28
29.
連接資料庫 • 基於相容性,自動模組有隱含的模組定義, 可以讀取其他模組 • 其他模組也可存取(與深層反射)自動模組 •
應用程式在遷移至模組化設計的過程中,自 動模組是未具名模組至顯式模組之間的橋樑 29
30.
連接資料庫 • 基本資料庫操作相關的JDBC介面或類別是 位於java.sql套件 • java.sql套件位於java.sql模組之中 •
記得在模組的模組描述檔中加入requires java.sql 30
31.
31
32.
連接資料庫 • 基本資料庫操作相關的JDBC介面或類別是位 於java.sql套件中 • 要取得資料庫連線,必須有幾個動作: –
註冊Driver實作物件 – 取得Connection實作物件 – 關閉Connectiion實作物件 32
33.
連接資料庫 • 以H2實作的驅動程式為例, org.h2.Driver類別實作了 java.sql.Driver介面 • 管理Driver實作物件的類別是 java.sql.DriverManager 33
34.
連接資料庫 • 實際上很少自行撰寫程式碼進行這個動作 • 只要想辦法載入Driver介面的實作類 別.class檔案,就會完成註冊 •
可以透過java.lang.Class類別的 forName(),動態載入驅動程式類別 34
35.
35
36.
連接資料庫 • 使用JDBC時,要求載入.class檔案的方式有四 種: – 使用Class.forName() –
自行建立Driver介面實作類別的實例 – 啟動JVM時指定jdbc.drivers屬性 – 設定JAR中 /services/java.sql.Driver 檔案(JDK6) 36
37.
連接資料庫 • 除了「協定」在JDBC URL中總是jdbc開始之 外,JDBC
URL格式各家資料庫都不相同, 必須查詢資料庫產品使用手冊 37
38.
38
39.
連接資料庫 • 在處理JDBC時很常遇到的SQLException 例外物件,為資料庫操作過程發生錯誤時的 代表物件 • 受檢例外(Checked
Exception),必須使用 try...catch明確處理,在例外發生時嘗試關閉 相關資源 39
40.
連接資料庫 • 取得Connection物件之後,可以使用 isClosed()方法測試與資料庫的連接是否 關閉 • 若確定不再需要連接,則必須使用close() 來關閉與資料庫的連接 40
41.
連接資料庫 • 從JDK7之後,JDBC的Connection、 Statement、ResultSet等介面,都是 java.lang.AutoClosable子介面 41
42.
• DriverManager如何進行連線? 42
43.
連接資料庫 43
44.
使用Statement、ResultSet • java.sql.Statement物件是SQL陳述的 代表物件 • 可以使用Connection的 createStatement()來建立 •
可以使用executeUpdate()、 executeQuery()等方法來執行 SQL 44
45.
• executeUpdate()主要是用來執行 CREATE TABLE、INSERT、DROP
TABLE、 ALTER TABLE等會改變資料庫內容的SQL • executeQuery()方法則是用於SELECT等 查詢資料庫的SQL 45
46.
• executeUpdate()會傳回int結果,表示 資料變動的筆數 • executeQuery()會傳回 java.sql.ResultSet物件,代表查詢的 結果 46
47.
使用Statement、ResultSet 47
48.
使用Statement、ResultSet • Statement的execute()可以用來執行 SQL – 傳回true的話表示將傳回查詢結果,可以使用 getResultSet()取得ResultSet物件 –
傳回false,表示傳回更新筆數或沒有結果,可 以使用getUpdateCount()取得更新筆數。 48
49.
49
50.
50
51.
使用PreparedStatement 51
52.
• 使用ParparedStatement改寫先前 MessageDAO中add()執行SQL語句的部份 52
53.
使用PreparedStatement • 安全 ... 53
54.
使用PreparedStatement • 以下username與password將被視作是SQL 中純綷的字串,而不會當作SQL語法來解釋 54
55.
使用CallableStatement • 呼叫資料庫的預存程序(Stored Procedure) •
必須呼叫prepareCall()建立 CallableStatement實例 55
56.
Java型態與SQL型態對應 56
57.
Java型態與SQL型態對應 • 日期時間在JDBC中,並不是使用 java.util.Date – 年、月、日、時、分、秒、毫秒 •
在JDBC中要表示日期,是使用java.sql.Date – 年、月、日 • 要表示時間的話則是使用java.sql.Time – 時、分、秒 • 使用java.sql.Timestamp – 時、分、秒、微秒 57
58.
Java型態與SQL型態對應 • JDK8新時間日期API – 對於TimeStamp實例,你可以使用 toInstant()方法將之轉為Instant實例 –
如果有個Instant實例,可以透過TimeStamp 的from()靜態方法,將之轉為TimeStamp實例。 58
59.
使用DataSource取得連線 • 實際應用程式開發時,JDBC URL、使用者 名稱、密碼等資訊是很敏感的資訊,有些開 發人員根本無從得知 •
如果MessageDAO的使用者無法告知這些資 訊,你如何改寫MessageDAO? 59
60.
使用DataSource取得連線 • 可以讓MessageDAO依賴於 javax.sql.DataSource介面 … 60
61.
61
62.
62
63.
63
64.
64
65.
使用DataSource取得連線 65
66.
使用ResultSet捲動、更新資料 • 從JDBC 2.0開始,ResultSet並不僅可以使 用previous()、first()、last()等方 法前後移動資料游標,還可以呼叫 updateXXX()、updateRow()等方法進行 資料修改 66
67.
使用ResultSet捲動、更新資料 • 建立Statement或PreparedStatement 實例時,可以指定結果集類型與並行方式 • 結果集類型可以指定三種設定: –
ResultSet.TYPE_FORWARD_ONLY(預設) – ResultSet.TYPE_SCROLL_INSENSITIVE – ResultSet.TYPE_SCROLL_SENSITIVE 67
68.
使用ResultSet捲動、更新資料 • 更新設定可以有兩種指定: – ResultSet.CONCUR_READ_ONLY(預設) –
ResultSet.CONCUR_UPDATABLE 68
69.
使用ResultSet捲動、更新資料 • 資料游標移動... 69
70.
使用ResultSet捲動、更新資料 • 使用ResultSet進行資料修改 – 必須選取單一表格 –
必須選取主鍵 – 必須選取所有NOT NULL的值 • 更新資料... 70
71.
使用ResultSet捲動、更新資料 • 新增資料 ... 71
72.
使用ResultSet捲動、更新資料 • 刪除資料 ... 72
73.
批次更新 • 以下每一次執行executeUpdate(),其實 都會向資料庫發送一次SQL 73
74.
批次更新 • 可以使用addBatch()方法來收集SQL • 使用executeBatch()方法將所收集的SQL 傳送出去 74
75.
批次更新 • 使用executeBatch()時,SQL的執行順序,就是 addBatch()時的順序 • executeBatch()會傳回int[],代表每筆SQL造成 的資料異動列數 •
先前已開啟的ResultSet會被關閉,執行過後收集 SQL用的List會被清空 • 任何的SQL錯誤,會丟出BatchUpdateException • 可以使用這個物件的getUpdateCounts()取得 int[],代表先前執行成功的SQL所造成的異動筆數 75
76.
批次更新 • PreparedStatement使用批次更新 76
77.
Blob與Clob • BLOB全名Binary Large
Object,用於儲存大 量的二進位資料,像是圖檔、影音檔等 • CLOB全名Character Large Object,用於儲存 大量的文字資料 • java.sql.Blob與java.sql.Clob兩個 類別分別代表BLOB與CLOB資料 77
78.
Blob與Clob • Blob擁有getBinaryStream()、 getBytes()等方法,可以取得代表欄位來 源的InputStream或欄位的byte[]資料 • Clob擁有getCharacterStream()、 getAsciiStream()等方法,可以取得 Reader或InputStream等資料 78
79.
Blob與Clob • 也可以把BLOG欄位對應byte[]或輸入/輸出串流 • 使用PreparedStatement的setBytes()來設定 要存入的byte[]資料,使用setBinaryStream() 來設定代表輸入來源的InputStream •
使用ResultSet的getBytes()以byte[]取得欄 位中儲存的資料,或以getBinaryStream()取得 代表欄位來源的InputStream 79
80.
Blob與Clob 80
81.
簡介交易 • 原子性(Atomicity) • 一致性(Consistency) •
隔離行為(Isolation behavior) • 持續性(Durability) 81
82.
82
83.
83
84.
84
85.
隔離行為 • 可以透過Connection的 getTransactionIsolation()取得資料 庫目前的隔離行為設定 • 透過setTransactionIsolation()可提 示資料庫設定指定的隔離行為 85
86.
隔離行為 • 可設定常數是定義在Connection上 – TRANSACTION_NONE –
TRANSACTION_UNCOMMITTED – TRANSACTION_COMMITTED – TRANSACTION_REPEATABLE_READ – TRANSACTION_SERIALIZABLE 86
87.
更新遺失(Lost update) 87
88.
Read uncommited 88
89.
髒讀(Dirty read) 89
90.
Read commited 90
91.
無法重複的讀取(Unrepeatable read) 91
92.
Repeatable read 92
93.
幻讀(Phantom read) • 同一交易期間,讀取到的資料筆數不一致。例如交 易A第一次讀取得到五筆資料,此時交易B新增了一 筆資料,導致交易B再次讀取得到六筆資料 •
如果隔離行為設定為可重複讀取,但發生幻讀現象, 可以設定隔離層級為「可循序」(Serializable), 也就是在有交易時若有資料不一致的疑慮,交易必 須可以照順序逐一進行 93
94.
隔離行為與可預防之問題 94
95.
隔離行為 • 得知是否支援某個隔離行為 95
96.
簡介metadata • 詮讀資料的資料(Data about
data ) • 可以透過Connection的getMetaData() 方法取得DatabaseMetaData物件 • 可以透過ResultSet的getMetaData()方 法,取得ResultSetMetaData物件 96
97.
97
98.
簡介RowSet • javax.sql.RowSet代表資料的列集合 – 這邊的資料並不一定是資料庫中的資料,可以是 試算表資料、XML資料或任何具有列集合概念的 資料來源 •
是ResultSet的子介面,新增了一些行為, 像是透過setCommand()設定查詢指令、透 過execute()執行查詢指令以填充資料等 98
99.
簡介RowSet 連線式 離線式 99
100.
簡介RowSet • JdbcRowSet是連線式的RowSet – 操作JdbcRowSet期間,會保持與資料庫的連線, 可視為取得、操作ResultSet行為封裝,可簡 化JDBC程式的撰寫,或作為JavaBean使用 •
CachedRowSet為離線式的RowSet – 查詢並充填完資料後,就會斷開與資料來源的連 線,而不用佔據相關連線資源,必要也可以再與 資料來源連線進行資料同步 100
101.
簡介RowSet • 若使用Oracle/Sun JDK附帶的JdbcRowSetImpl, 在JDK6之前,可以如下建立JdbcRowSet實例: •
在JDK7之後,新增了 javax.sql.rowset.RowSetFactory介面與 javax.sql.rowset.RowSetProvider類別 101
102.
簡介RowSet • 如果使用Oracle/Sun JDK,以上程式片段會取 得JdbcRowSetImpl實例 •
可以在啟動JVM時,利用系統屬性 "javax.sql.rowset.RowSetFactory"指定其它廠 商實作 102
103.
簡介RowSet • 使用RowSet查詢資料 103
104.
簡介RowSet • 在查詢之後,想要離線進行操作,則可以使 用CachedRowSet或其子介面實作物件 • 使用close()關閉CachedRowSet,若在相 關更新操作之後,想與再與資料來源進行同 步,則可以呼叫acceptChanges()方法 104
105.
簡介RowSet • WebRowSet是CachedRowSet的子介面, 其不僅具備離線操作,還能進行XML讀寫 105
106.
簡介RowSet 106
107.
簡介RowSet • FilteredRowSet可以對列集合進行過濾, 實現類似SQL中WHERE等條件式的功能 • JoinRowSet則可以讓你結合兩個RowSet 物件,實現類似SQL中JOIN的功能 •
docs.oracle.com/javase/tutorial/jdbc/basics/getti ngstarted.html 107