Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
Ch13 整合 Spring MVC/Security
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Justin Lin
1
of
92
Top clipped slide
Ch09 整合資料庫
Jun. 1, 2021
•
0 likes
0 likes
×
Be the first to like this
Show More
•
220 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
了解 JDBC 架構 使用基本的 JDBC 透過 JNDI 取得DataSource 在 Web 應用程式整合資料庫
Justin Lin
Follow
Technology / Community Evangelist at Free lancer
Advertisement
Advertisement
Advertisement
Recommended
Ch02 撰寫與設定 Servlet
Justin Lin
302 views
•
37 slides
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Justin Lin
4.5K views
•
66 slides
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Justin Lin
19.2K views
•
53 slides
Ch03 請求與回應
Justin Lin
213 views
•
73 slides
Ch06 使用 JSP
Justin Lin
237 views
•
83 slides
Servlet & JSP 教學手冊第二版 - 課後練習解答
Justin Lin
4.9K views
•
39 slides
More Related Content
Slideshows for you
(20)
Ch13 整合 Spring MVC/Security
Justin Lin
•
269 views
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Justin Lin
•
6.1K views
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Justin Lin
•
3.2K views
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
Justin Lin
•
2.7K views
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Justin Lin
•
2.9K views
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Justin Lin
•
3.4K views
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理
Justin Lin
•
2.5K views
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Justin Lin
•
1.8K views
CH1. 簡介 Web 應用程式
Justin Lin
•
962 views
Ch05 Servlet進階API、過濾器與傾聽器
Justin Lin
•
504 views
CH04:認識物件
Justin Lin
•
411 views
Ch03 請求與回應
Justin Lin
•
648 views
Ch08 自訂標籤
Justin Lin
•
127 views
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
•
2.9K views
Ch01 簡介Web應用程式
Justin Lin
•
1.7K views
Ch04 會話管理
Justin Lin
•
228 views
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Justin Lin
•
10K views
Ch08 自訂標籤
Justin Lin
•
380 views
Ch04 會話管理
Justin Lin
•
390 views
Ch07 使用JSTL
Justin Lin
•
430 views
Similar to Ch09 整合資料庫
(20)
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
•
2.1K views
CH16:整合資料庫
Justin Lin
•
350 views
Java_08:SQL
Brad Chao
•
584 views
Ch09 整合資料庫
Justin Lin
•
460 views
SQL Server 資料庫版本控管
Will Huang
•
9.2K views
Nhibernate+sqlite測試實戰經驗分享
Wade Huang
•
897 views
Azure Data Lake 簡介
Herman Wu
•
840 views
山頂洞人日記 - 回歸到最純樸的開發
koji lin
•
841 views
03.wls depoly jdbc
Meng He
•
308 views
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
My own sweet home!
•
479 views
My sql管理基础 李春_v2
Pickup Li
•
888 views
中远公司 Java培训资料
yiditushe
•
132 views
百度数据库中间层
yp_fangdong
•
1.5K views
John Resig Beijing 2010 (中文版)
Jia Mi
•
1.1K views
02.web sphere培训 应用websphere
littlecong
•
431 views
无数据库日志文件恢复数据库方法两则
wensheng wei
•
155 views
千呼萬喚始出來的 Java SE 7
Justin Lin
•
1.9K views
Oracle 索引介紹
Chien Chung Shen
•
1.7K views
02.wls概览
Meng He
•
581 views
Net 相依性注入 學習筆記 1.0
智興 陳
•
2.1K views
Advertisement
More from Justin Lin
(20)
Ch14 簡介 Spring Boot
Justin Lin
•
841 views
Ch12 Spring 起步走
Justin Lin
•
251 views
Ch11 簡介 JavaMail
Justin Lin
•
151 views
Ch10 Web 容器安全管理
Justin Lin
•
147 views
Ch07 使用 JSTL
Justin Lin
•
147 views
14. 進階主題
Justin Lin
•
394 views
13.並行、平行與非同步
Justin Lin
•
218 views
12. 除錯、測試與效能
Justin Lin
•
140 views
11. 常用內建模組
Justin Lin
•
136 views
10. 資料永續與交換
Justin Lin
•
145 views
9. 資料結構
Justin Lin
•
267 views
8. open() 與 io 模組
Justin Lin
•
238 views
7. 例外處理
Justin Lin
•
111 views
6. 類別的繼承
Justin Lin
•
159 views
5. 從模組到類別
Justin Lin
•
159 views
4. 流程語法與函式
Justin Lin
•
181 views
3.型態與運算子
Justin Lin
•
192 views
1. Python起步走
Justin Lin
•
607 views
2. 從 REPL 到 IDE
Justin Lin
•
218 views
Python 3.9 技術手冊目錄
Justin Lin
•
544 views
Recently uploaded
(20)
留信网认证可查【格鲁斯特大学文凭证书毕业证购买】
12da12
•
2 views
①【科罗拉多大学波尔得分校毕业证文凭学位证书|工艺完美复刻】
0987hgh789
•
2 views
留信网认证可查【内华达大学拉斯维加斯分校文凭证书毕业证购买】
32lkhng
•
2 views
加拿大:主教大学毕业证办理详细流程
hyptugu
•
3 views
①【玛格丽特女王大学毕业证文凭学位证书|工艺完美复刻】
love445ds
•
2 views
IT如何協助提升供應鏈韌性_Openfind.pptx
openfind
•
324 views
在哪里可以办英国大学文凭《伦敦大学伯贝克学院毕业证成绩单仿制》
efagvah
•
2 views
如何办理一份高仿谢菲尔德大学毕业证成绩单?
aazepp
•
4 views
在哪里可以办美国大学文凭《麦纳特州立大学毕业证成绩单仿制》
efagvah
•
3 views
☀️【基尔大学毕业证成绩单留学生首选】
25mjhd12
•
2 views
☀️【新英格兰大学毕业证成绩单留学生首选】
bjd42as
•
2 views
①【加州大学圣地亚哥分校毕业证文凭学位证书|工艺完美复刻】
34asdcx
•
3 views
留信网认证可查【切斯特大学文凭证书毕业证购买】
12da12
•
2 views
①【拉筹伯大学毕业证文凭学位证书|工艺完美复刻】
vgh215w
•
2 views
☀️【杜塞尔多夫大学毕业证成绩单留学生首选】
bjd42as
•
2 views
留学美国必看:长岛大学毕业证、学位证办理流程
oqcymp
•
3 views
【本科生、研究生】美国南达科他大学毕业证文凭购买指南
foxupud
•
3 views
①【凤凰城大学毕业证文凭学位证书|工艺完美复刻】
0987hgh789
•
5 views
留信网认证可查【威斯康星大学白水分校文凭证书毕业证购买】
hh123hh1
•
2 views
☀️【斯图加特大学毕业证成绩单留学生首选】
bjd42as
•
2 views
Advertisement
Ch09 整合資料庫
1
9 • 整合資料庫 學習目標 • 了解
JDBC 架構 • 使用基本的 JDBC • 透過 JNDI 取得 DataSource • 在 Web 應用程式整合 資料庫 2
簡介 JDBC • 資料庫本身是個獨立運行的應用程式 •
撰寫的應用程式是利用網路通訊協定與資料 庫進行指令交換,以進行資料的增刪查找 3
簡介 JDBC • 應用程式會利用一組專門與資料庫進行通訊 協定的程式庫 4
簡介 JDBC • 應用程式如何呼叫這組程式庫? •
不同的資料庫通常會有不同的通訊協定 • 連線不同資料庫的程式庫在 API 也會不同 5
簡介 JDBC • JDBC
全名 Java DataBase Connectivity • Java 連線資料庫的標準規範,定義一組標準 類別與介面: – 應用程式需要連線資料庫時就呼叫這組標準 API, 而標準 API 的介面會由資料庫廠商實作,通常稱 之為 JDBC 驅動程式(Driver) 6
簡介JDBC • JDBC 應用程式開發者介面(Application Developer
Interface) – 應用程式需要連線資料庫 – 相關 API 主要是座落於 java.sql 與 javax.sql • JDBC 驅動程式開發者介面(Driver Developer Interface) – 資料庫廠商要實作驅動程式時的規範,一般開發 者並不用瞭解 7
簡介 JDBC 8
簡介 JDBC • 應用程式會使用
JDBC 連線資料庫 9
簡介 JDBC • 廠商在實作
JDBC 驅動程式時,依方式可將 驅動程式分作四種類型 – Type 1:JDBC-ODBC Bridge Driver – Type 2:Native API Dirver – Type 3:JDBC-Net Driver – Type 4:Native Protocol Driver 10
Type 1:JDBC-ODBC Bridge
Driver 11
Type 1:JDBC-ODBC Bridge
Driver • 實作這種驅動程式非常簡單 • JDBC 與 ODBC 並非一對一的對應,部份呼 叫無法直接轉換,有些功能是受限的 • 多層呼叫轉換結果,存取速度也會受到限制 • ODBC 本身需在平台上先設定好,彈性不足, ODBC 驅動程式本身也有跨平台的限制 12
Type 2:Native API
Dirver 13
Type 2:Native API
Dirver • 驅動程式本身與平台相依,沒有達到 JDBC 驅動程式的目標之一:跨平台 • 直接呼叫資料庫原生 API,因此在速度上, 有機會成為四種類型中最快的驅動程式 – 速度的優勢是在於獲得資料庫回應資料後,建構 相關 JDBC API 實作物件時 • 使用前必須先在各平台進行驅動程式的安裝 設定(像是安裝資料庫專屬的原生程式庫) 14
Type 3:JDBC-Net Driver 15
Type 3:JDBC-Net Driver •
可使用純綷的 Java 技術來實現,可以跨平台 • 架構彈性高,客戶端不受影響 • 經由中介伺服器轉換,速度較慢,獲得架構 上的彈性是使用這類型驅動程式的目的 16
Type 4:Native Protocol
Driver 17
Type 4:Native Protocol
Driver • 驅動程式可以使用純綷 Java 技術來實現,可 以跨平台 • 效能上也能有不錯的表現 • 不需要如 Type 3 獲得架構上的彈性時,通常 會使用這類型驅動程式 18
連接資料庫 • 基本資料庫操作相關的 JDBC
介面或類別是 位於 java.sql 套件中 • 要取得資料庫連線,必須有幾個動作: – 註冊 Driver 實作物件 – 取得 Connection 實作物件 – 關閉 Connectiion 實作物件 19
註冊 Driver 實作物件 •
以 H2 的驅動程式為例,org.h2.Driver 實作了 java.sql.Driver 介面 • 管理 Driver 實作物件的類別是 java.sql.DriverManager 20
註冊 Driver 實作物件 •
實際上很少自行撰寫程式碼進行這個動作 • 只要想辦法載入 Driver 介面的實作類 別 .class 檔案,就會完成註冊 • 透過 java.lang.Class 類別 forName(), 動態載入驅動程式類別 21
註冊 Driver 實作物件 22
註冊 Driver 實作物件 •
使用 JDBC 時,要求載入 .class 檔案的方式有 四種: – 使用Class.forName() – 自行建立Driver介面實作類別的實例 – 啟動JVM時指定jdbc.drivers屬性 – 設定JAR中 /services/java.sql.Driver 檔案(JDK6) 在 Web 容器中,不能依賴這個功能 23
取得 Connection 實作物件 •
除了「協定」在 JDBC URL 總是 jdbc 開始, JDBC URL 格式各家資料庫都不相同,必須 查詢資料庫產品使用手冊 24
25
SQLException • 在處理 JDBC
時很常遇到的一個例外物件, 為資料庫操作過程發生錯誤時的代表物件 • 受檢例外(Checked Exception),必須使用 try...catch 明確處理,在例外發生時嘗 試關閉相關資源 26
關閉 Connection 實作物件 •
取得 Connection 物件之後,可以使用 isClosed()方法測試連線是否關閉 • 若確定不再需要連接,則必須使用 close() 來關閉與資料庫的連接 27
取得 Connection 實作物件 •
DriverManager 如何進行連線? 28
29
使用 Statement、ResultSet • java.sql.Statement
代表 SQL 陳述 • 使用 Connection 的 createStatement() 建立 • 可以使用 executeUpdate()、 executeQuery()等方法執行 SQL 30
使用 Statement、ResultSet • executeUpdate()用來執行
CREATE TABLE、INSERT、DROP TABLE、ALTER TABLE 等改變資料庫內容的 SQL • executeQuery()方法用於 SELECT 等查詢 資料庫的 SQL 31
使用 Statement、ResultSet • executeUpdate()會傳回
int 結果,表示 資料變動的筆數 • executeQuery() 會傳回 java.sql.ResultSet,代表查詢結果 32
使用 Statement、ResultSet 33
使用 Statement、ResultSet • Statement
的 execute() 執行SQL – 傳回 true 的話表示將傳回查詢結果,可以使用 getResultSet()取得 ResultSet 物件 – 傳回 false,表示傳回更新筆數或沒有結果,可 以使用 getUpdateCount() 取得更新筆數。 34
35
36
37
38
使用 PreparedStatement 39
• 使用 ParparedStatement
改寫先前 GuestBookBean 中 setMessage() 40
使用 PreparedStatement • 安全
... 41
使用 PreparedStatement • 以下
username 與 password 將被視作是 SQL 純綷的字串,不會當作 SQL 語法來解釋 42
使用 CallableStatement • 呼叫資料庫的預存程序(Stored
Procedure) • 必須呼叫 prepareCall()建立 CallableStatement 實例 43
Java 型態與 SQL
型態對應 44
Java 型態與 SQL
型態對應 • 日期時間在 JDBC 不是使用 java.util.Date – 年、月、日、時、分、秒、毫秒 • 在 JDBC 要表示日期,是使用 java.sql.Date – 年、月、日 • 要表示時間的話則是使用 java.sql.Time – 時、分、秒 • 使用 java.sql.Timestamp – 時、分、秒、微秒 45
使用 DataSource 取得連線 •
取得連線等與資料庫來源相關的行為規範在 javax.sql.DataSource 介面 • 可以透過 JNDI(Java Naming Directory Interface)來取得所需的資源物件 46
使用 DataSource 取得連線 •
如果是在 Web 應用程式中想要獲得 DataSource 實例 47
48
使用 DataSource 取得連線 •
在 web.xml 設定 49
ResultSet 捲動、更新資料 • 從
JDBC 2.0 開始,ResultSet 不僅可以使 用 previous()、first()、last()等方 法前後移動資料游標,還可以呼叫 updateXXX()、updateRow()等方法進行 資料修改 50
ResultSet 捲動、更新資料 • 建立
Statement 或 PreparedStatement 實例時,可以指定結果集類型與並行方式 • 結果集類型可以指定三種設定: – ResultSet.TYPE_FORWARD_ONLY(預設) – ResultSet.TYPE_SCROLL_INSENSITIVE – ResultSet.TYPE_SCROLL_SENSITIVE 51
ResultSet 捲動、更新資料 • 更新設定可以有兩種指定: –
ResultSet.CONCUR_READ_ONLY(預設) – ResultSet.CONCUR_UPDATABLE 52
ResultSet 捲動、更新資料 • 資料游標移動... 53
ResultSet 捲動、更新資料 • 使用
ResultSet 進行資料修改 – 必須選取單一表格 – 必須選取主鍵 – 必須選取所有 NOT NULL 值 • 更新資料... 54
ResultSet 捲動、更新資料 • 新增資料
... 55
ResultSet 捲動、更新資料 • 刪除資料
... 56
批次更新 • 以下每一次執行 executeUpdate(),其實 都會向資料庫發送一次
SQL 57
批次更新 • 可以使用 addBatch()方法來收集
SQL • 使用 executeBatch()方法將所收集的 SQL傳送出去 58
批次更新 • 使用 executeBatch()時,SQL
的執行順序,就是 addBatch()時的順序 • executeBatch()會傳回 int[],代表每筆 SQL 造 成的資料異動列數 • 先前已開啟的 ResultSet 會被關閉,執行過後收集 SQL 用的 List 會被清空 • 任何 SQL 錯誤,會丟出 BatchUpdateException • 可以使用這個物件的 getUpdateCounts()取得 int[],代表先前執行成功的 SQL 造成的異動筆數 59
批次更新 • PreparedStatement 使用批次更新 60
Blob 與 Clob •
BLOB 全名 Binary Large Object,用於儲存大 量的二進位資料,像是圖檔、影音檔等 • CLOB 全名 Character Large Object,用於儲存 大量的文字資料 • java.sql.Blob 與 java.sql.Clob 兩個 類別分別代表 BLOB 與 CLOB 資料 61
Blob 與 Clob •
Blob 擁有 getBinaryStream()、 getBytes()等方法,可以取得代表欄位來 源的 InputStream 或欄位的 byte[] 資料 • Clob 擁有 getCharacterStream()、 getAsciiStream()等方法,可以取得 Reader 或 InputStream 等資料 62
Blob 與 Clob •
也可以把 BLOG 欄位對應 byte[]或輸入/輸出串流 • 使用 PreparedStatement 的 setBytes()來設 定要存入 byte[]資料,使用setBinaryStream() 設定代表輸入來源的InputStream • 使用 ResultSet 的 getBytes() 以 byte[] 取 得欄位中儲存的資料,或以 getBinaryStream() 取得代表欄位來源的 InputStream 63
Blob 與 Clob 64
實例 65
簡介交易 • 原子性(Atomicity) • 一致性(Consistency) •
隔離行為(Isolation behavior) • 持續性(Durability) 66
67
68
69
隔離行為 • 可以透過 Connection
的 getTransactionIsolation()取得資料 庫目前的隔離行為設定 • 透過 setTransactionIsolation() 可提 示資料庫設定指定的隔離行為 70
隔離行為 • 可設定常數是定義在 Connection –
TRANSACTION_NONE – TRANSACTION_UNCOMMITTED – TRANSACTION_COMMITTED – TRANSACTION_REPEATABLE_READ – TRANSACTION_SERIALIZABLE 71
更新遺失(Lost update) 72
Read uncommited 73
髒讀(Dirty read) 74
Read commited 75
無法重複的讀取(Unrepeatable read) 76
Repeatable read 77
幻讀(Phantom read) • 同一交易期間,讀取到的資料筆數不一致。例如交 易
A 第一次讀取得到五筆資料,此時交易 B 新增了 一筆資料,導致交易 B 再次讀取得到六筆資料 • 如果隔離行為設定為可重複讀取,但發生幻讀現象, 可以設定隔離層級為「可循序」(Serializable), 也就是在有交易時若有資料不一致的疑慮,交易必 須可以照順序逐一進行 78
隔離行為與可預防之問題 79
隔離行為 • 得知是否支援某個隔離行為 80
簡介 metadata • 詮讀資料的資料(Data
about data ) • 可以透過 Connection 的 getMetaData() 方法取得 DatabaseMetaData 物件 • 可以透過 ResultSet 的 getMetaData() 方法,取得 ResultSetMetaData 物件 81
82
簡介 metadata 83
使用 SQL 標籤庫 84
使用 SQL 標籤庫 •
<sql:query> 查詢結果是 Result 型態, 具有 getColumnNames()、 getRowCount()、getRows() 等方法 85
使用 SQL 標籤庫 •
Result 有 getRowsByIdex() 方法,可以 Object[][] 傳回查詢資料 86
使用 SQL 標籤庫 •
在資料庫中新增一筆資料 • 以下寫法雖可以但不建議 87
使用 SQL 標籤庫 •
可以使用在 SQL 中使用佔位字元,並搭配 <sql:param> 標籤來設定佔位字元的值 88
使用 SQL 標籤庫 •
如果欄位是日期時間格式,則可以使用 <sql:paramDate> 標籤,可以透過 type 屬性設定,指定使用"time"、"date" 或 "timestamp" 的值 • <sql:param>、<sql:paramDate> 也可 以搭配 <sql:query> 使用。 89
使用 SQL 標籤庫 •
如果有必要指定交易隔離行為,則可以透過 <sql:transaction> 標籤指定 • 設定 isolation 屬性為 "read_uncommitted"、 "read_committed"、"repeatable" 或 "serializable" 90
91
綜合練習/微網誌 • 改用資料庫搭配 JDBC
存取資料,不過將檔 案儲存改為資料庫儲存,就目前應用程式來 說,是個不小的變動,因此在這邊將導入 DAO(Data Access Object)設計模式,以隔 離儲存邏輯與商務邏輯 92
Advertisement