狠狠撸

狠狠撸Share a Scribd company logo
Java SE 8 技術手冊第 16 章 - 整合资料库
整合资料库
學習目標
? 了解 JDBC 架構
? 使用 JDBC API
? 瞭解交易與隔離層級
? 認識 RowSet
簡介 JDBC
? 資料庫本身是個獨立運行的應用程式
? 撰寫的應用程式是利用網路通訊協定與資料
庫進行指令交換,以進行資料的增刪 找查
簡介 JDBC
? 應用程式會利用一組專門與資料庫進行通訊
協定的程式庫
簡介 JDBC
? 應用程式如何呼叫這組程式庫?
? 不同的資料庫通常會有不同的通訊協定
? 用以連線不同資料庫的程式庫在 API 上也會
有所不同
簡介 JDBC
? JDBC 全名 Java DataBase Connectivity
? Java 連線資料庫的標準規範,定義一組標準
類別與介面:
– 應用程式需要連線資料庫時就呼叫這組標準
API ,而標準 API 中的介面會由資料庫廠商實作
,通常稱之為 JDBC 驅動程式( Driver )
簡介 JDBC
? JDBC 應用程式開發者介面( Application
Developer Interface )
– 應用程式需要連線資料庫
– 相關 API 主要是座落於 java.sql 與
javax.sql
? JDBC 驅動程式開發者介面( Driver
Developer Interface )
– 資料庫廠商要實作驅動程式時的規範,一般開發
者並不用瞭解
簡介 JDBC
簡介 JDBC
? 應用程式會使用 JDBC 連線資料庫
簡介 JDBC
? 廠商在實作 JDBC 驅動程式時,依方式可將
驅動程式分作四種類型
– Type 1 : JDBC-ODBC Bridge Driver
– Type 2 : Native API Dirver
– Type 3 : JDBC-Net Driver
– Type 4 : Native Protocol Driver
Type 1 : JDBC-ODBC Bridge Driver
Type 1 : JDBC-ODBC Bridge Driver
? 實作這種驅動程式非常簡單
? JDBC 與 ODBC 並非一對一的對應,所以部
份呼叫無法直接轉換,因此有些功能是受限
的
? 多層呼叫轉換結果,存取速度也會受到限制
? ODBC 本身需在平台上先設定好,彈性不足
, ODBC 驅動程式本身也有跨平台的限制
Type 2 : Native API Dirver
Type 2 : Native API Dirver
? 驅動程式本身與平台相依,沒有達到 JDBC
驅動程式的目標之一:跨平台
? 直接呼叫資料庫原生 API ,因此在速度上,
有機會成為四種類型中最快的驅動程式
– 速度的優勢是在於獲得資料庫回應資料後,建構
相關 JDBC API 實作物件時
? 使用前必須先在各平台進行驅動程式的安裝
設定(像是安裝資料庫專屬的原生程式庫)
Type 3 : JDBC-Net Driver
Type 3 : JDBC-Net Driver
? 可使用純綷的 Java 技術來實現,可以跨平台
? 架構彈性高,客戶端不受影響
? 經由中介伺服器轉換,速度較慢,獲得架構
上的彈性是使用這類型驅動程式的目的
Type 4 : Native Protocol Driver
Type 4 : Native Protocol Driver
? 驅動程式可以使用純綷 Java 技術來實現,可
以跨平台
? 效能上也能有不錯的表現
? 不需要如 Type 3 獲得架構上的彈性時,通常
會使用這類型驅動程式
连接资料库
? 為了要连接资料库系統,必須要有廠商實作
的 JDBC 驅動程式,必須在 CLASSPATH 中
設定驅動程式 JAR 案檔
连接资料库
? 基本資料庫操作相關的 JDBC 介面或類別是
位於 java.sql 套件中
? 要取得資料庫連線,必須有幾個動作:
– 註冊 Driver 實作物件
– 取得 Connection 實作物件
– 關閉 Connectiion 實作物件
连接资料库
? 以 MySQL 實作的驅動程式為
例, com.mysql.jdbc.Driver 類別實作
了 java.sql.Driver 介面
? 管理 Driver 實作物件的類別是
java.sql.DriverManager
连接资料库
? 實際上很少自行撰寫程式碼進行這個動作
? 只要想辦法載入 Driver 介面的實作類
別 .class 案,就會完成註冊檔
? 可以透過 java.lang.Class 類別的
forName() ,動態載入驅動程式類別
连接资料库
连接资料库
? 使用 JDBC 時,要求載入 .class 案的方式有檔
四種:
– 使用 Class.forName()
– 自行建立 Driver 介面實作類別的實例
– 動啟 JVM 時指定 jdbc.drivers 屬性
– 設定 JAR 中 /services/java.sql.Driver 案檔
( JDK6 )
连接资料库
? 除了「協定」在 JDBC URL 中總是 jdbc 開始
之外, JDBC URL 格式各家資料庫都不相同
,必須 詢資料庫產品使用手冊查
取得 Connection 實作物件
? 以 MySQL 為例:
? XML 中:
Java SE 8 技術手冊第 16 章 - 整合资料库
连接资料库
? 在處理 JDBC 時很常遇到的 SQLException
例外物件,為資料庫操作過程發生錯誤時的
代表物件
? 受檢例外( Checked Exception ),必須使用
try...catch 明確處理,在例外發生時嘗試關閉
相關資源
连接资料库
? 取得 Connection 物件之後,可以使用
isClosed() 方法測試與資料庫的連接是否
關閉
? 若確定不再需要連接,則必須使用 close()
來關閉與資料庫的連接
连接资料库
? 從 JDK7 之後, JDBC 的
Connection 、 Statement 、 ResultSe
t 等介面,都是
java.lang.AutoClosable 子介面
连接资料库
? DriverManager 如何進行連線?
Java SE 8 技術手冊第 16 章 - 整合资料库
连接资料库
使用 Statement 、 ResultSet
? java.sql.Statement 物件是 SQL 陳述的
代表物件
? 可以使用 Connection 的
createStatement() 來建立
? 可以使用
executeUpdate() 、 executeQuery()
等方法來執行 SQL
使用 Statement 、 ResultSet
? executeUpdate() 主要是用來執行
CREATE TABLE 、 INSERT 、 DROP
TABLE 、 ALTER TABLE 等會改變資料庫
內容的 SQL
? executeQuery() 方法則是用於 SELECT
等 詢資料庫的查 SQL
使用 Statement 、 ResultSet
? executeUpdate() 會傳回 int 結果,表示
資料變動的筆數
? executeQuery() 會傳回
java.sql.ResultSet 物件,代表 詢的查
結果
使用 Statement 、 ResultSet
使用 Statement 、 ResultSet
? Statement 的 execute() 可以用來執行
SQL
– 傳回 true 的話表示將傳回 詢結果,可以使用查
getResultSet() 取得 ResultSet 物件
– 傳回 false ,表示傳回更新筆數或沒有結果,
可以使用 getUpdateCount() 取得更新筆數。
Java SE 8 技術手冊第 16 章 - 整合资料库
Java SE 8 技術手冊第 16 章 - 整合资料库
使用 PreparedStatement
? 使用 ParparedStatement 改寫先前
MessageDAO 中 add() 執行 SQL 語句的部
份
使用 PreparedStatement
? 安全 ...
使用 PreparedStatement
? 以下 username 與 password 將被視作是
SQL 中純綷的字串,而不會當作 SQL 語法來
解釋
使用 CallableStatement
? 呼叫資料庫的預存程序( Stored Procedure )
? 必須呼叫 prepareCall() 建立
CallableStatement 實例
Java 型態與 SQL 型态对应
Java 型態與 SQL 型态对应
? 日期時間在 JDBC 中,並不是使用
java.util.Date
– 年、月、日、時、分、秒、毫秒
? 在 JDBC 中要表示日期,是使用 java.sql.Date
– 年、月、日
? 要表示時間的話則是使用 java.sql.Time
– 時、分、秒
? 使用 java.sql.Timestamp
– 時、分、秒、微秒
Java 型態與 SQL 型态对应
? JDK8 新時間日期 API
– 對於 TimeStamp 實例,你可以使用
toInstant() 方法將之轉為 Instant 實例
– 如果有個 Instant 實例,可以透過
TimeStamp 的 from() 靜態方法,將之轉為
TimeStamp 實例。
使用 DataSource 取得連線
? 實際應用程式開發時, JDBC URL 、使用者
名稱、密碼等資訊是很敏感的資訊,有些開
發人員根本無從得知
? 如果 MessageDAO 的使用者無法告知這些資
訊,你如何改寫 MessageDAO ?
使用 DataSource 取得連線
? 可以讓 MessageDAO 依賴於
javax.sql.DataSource 介面 …
使用 DataSource 取得連線
使用 DataSource 取得連線
? 實作具簡單連接池的 DataSource…
Java SE 8 技術手冊第 16 章 - 整合资料库
Java SE 8 技術手冊第 16 章 - 整合资料库
使用 DataSource 取得連線
使用 ResultSet 捲動、更新資
料
? 從 JDBC 2.0 開始, ResultSet 並不僅可以
使用 previous() 、 first() 、 last()
等方法前後移動資料游標,還可以呼叫
updateXXX() 、 updateRow() 等方法進
行資料修改
使用 ResultSet 捲動、更新資
料
? 建立 Statement 或 PreparedStatement
實例時,可以指定結果集類型與並行方式
? 結果集類型可以指定三種設定:
– ResultSet.TYPE_FORWARD_ONLY (預設)
– ResultSet.TYPE_SCROLL_INSENSITIVE
– ResultSet.TYPE_SCROLL_SENSITIVE
使用 ResultSet 捲動、更新資
料
? 更新設定可以有兩種指定:
– ResultSet.CONCUR_READ_ONLY (預設)
– ResultSet.CONCUR_UPDATABLE
使用 ResultSet 捲動、更新資
料
? 資料游標移動 ...
使用 ResultSet 捲動、更新資
料
? 使用 ResultSet 進行資料修改
– 必須選取單一表格
– 必須選取主鍵
– 必須選取所有 NOT NULL 的值
? 更新資料 ...
使用 ResultSet 捲動、更新資
料
? 新增資料 ...
使用 ResultSet 捲動、更新資
料
? 刪除資料 ...
批次更新
? 以下每一次執行 executeUpdate() ,其實
都會向資料庫發送一次 SQL
批次更新
? 可以使用 addBatch() 方法來收集 SQL
? 使用 executeBatch() 方法將所收集的
SQL 傳送出去
批次更新
? 以 MySQL 驅動程式的 Statement 實作為
例
批次更新
? 使用 executeBatch() 時, SQL 的執行順序,就是
addBatch() 時的順序
? executeBatch() 會傳回 int[] ,代表每筆 SQL
造成的資料異動列數
? 先前已開 的啟 ResultSet 會被關閉,執行過後收集
SQL 用的 List 會被清空
? 任何的 SQL 錯誤,會丟出
BatchUpdateException
? 可以使用這個物件的 getUpdateCounts() 取得
int[] ,代表先前執行成功的 SQL 所造成的異動筆
數
批次更新
? PreparedStatement 使用批次更新
批次更新
? 以 MySQL 的 PreparedStatement 實作類
別為例
Blob 與 Clob
? BLOB 全名 Binary Large Object ,用於儲存
大量的二進位資料,像是圖 、影音 等檔 檔
? CLOB 全名 Character Large Object ,用於儲
存大量的文字資料
? java.sql.Blob 與 java.sql.Clob 兩個
類別分別代表 BLOB 與 CLOB 資料
Blob 與 Clob
? Blob 擁有
getBinaryStream() 、 getBytes() 等
方法,可以取得代表欄位來源的
InputStream 或欄位的 byte[] 資料
? Clob 擁有
getCharacterStream() 、 getAsciiSt
ream() 等方法,可以取得 Reader 或
InputStream 等資料
Blob 與 Clob
? 也可以把 BLOG 欄位對應 byte[] 或輸入 / 輸出串
流
? 使用 PreparedStatement 的 setBytes() 來設
定要存入的 byte[] 資料,使用
setBinaryStream() 來設定代表輸入來源的
InputStream
? 使用 ResultSet 的 getBytes() 以 byte[] 取
得欄位中儲存的資料,或以
getBinaryStream() 取得代表欄位來源的
InputStream
Blob 與 Clob
簡介交易
? 原子性( Atomicity )
? 一致性( Consistency )
? 隔離行為( Isolation behavior )
? 持續性( Durability )
Java SE 8 技術手冊第 16 章 - 整合资料库
Java SE 8 技術手冊第 16 章 - 整合资料库
Java SE 8 技術手冊第 16 章 - 整合资料库
隔離行為
? 可以透過 Connection 的
getTransactionIsolation() 取得資料
庫目前的隔離行為設定
? 透過 setTransactionIsolation() 可提
示資料庫設定指定的隔離行為
隔離行為
? 可設定常數是定義在 Connection 上
– TRANSACTION_NONE
– TRANSACTION_UNCOMMITTED
– TRANSACTION_COMMITTED
– TRANSACTION_REPEATABLE_READ
– TRANSACTION_SERIALIZABLE
更新遺失( Lost update )
Read uncommited
讀(髒 Dirty read )
Read commited
無法重複的讀取( Unrepeatable read )
Repeatable read
幻讀( Phantom read )
? 同一交易期間,讀取到的資料筆數不一致。例如交
易 A 第一次讀取得到五筆資料,此時交易 B 新增了
一筆資料,導致交易 B 再次讀取得到六筆資料
? 如果隔離行為設定為可重複讀取,但發生幻讀現象
,可以設定隔離層級為「可循序」( Serializable )
,也就是在有交易時若有資料不一致的疑慮,交易
必須可以照順序逐一進行
隔离行為与可预防之问题
隔離行為
? 得知是否支援某個隔離行為
簡介 metadata
? 詮讀資料的資料( Data about data )
? 可以透過 Connection 的 getMetaData()
方法取得 DatabaseMetaData 物件
? 可以透過 ResultSet 的 getMetaData()
方法,取得 ResultSetMetaData 物件
Java SE 8 技術手冊第 16 章 - 整合资料库
簡介 RowSet
? javax.sql.RowSet 代表資料的列集合
– 這邊的資料並不一定是資料庫中的資料,可以是
試算表資料、 XML 資料或任何具有列集合概念
的資料來源
? 是 ResultSet 的子介面,新增了一些行為
,像是透過 setCommand() 設定 詢指令查
、透過 execute() 執行 詢指令以填充資查
料等
簡介 RowSet
連線式 離線式
簡介 RowSet
? JdbcRowSet 是連線式的 RowSet
– 操作 JdbcRowSet 期間,會保持與資料庫的連
線,可視為取得、操作 ResultSet 行為封裝,
可簡化 JDBC 程式的撰寫,或作為 JavaBean 使用
? CachedRowSet 為離線式的 RowSet
– 詢並充填完資料後,就會斷開與資料來源的連查
線,而不用佔據相關連線資源,必要也可以再與
資料來源連線進行資料同步
簡介 RowSet
? 若使用 Oracle/Sun JDK 附帶的
JdbcRowSetImpl ,在 JDK6 之前,可以如下建
立 JdbcRowSet 實例:
? 在 JDK7 之後,新增了
javax.sql.rowset.RowSetFactory 介面與
javax.sql.rowset.RowSetProvider 類別
簡介 RowSet
? 如果使用 Oracle/Sun JDK ,以上程式片段會
取得 JdbcRowSetImpl 實例
? 可以在 動啟 JVM 時,利用系統屬
性 "javax.sql.rowset.RowSetFactory" 指定其它
廠商實作
簡介 RowSet
? 使用 RowSet 詢資料查
Java SE 8 技術手冊第 16 章 - 整合资料库
Java SE 8 技術手冊第 16 章 - 整合资料库
簡介 RowSet
? 在 詢之後,想要離線進行操作,則可以使查
用 CachedRowSet 或其子介面實作物件
? 使用 close() 關閉 CachedRowSet ,若在
相關更新操作之後,想與再與資料來源進行
同步,則可以呼叫 acceptChanges() 方法
簡介 RowSet
? WebRowSet 是 CachedRowSet 的子介面,
其不僅具備離線操作,還能進行 XML 讀寫
簡介 RowSet
簡介 RowSet
? FilteredRowSet 可以對列集合進行過濾
,實現類似 SQL 中 WHERE 等條件式的功能
? JoinRowSet 則可以讓你結合兩個 RowSet
物件,實現類似 SQL 中 JOIN 的功能
? http://docs.oracle.com/javase/tutorial/jdbc/basics
/gettingstarted.html

More Related Content

What's hot (20)

Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
?
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Justin Lin
?
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
?
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSPServlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Justin Lin
?
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJava SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTLServlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Justin Lin
?
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
?
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDEJava SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Justin Lin
?
Ch09 整合资料库
Ch09 整合资料库Ch09 整合资料库
Ch09 整合资料库
Justin Lin
?
颁贬16:整合资料库
颁贬16:整合资料库颁贬16:整合资料库
颁贬16:整合资料库
Justin Lin
?
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
?
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
?
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
?
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
?
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 9 章:整合资料库
Servlet & JSP 教學手冊第二版 - 第 9 章:整合资料库Servlet & JSP 教學手冊第二版 - 第 9 章:整合资料库
Servlet & JSP 教學手冊第二版 - 第 9 章:整合资料库
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletServlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Justin Lin
?
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
?
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Justin Lin
?
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSPServlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Justin Lin
?
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJava SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTLServlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Justin Lin
?
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
?
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDEJava SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Justin Lin
?
Ch09 整合资料库
Ch09 整合资料库Ch09 整合资料库
Ch09 整合资料库
Justin Lin
?
颁贬16:整合资料库
颁贬16:整合资料库颁贬16:整合资料库
颁贬16:整合资料库
Justin Lin
?
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
?
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
?
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
?
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 9 章:整合资料库
Servlet & JSP 教學手冊第二版 - 第 9 章:整合资料库Servlet & JSP 教學手冊第二版 - 第 9 章:整合资料库
Servlet & JSP 教學手冊第二版 - 第 9 章:整合资料库
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletServlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Justin Lin
?

Viewers also liked (20)

Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
?
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
?
Java SE 8 技術手冊第 13 章 - 時間與日期
Java SE 8 技術手冊第 13 章 - 時間與日期Java SE 8 技術手冊第 13 章 - 時間與日期
Java SE 8 技術手冊第 13 章 - 時間與日期
Justin Lin
?
Java SE 8 技術手冊第 7 章 - 介面與多型
Java SE 8 技術手冊第 7 章 - 介面與多型Java SE 8 技術手冊第 7 章 - 介面與多型
Java SE 8 技術手冊第 7 章 - 介面與多型
Justin Lin
?
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?
Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理
Justin Lin
?
Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 3 章 - 基礎語法Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 3 章 - 基礎語法
Justin Lin
?
Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型
Justin Lin
?
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJava SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
?
Java SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與MapJava SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與Map
Justin Lin
?
從 REPL 到 IDE
從 REPL 到 IDE從 REPL 到 IDE
從 REPL 到 IDE
Justin Lin
?
进阶主题
进阶主题进阶主题
进阶主题
Justin Lin
?
3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD
Justin Lin
?
Java SE 7 技術手冊試讀 - Java 平台概論
Java SE 7 技術手冊試讀 - Java 平台概論Java SE 7 技術手冊試讀 - Java 平台概論
Java SE 7 技術手冊試讀 - Java 平台概論
Justin Lin
?
JDK8 Functional API
JDK8 Functional APIJDK8 Functional API
JDK8 Functional API
Justin Lin
?
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
Justin Lin
?
Java Web 程式之效能技巧與安全防護
Java Web 程式之效能技巧與安全防護Java Web 程式之效能技巧與安全防護
Java Web 程式之效能技巧與安全防護
Justin Lin
?
Java 8 與 retrolambda
Java 8 與 retrolambdaJava 8 與 retrolambda
Java 8 與 retrolambda
Justin Lin
?
常用内建模组
常用内建模组常用内建模组
常用内建模组
Justin Lin
?
资料结构
资料结构资料结构
资料结构
Justin Lin
?
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
?
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
?
Java SE 8 技術手冊第 13 章 - 時間與日期
Java SE 8 技術手冊第 13 章 - 時間與日期Java SE 8 技術手冊第 13 章 - 時間與日期
Java SE 8 技術手冊第 13 章 - 時間與日期
Justin Lin
?
Java SE 8 技術手冊第 7 章 - 介面與多型
Java SE 8 技術手冊第 7 章 - 介面與多型Java SE 8 技術手冊第 7 章 - 介面與多型
Java SE 8 技術手冊第 7 章 - 介面與多型
Justin Lin
?
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?
Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理
Justin Lin
?
Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 3 章 - 基礎語法Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 3 章 - 基礎語法
Justin Lin
?
Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型
Justin Lin
?
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJava SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
?
Java SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與MapJava SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與Map
Justin Lin
?
3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD
Justin Lin
?
Java SE 7 技術手冊試讀 - Java 平台概論
Java SE 7 技術手冊試讀 - Java 平台概論Java SE 7 技術手冊試讀 - Java 平台概論
Java SE 7 技術手冊試讀 - Java 平台概論
Justin Lin
?
JDK8 Functional API
JDK8 Functional APIJDK8 Functional API
JDK8 Functional API
Justin Lin
?
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
Justin Lin
?
Java Web 程式之效能技巧與安全防護
Java Web 程式之效能技巧與安全防護Java Web 程式之效能技巧與安全防護
Java Web 程式之效能技巧與安全防護
Justin Lin
?
Java 8 與 retrolambda
Java 8 與 retrolambdaJava 8 與 retrolambda
Java 8 與 retrolambda
Justin Lin
?
常用内建模组
常用内建模组常用内建模组
常用内建模组
Justin Lin
?

Similar to Java SE 8 技術手冊第 16 章 - 整合资料库 (20)

整合资料库
整合资料库整合资料库
整合资料库
Justin Lin
?
Ch09 整合资料库
Ch09 整合资料库 Ch09 整合资料库
Ch09 整合资料库
Justin Lin
?
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料
yiditushe
?
02.web sphere培训 应用websphere
02.web sphere培训 应用websphere02.web sphere培训 应用websphere
02.web sphere培训 应用websphere
littlecong
?
Java_08:SQL
Java_08:SQLJava_08:SQL
Java_08:SQL
Brad Chao
?
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介
Herman Wu
?
贬颈产别谤苍补迟别教程
贬颈产别谤苍补迟别教程贬颈产别谤苍补迟别教程
贬颈产别谤苍补迟别教程
Shilong Sang
?
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
?
闯2别别经典学习笔记
闯2别别经典学习笔记闯2别别经典学习笔记
闯2别别经典学习笔记
yiditushe
?
03.wls depoly jdbc
03.wls depoly jdbc03.wls depoly jdbc
03.wls depoly jdbc
Meng He
?
000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲
ArBing Xie
?
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發
koji lin
?
狈丑颈产别谤苍补迟别+蝉辩濒颈迟别测试实战经验分享
狈丑颈产别谤苍补迟别+蝉辩濒颈迟别测试实战经验分享狈丑颈产别谤苍补迟别+蝉辩濒颈迟别测试实战经验分享
狈丑颈产别谤苍补迟别+蝉辩濒颈迟别测试实战经验分享
Wade Huang
?
lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫
建興 王
?
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管
Will Huang
?
Hibernate
HibernateHibernate
Hibernate
Henry Huang
?
Oracle saa s paas overview
Oracle saa s paas overviewOracle saa s paas overview
Oracle saa s paas overview
Chris Lee
?
Oracle雲端服務介紹 taiwan
Oracle雲端服務介紹   taiwanOracle雲端服務介紹   taiwan
Oracle雲端服務介紹 taiwan
Chieh-An Yu
?
Ch09 整合资料库
Ch09 整合资料库 Ch09 整合资料库
Ch09 整合资料库
Justin Lin
?
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料
yiditushe
?
02.web sphere培训 应用websphere
02.web sphere培训 应用websphere02.web sphere培训 应用websphere
02.web sphere培训 应用websphere
littlecong
?
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介
Herman Wu
?
贬颈产别谤苍补迟别教程
贬颈产别谤苍补迟别教程贬颈产别谤苍补迟别教程
贬颈产别谤苍补迟别教程
Shilong Sang
?
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
?
闯2别别经典学习笔记
闯2别别经典学习笔记闯2别别经典学习笔记
闯2别别经典学习笔记
yiditushe
?
03.wls depoly jdbc
03.wls depoly jdbc03.wls depoly jdbc
03.wls depoly jdbc
Meng He
?
000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲
ArBing Xie
?
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發
koji lin
?
狈丑颈产别谤苍补迟别+蝉辩濒颈迟别测试实战经验分享
狈丑颈产别谤苍补迟别+蝉辩濒颈迟别测试实战经验分享狈丑颈产别谤苍补迟别+蝉辩濒颈迟别测试实战经验分享
狈丑颈产别谤苍补迟别+蝉辩濒颈迟别测试实战经验分享
Wade Huang
?
lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫
建興 王
?
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管
Will Huang
?
Oracle saa s paas overview
Oracle saa s paas overviewOracle saa s paas overview
Oracle saa s paas overview
Chris Lee
?
Oracle雲端服務介紹 taiwan
Oracle雲端服務介紹   taiwanOracle雲端服務介紹   taiwan
Oracle雲端服務介紹 taiwan
Chieh-An Yu
?

More from Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
?
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
?
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
?
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
?
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
Justin Lin
?
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
Justin Lin
?
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
?
14. 进阶主题
14. 进阶主题14. 进阶主题
14. 进阶主题
Justin Lin
?
13.并行、平行与非同步
13.并行、平行与非同步13.并行、平行与非同步
13.并行、平行与非同步
Justin Lin
?
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
?
11. 常用内建模组
11. 常用内建模组11. 常用内建模组
11. 常用内建模组
Justin Lin
?
10. 资料永续与交换
10. 资料永续与交换10. 资料永续与交换
10. 资料永续与交换
Justin Lin
?
9. 资料结构
9. 资料结构9. 资料结构
9. 资料结构
Justin Lin
?
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
?
7. 例外處理
7. 例外處理7. 例外處理
7. 例外處理
Justin Lin
?
6. 類別的繼承
6. 類別的繼承6. 類別的繼承
6. 類別的繼承
Justin Lin
?
5. 從模組到類別
5. 從模組到類別5. 從模組到類別
5. 從模組到類別
Justin Lin
?
4. 流程語法與函式
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式
Justin Lin
?
Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
?
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
?
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
?
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
?
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
Justin Lin
?
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
Justin Lin
?
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
?
13.并行、平行与非同步
13.并行、平行与非同步13.并行、平行与非同步
13.并行、平行与非同步
Justin Lin
?
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
?
11. 常用内建模组
11. 常用内建模组11. 常用内建模组
11. 常用内建模组
Justin Lin
?
10. 资料永续与交换
10. 资料永续与交换10. 资料永续与交换
10. 资料永续与交换
Justin Lin
?
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
?
6. 類別的繼承
6. 類別的繼承6. 類別的繼承
6. 類別的繼承
Justin Lin
?
5. 從模組到類別
5. 從模組到類別5. 從模組到類別
5. 從模組到類別
Justin Lin
?
4. 流程語法與函式
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式
Justin Lin
?

Java SE 8 技術手冊第 16 章 - 整合资料库

  • 2. 整合资料库 學習目標 ? 了解 JDBC 架構 ? 使用 JDBC API ? 瞭解交易與隔離層級 ? 認識 RowSet
  • 3. 簡介 JDBC ? 資料庫本身是個獨立運行的應用程式 ? 撰寫的應用程式是利用網路通訊協定與資料 庫進行指令交換,以進行資料的增刪 找查
  • 5. 簡介 JDBC ? 應用程式如何呼叫這組程式庫? ? 不同的資料庫通常會有不同的通訊協定 ? 用以連線不同資料庫的程式庫在 API 上也會 有所不同
  • 6. 簡介 JDBC ? JDBC 全名 Java DataBase Connectivity ? Java 連線資料庫的標準規範,定義一組標準 類別與介面: – 應用程式需要連線資料庫時就呼叫這組標準 API ,而標準 API 中的介面會由資料庫廠商實作 ,通常稱之為 JDBC 驅動程式( Driver )
  • 7. 簡介 JDBC ? JDBC 應用程式開發者介面( Application Developer Interface ) – 應用程式需要連線資料庫 – 相關 API 主要是座落於 java.sql 與 javax.sql ? JDBC 驅動程式開發者介面( Driver Developer Interface ) – 資料庫廠商要實作驅動程式時的規範,一般開發 者並不用瞭解
  • 9. 簡介 JDBC ? 應用程式會使用 JDBC 連線資料庫
  • 10. 簡介 JDBC ? 廠商在實作 JDBC 驅動程式時,依方式可將 驅動程式分作四種類型 – Type 1 : JDBC-ODBC Bridge Driver – Type 2 : Native API Dirver – Type 3 : JDBC-Net Driver – Type 4 : Native Protocol Driver
  • 11. Type 1 : JDBC-ODBC Bridge Driver
  • 12. Type 1 : JDBC-ODBC Bridge Driver ? 實作這種驅動程式非常簡單 ? JDBC 與 ODBC 並非一對一的對應,所以部 份呼叫無法直接轉換,因此有些功能是受限 的 ? 多層呼叫轉換結果,存取速度也會受到限制 ? ODBC 本身需在平台上先設定好,彈性不足 , ODBC 驅動程式本身也有跨平台的限制
  • 13. Type 2 : Native API Dirver
  • 14. Type 2 : Native API Dirver ? 驅動程式本身與平台相依,沒有達到 JDBC 驅動程式的目標之一:跨平台 ? 直接呼叫資料庫原生 API ,因此在速度上, 有機會成為四種類型中最快的驅動程式 – 速度的優勢是在於獲得資料庫回應資料後,建構 相關 JDBC API 實作物件時 ? 使用前必須先在各平台進行驅動程式的安裝 設定(像是安裝資料庫專屬的原生程式庫)
  • 15. Type 3 : JDBC-Net Driver
  • 16. Type 3 : JDBC-Net Driver ? 可使用純綷的 Java 技術來實現,可以跨平台 ? 架構彈性高,客戶端不受影響 ? 經由中介伺服器轉換,速度較慢,獲得架構 上的彈性是使用這類型驅動程式的目的
  • 17. Type 4 : Native Protocol Driver
  • 18. Type 4 : Native Protocol Driver ? 驅動程式可以使用純綷 Java 技術來實現,可 以跨平台 ? 效能上也能有不錯的表現 ? 不需要如 Type 3 獲得架構上的彈性時,通常 會使用這類型驅動程式
  • 19. 连接资料库 ? 為了要连接资料库系統,必須要有廠商實作 的 JDBC 驅動程式,必須在 CLASSPATH 中 設定驅動程式 JAR 案檔
  • 20. 连接资料库 ? 基本資料庫操作相關的 JDBC 介面或類別是 位於 java.sql 套件中 ? 要取得資料庫連線,必須有幾個動作: – 註冊 Driver 實作物件 – 取得 Connection 實作物件 – 關閉 Connectiion 實作物件
  • 21. 连接资料库 ? 以 MySQL 實作的驅動程式為 例, com.mysql.jdbc.Driver 類別實作 了 java.sql.Driver 介面 ? 管理 Driver 實作物件的類別是 java.sql.DriverManager
  • 22. 连接资料库 ? 實際上很少自行撰寫程式碼進行這個動作 ? 只要想辦法載入 Driver 介面的實作類 別 .class 案,就會完成註冊檔 ? 可以透過 java.lang.Class 類別的 forName() ,動態載入驅動程式類別
  • 24. 连接资料库 ? 使用 JDBC 時,要求載入 .class 案的方式有檔 四種: – 使用 Class.forName() – 自行建立 Driver 介面實作類別的實例 – 動啟 JVM 時指定 jdbc.drivers 屬性 – 設定 JAR 中 /services/java.sql.Driver 案檔 ( JDK6 )
  • 25. 连接资料库 ? 除了「協定」在 JDBC URL 中總是 jdbc 開始 之外, JDBC URL 格式各家資料庫都不相同 ,必須 詢資料庫產品使用手冊查
  • 26. 取得 Connection 實作物件 ? 以 MySQL 為例: ? XML 中:
  • 28. 连接资料库 ? 在處理 JDBC 時很常遇到的 SQLException 例外物件,為資料庫操作過程發生錯誤時的 代表物件 ? 受檢例外( Checked Exception ),必須使用 try...catch 明確處理,在例外發生時嘗試關閉 相關資源
  • 29. 连接资料库 ? 取得 Connection 物件之後,可以使用 isClosed() 方法測試與資料庫的連接是否 關閉 ? 若確定不再需要連接,則必須使用 close() 來關閉與資料庫的連接
  • 30. 连接资料库 ? 從 JDK7 之後, JDBC 的 Connection 、 Statement 、 ResultSe t 等介面,都是 java.lang.AutoClosable 子介面
  • 34. 使用 Statement 、 ResultSet ? java.sql.Statement 物件是 SQL 陳述的 代表物件 ? 可以使用 Connection 的 createStatement() 來建立 ? 可以使用 executeUpdate() 、 executeQuery() 等方法來執行 SQL
  • 35. 使用 Statement 、 ResultSet ? executeUpdate() 主要是用來執行 CREATE TABLE 、 INSERT 、 DROP TABLE 、 ALTER TABLE 等會改變資料庫 內容的 SQL ? executeQuery() 方法則是用於 SELECT 等 詢資料庫的查 SQL
  • 36. 使用 Statement 、 ResultSet ? executeUpdate() 會傳回 int 結果,表示 資料變動的筆數 ? executeQuery() 會傳回 java.sql.ResultSet 物件,代表 詢的查 結果
  • 37. 使用 Statement 、 ResultSet
  • 38. 使用 Statement 、 ResultSet ? Statement 的 execute() 可以用來執行 SQL – 傳回 true 的話表示將傳回 詢結果,可以使用查 getResultSet() 取得 ResultSet 物件 – 傳回 false ,表示傳回更新筆數或沒有結果, 可以使用 getUpdateCount() 取得更新筆數。
  • 42. ? 使用 ParparedStatement 改寫先前 MessageDAO 中 add() 執行 SQL 語句的部 份
  • 44. 使用 PreparedStatement ? 以下 username 與 password 將被視作是 SQL 中純綷的字串,而不會當作 SQL 語法來 解釋
  • 45. 使用 CallableStatement ? 呼叫資料庫的預存程序( Stored Procedure ) ? 必須呼叫 prepareCall() 建立 CallableStatement 實例
  • 46. Java 型態與 SQL 型态对应
  • 47. Java 型態與 SQL 型态对应 ? 日期時間在 JDBC 中,並不是使用 java.util.Date – 年、月、日、時、分、秒、毫秒 ? 在 JDBC 中要表示日期,是使用 java.sql.Date – 年、月、日 ? 要表示時間的話則是使用 java.sql.Time – 時、分、秒 ? 使用 java.sql.Timestamp – 時、分、秒、微秒
  • 48. Java 型態與 SQL 型态对应 ? JDK8 新時間日期 API – 對於 TimeStamp 實例,你可以使用 toInstant() 方法將之轉為 Instant 實例 – 如果有個 Instant 實例,可以透過 TimeStamp 的 from() 靜態方法,將之轉為 TimeStamp 實例。
  • 49. 使用 DataSource 取得連線 ? 實際應用程式開發時, JDBC URL 、使用者 名稱、密碼等資訊是很敏感的資訊,有些開 發人員根本無從得知 ? 如果 MessageDAO 的使用者無法告知這些資 訊,你如何改寫 MessageDAO ?
  • 50. 使用 DataSource 取得連線 ? 可以讓 MessageDAO 依賴於 javax.sql.DataSource 介面 …
  • 52. 使用 DataSource 取得連線 ? 實作具簡單連接池的 DataSource…
  • 56. 使用 ResultSet 捲動、更新資 料 ? 從 JDBC 2.0 開始, ResultSet 並不僅可以 使用 previous() 、 first() 、 last() 等方法前後移動資料游標,還可以呼叫 updateXXX() 、 updateRow() 等方法進 行資料修改
  • 57. 使用 ResultSet 捲動、更新資 料 ? 建立 Statement 或 PreparedStatement 實例時,可以指定結果集類型與並行方式 ? 結果集類型可以指定三種設定: – ResultSet.TYPE_FORWARD_ONLY (預設) – ResultSet.TYPE_SCROLL_INSENSITIVE – ResultSet.TYPE_SCROLL_SENSITIVE
  • 58. 使用 ResultSet 捲動、更新資 料 ? 更新設定可以有兩種指定: – ResultSet.CONCUR_READ_ONLY (預設) – ResultSet.CONCUR_UPDATABLE
  • 60. 使用 ResultSet 捲動、更新資 料 ? 使用 ResultSet 進行資料修改 – 必須選取單一表格 – 必須選取主鍵 – 必須選取所有 NOT NULL 的值 ? 更新資料 ...
  • 63. 批次更新 ? 以下每一次執行 executeUpdate() ,其實 都會向資料庫發送一次 SQL
  • 64. 批次更新 ? 可以使用 addBatch() 方法來收集 SQL ? 使用 executeBatch() 方法將所收集的 SQL 傳送出去
  • 65. 批次更新 ? 以 MySQL 驅動程式的 Statement 實作為 例
  • 66. 批次更新 ? 使用 executeBatch() 時, SQL 的執行順序,就是 addBatch() 時的順序 ? executeBatch() 會傳回 int[] ,代表每筆 SQL 造成的資料異動列數 ? 先前已開 的啟 ResultSet 會被關閉,執行過後收集 SQL 用的 List 會被清空 ? 任何的 SQL 錯誤,會丟出 BatchUpdateException ? 可以使用這個物件的 getUpdateCounts() 取得 int[] ,代表先前執行成功的 SQL 所造成的異動筆 數
  • 68. 批次更新 ? 以 MySQL 的 PreparedStatement 實作類 別為例
  • 69. Blob 與 Clob ? BLOB 全名 Binary Large Object ,用於儲存 大量的二進位資料,像是圖 、影音 等檔 檔 ? CLOB 全名 Character Large Object ,用於儲 存大量的文字資料 ? java.sql.Blob 與 java.sql.Clob 兩個 類別分別代表 BLOB 與 CLOB 資料
  • 70. Blob 與 Clob ? Blob 擁有 getBinaryStream() 、 getBytes() 等 方法,可以取得代表欄位來源的 InputStream 或欄位的 byte[] 資料 ? Clob 擁有 getCharacterStream() 、 getAsciiSt ream() 等方法,可以取得 Reader 或 InputStream 等資料
  • 71. Blob 與 Clob ? 也可以把 BLOG 欄位對應 byte[] 或輸入 / 輸出串 流 ? 使用 PreparedStatement 的 setBytes() 來設 定要存入的 byte[] 資料,使用 setBinaryStream() 來設定代表輸入來源的 InputStream ? 使用 ResultSet 的 getBytes() 以 byte[] 取 得欄位中儲存的資料,或以 getBinaryStream() 取得代表欄位來源的 InputStream
  • 73. 簡介交易 ? 原子性( Atomicity ) ? 一致性( Consistency ) ? 隔離行為( Isolation behavior ) ? 持續性( Durability )
  • 77. 隔離行為 ? 可以透過 Connection 的 getTransactionIsolation() 取得資料 庫目前的隔離行為設定 ? 透過 setTransactionIsolation() 可提 示資料庫設定指定的隔離行為
  • 78. 隔離行為 ? 可設定常數是定義在 Connection 上 – TRANSACTION_NONE – TRANSACTION_UNCOMMITTED – TRANSACTION_COMMITTED – TRANSACTION_REPEATABLE_READ – TRANSACTION_SERIALIZABLE
  • 85. 幻讀( Phantom read ) ? 同一交易期間,讀取到的資料筆數不一致。例如交 易 A 第一次讀取得到五筆資料,此時交易 B 新增了 一筆資料,導致交易 B 再次讀取得到六筆資料 ? 如果隔離行為設定為可重複讀取,但發生幻讀現象 ,可以設定隔離層級為「可循序」( Serializable ) ,也就是在有交易時若有資料不一致的疑慮,交易 必須可以照順序逐一進行
  • 88. 簡介 metadata ? 詮讀資料的資料( Data about data ) ? 可以透過 Connection 的 getMetaData() 方法取得 DatabaseMetaData 物件 ? 可以透過 ResultSet 的 getMetaData() 方法,取得 ResultSetMetaData 物件
  • 90. 簡介 RowSet ? javax.sql.RowSet 代表資料的列集合 – 這邊的資料並不一定是資料庫中的資料,可以是 試算表資料、 XML 資料或任何具有列集合概念 的資料來源 ? 是 ResultSet 的子介面,新增了一些行為 ,像是透過 setCommand() 設定 詢指令查 、透過 execute() 執行 詢指令以填充資查 料等
  • 92. 簡介 RowSet ? JdbcRowSet 是連線式的 RowSet – 操作 JdbcRowSet 期間,會保持與資料庫的連 線,可視為取得、操作 ResultSet 行為封裝, 可簡化 JDBC 程式的撰寫,或作為 JavaBean 使用 ? CachedRowSet 為離線式的 RowSet – 詢並充填完資料後,就會斷開與資料來源的連查 線,而不用佔據相關連線資源,必要也可以再與 資料來源連線進行資料同步
  • 93. 簡介 RowSet ? 若使用 Oracle/Sun JDK 附帶的 JdbcRowSetImpl ,在 JDK6 之前,可以如下建 立 JdbcRowSet 實例: ? 在 JDK7 之後,新增了 javax.sql.rowset.RowSetFactory 介面與 javax.sql.rowset.RowSetProvider 類別
  • 94. 簡介 RowSet ? 如果使用 Oracle/Sun JDK ,以上程式片段會 取得 JdbcRowSetImpl 實例 ? 可以在 動啟 JVM 時,利用系統屬 性 "javax.sql.rowset.RowSetFactory" 指定其它 廠商實作
  • 95. 簡介 RowSet ? 使用 RowSet 詢資料查
  • 98. 簡介 RowSet ? 在 詢之後,想要離線進行操作,則可以使查 用 CachedRowSet 或其子介面實作物件 ? 使用 close() 關閉 CachedRowSet ,若在 相關更新操作之後,想與再與資料來源進行 同步,則可以呼叫 acceptChanges() 方法
  • 99. 簡介 RowSet ? WebRowSet 是 CachedRowSet 的子介面, 其不僅具備離線操作,還能進行 XML 讀寫
  • 101. 簡介 RowSet ? FilteredRowSet 可以對列集合進行過濾 ,實現類似 SQL 中 WHERE 等條件式的功能 ? JoinRowSet 則可以讓你結合兩個 RowSet 物件,實現類似 SQL 中 JOIN 的功能 ? http://docs.oracle.com/javase/tutorial/jdbc/basics /gettingstarted.html