SlideShare a Scribd company logo
1 of 92
Download to read offline
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

More Related Content

What's hot

Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
 
2. 型態、變數與運算子
2. 型態、變數與運算子2. 型態、變數與運算子
2. 型態、變數與運算子Justin Lin
 
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定ServletCh02 撰寫與設定Servlet
Ch02 撰寫與設定ServletJustin Lin
 
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletServlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletJustin Lin
 
1. JavaScript 起步走
1. JavaScript 起步走1. JavaScript 起步走
1. JavaScript 起步走Justin Lin
 
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式Justin Lin
 
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Justin Lin
 
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJava SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJustin Lin
 
CH02:從JDK到IDE
CH02:從JDK到IDECH02:從JDK到IDE
CH02:從JDK到IDEJustin Lin
 
CH1:Java平台概論
CH1:Java平台概論CH1:Java平台概論
CH1:Java平台概論Justin Lin
 
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJava SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJustin Lin
 
Spring 2.0 技術手冊第一章 - 認識 Spring
Spring 2.0 技術手冊第一章 - 認識 SpringSpring 2.0 技術手冊第一章 - 認識 Spring
Spring 2.0 技術手冊第一章 - 認識 SpringJustin Lin
 
いまさらながらの Windows Workflow 入門
いまさらながらの Windows Workflow 入門いまさらながらの Windows Workflow 入門
いまさらながらの Windows Workflow 入門Jun-ichi Sakamoto
 
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patternsnekop
 
1. Python起步走
1. Python起步走1. Python起步走
1. Python起步走Justin Lin
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方Takahiro YAMADA
 
AWSでのバースト ― GP2 T2 ご紹介資料
AWSでのバースト ― GP2 T2 ご紹介資料AWSでのバースト ― GP2 T2 ご紹介資料
AWSでのバースト ― GP2 T2 ご紹介資料Rasmus Ekman
 
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編なべ
 
Java SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與MapJava SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與MapJustin Lin
 
Github codespaces すごく良い。もうこれで 十分なんじゃという話
Github codespaces すごく良い。もうこれで 十分なんじゃという話Github codespaces すごく良い。もうこれで 十分なんじゃという話
Github codespaces すごく良い。もうこれで 十分なんじゃという話xiidec
 

What's hot (20)

Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
 
2. 型態、變數與運算子
2. 型態、變數與運算子2. 型態、變數與運算子
2. 型態、變數與運算子
 
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定ServletCh02 撰寫與設定Servlet
Ch02 撰寫與設定Servlet
 
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletServlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
 
1. JavaScript 起步走
1. JavaScript 起步走1. JavaScript 起步走
1. JavaScript 起步走
 
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
 
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
 
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJava SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
 
CH02:從JDK到IDE
CH02:從JDK到IDECH02:從JDK到IDE
CH02:從JDK到IDE
 
CH1:Java平台概論
CH1:Java平台概論CH1:Java平台概論
CH1:Java平台概論
 
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJava SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
 
Spring 2.0 技術手冊第一章 - 認識 Spring
Spring 2.0 技術手冊第一章 - 認識 SpringSpring 2.0 技術手冊第一章 - 認識 Spring
Spring 2.0 技術手冊第一章 - 認識 Spring
 
いまさらながらの Windows Workflow 入門
いまさらながらの Windows Workflow 入門いまさらながらの Windows Workflow 入門
いまさらながらの Windows Workflow 入門
 
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patterns
 
1. Python起步走
1. Python起步走1. Python起步走
1. Python起步走
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方
 
AWSでのバースト ― GP2 T2 ご紹介資料
AWSでのバースト ― GP2 T2 ご紹介資料AWSでのバースト ― GP2 T2 ご紹介資料
AWSでのバースト ― GP2 T2 ご紹介資料
 
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編
 
Java SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與MapJava SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與Map
 
Github codespaces すごく良い。もうこれで 十分なんじゃという話
Github codespaces すごく良い。もうこれで 十分なんじゃという話Github codespaces すごく良い。もうこれで 十分なんじゃという話
Github codespaces すごく良い。もうこれで 十分なんじゃという話
 

Similar to Ch09 整合資料庫

Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Justin Lin
 
CH16:整合資料庫
CH16:整合資料庫CH16:整合資料庫
CH16:整合資料庫Justin Lin
 
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫Justin Lin
 
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Justin Lin
 
整合資料庫
整合資料庫整合資料庫
整合資料庫Justin Lin
 
Ch09 整合資料庫
Ch09 整合資料庫 Ch09 整合資料庫
Ch09 整合資料庫 Justin Lin
 
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管Will Huang
 
Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Wade Huang
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介Herman Wu
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發koji lin
 
03.wls depoly jdbc
03.wls depoly jdbc03.wls depoly jdbc
03.wls depoly jdbcMeng He
 
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4   app - oss - db (ver 1.0)開放原始碼 Ch2.4   app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)My own sweet home!
 
My sql管理基础 李春_v2
My sql管理基础 李春_v2My sql管理基础 李春_v2
My sql管理基础 李春_v2Pickup Li
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料yiditushe
 
百度数据库中间层
百度数据库中间层百度数据库中间层
百度数据库中间层yp_fangdong
 
John Resig Beijing 2010 (中文版)
John Resig Beijing 2010 (中文版)John Resig Beijing 2010 (中文版)
John Resig Beijing 2010 (中文版)Jia Mi
 
02.web sphere培训 应用websphere
02.web sphere培训 应用websphere02.web sphere培训 应用websphere
02.web sphere培训 应用webspherelittlecong
 
无数据库日志文件恢复数据库方法两则
无数据库日志文件恢复数据库方法两则无数据库日志文件恢复数据库方法两则
无数据库日志文件恢复数据库方法两则wensheng wei
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7Justin Lin
 

Similar to Ch09 整合資料庫 (20)

Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
 
CH16:整合資料庫
CH16:整合資料庫CH16:整合資料庫
CH16:整合資料庫
 
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
 
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
 
整合資料庫
整合資料庫整合資料庫
整合資料庫
 
Java_08:SQL
Java_08:SQLJava_08:SQL
Java_08:SQL
 
Ch09 整合資料庫
Ch09 整合資料庫 Ch09 整合資料庫
Ch09 整合資料庫
 
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管
 
Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發
 
03.wls depoly jdbc
03.wls depoly jdbc03.wls depoly jdbc
03.wls depoly jdbc
 
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4   app - oss - db (ver 1.0)開放原始碼 Ch2.4   app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
 
My sql管理基础 李春_v2
My sql管理基础 李春_v2My sql管理基础 李春_v2
My sql管理基础 李春_v2
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料
 
百度数据库中间层
百度数据库中间层百度数据库中间层
百度数据库中间层
 
John Resig Beijing 2010 (中文版)
John Resig Beijing 2010 (中文版)John Resig Beijing 2010 (中文版)
John Resig Beijing 2010 (中文版)
 
02.web sphere培训 应用websphere
02.web sphere培训 应用websphere02.web sphere培训 应用websphere
02.web sphere培训 应用websphere
 
无数据库日志文件恢复数据库方法两则
无数据库日志文件恢复数据库方法两则无数据库日志文件恢复数据库方法两则
无数据库日志文件恢复数据库方法两则
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
 

More from Justin Lin

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤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
 
3.型態與運算子
3.型態與運算子3.型態與運算子
3.型態與運算子Justin Lin
 
2. 從 REPL 到 IDE
2. 從 REPL 到 IDE2. 從 REPL 到 IDE
2. 從 REPL 到 IDEJustin Lin
 
Python 3.9 技術手冊目錄
Python 3.9 技術手冊目錄Python 3.9 技術手冊目錄
Python 3.9 技術手冊目錄Justin Lin
 
CH19:深入模組化
CH19:深入模組化CH19:深入模組化
CH19:深入模組化Justin Lin
 
CH18:自訂泛型、列舉與標註
CH18:自訂泛型、列舉與標註CH18:自訂泛型、列舉與標註
CH18:自訂泛型、列舉與標註Justin Lin
 

More from Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
 
7. 例外處理
7. 例外處理7. 例外處理
7. 例外處理
 
6. 類別的繼承
6. 類別的繼承6. 類別的繼承
6. 類別的繼承
 
5. 從模組到類別
5. 從模組到類別5. 從模組到類別
5. 從模組到類別
 
4. 流程語法與函式
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式
 
3.型態與運算子
3.型態與運算子3.型態與運算子
3.型態與運算子
 
2. 從 REPL 到 IDE
2. 從 REPL 到 IDE2. 從 REPL 到 IDE
2. 從 REPL 到 IDE
 
Python 3.9 技術手冊目錄
Python 3.9 技術手冊目錄Python 3.9 技術手冊目錄
Python 3.9 技術手冊目錄
 
CH19:深入模組化
CH19:深入模組化CH19:深入模組化
CH19:深入模組化
 
CH18:自訂泛型、列舉與標註
CH18:自訂泛型、列舉與標註CH18:自訂泛型、列舉與標註
CH18:自訂泛型、列舉與標註
 

Recently uploaded

20170104 - transaction_pattern
20170104 - transaction_pattern20170104 - transaction_pattern
20170104 - transaction_patternJamie (Taka) Wang
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxNCU MCL
 
20161220 - domain-driven design
20161220 - domain-driven design20161220 - domain-driven design
20161220 - domain-driven designJamie (Taka) Wang
 
20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLPJamie (Taka) Wang
 
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptxNCU MCL
 
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptxNCU MCL
 
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptxNCU MCL
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】黑客 接单【TG/微信qoqoqdqd】
 
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxNCU MCL
 
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptxNCU MCL
 

Recently uploaded (15)

20170104 - transaction_pattern
20170104 - transaction_pattern20170104 - transaction_pattern
20170104 - transaction_pattern
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
 
20161220 - domain-driven design
20161220 - domain-driven design20161220 - domain-driven design
20161220 - domain-driven design
 
20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP
 
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
 
20151111 - IoT Sync Up
20151111 - IoT Sync Up20151111 - IoT Sync Up
20151111 - IoT Sync Up
 
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
 
20161027 - edge part2
20161027 - edge part220161027 - edge part2
20161027 - edge part2
 
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
 
20200226 - AI Overview
20200226 - AI Overview20200226 - AI Overview
20200226 - AI Overview
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
 
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
 
20200323 - AI Intro
20200323 - AI Intro20200323 - AI Intro
20200323 - AI Intro
 
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
 
Entities in DCPS (DDS)
Entities in DCPS (DDS)Entities in DCPS (DDS)
Entities in DCPS (DDS)
 

Ch09 整合資料庫