第12章 資料庫 - 長榮大學資訊管理學系
Download
Report
Transcript 第12章 資料庫 - 長榮大學資訊管理學系
第12章
資料庫
Java 2 程式設計入門與應用
目錄
12-1 資料庫的簡介
12-2 SQL語法
溫故知新
自我突破習題
2
12-1
12-1.1
12-1.2
12-1.3
12-1.4
12-1.5
資料庫的簡介
建立資料庫與資料表
何謂JDBC
建立ODBC資料來源
連結JDBC資料庫並顯示資料
顯示資料表的資訊
3
前言:
在資料庫內可以建立一個或多個資料表,例如:
學習者的基本資料、學習歷程資料等,每一個
資料表則由許多具有相同屬性的資料記錄結合
而成的,而資料表之間可以共同欄位做為彼此
連結的依據。
利用資料庫的特性,可以應用在管理與存取資
料檔案,以便做為管理資料庫的系統,在這一
節中將介紹在Java中建立資料庫連結的技巧。
4
12-1.1
建立資料庫與資料表
建 立 資 料 庫 的 工 具 很 多 ( 例 如 : Oracle 、
Informix、SQL Server、Access等等),操作最
簡單的工具是微軟(Microsoft)的Access,本
節就以Access為例,說明建立資料庫與資料表
的技巧。
5
建立資料庫與資料表的操作方法如下:
6
7
8
9
10
11
12
開啟資料表後,就可以在資料表的欄位
中一一輸入資料內容,畫面顯示如下:
13
14
12-1.2
何謂JDBC
JDBC(Java DataBase Connectivity)是用來執行SOL命令的Java
API,讓Java能呼叫支援所有SQL的資料庫系統,所以不用擔心程
式將使用哪一種資料庫系統。
執行Java應用程式時,會透過JDBC驅動程式,然後在不同的資料
庫系統中執行SQL命令,其關係圖如下所示:
15
結構化查詢語言:
結構化查詢語言(Structured Query Language,
簡稱SQL)是一種用於查詢、更新和管理關聯
性資料庫的資料庫語言,這種語言是資料庫產
品的實質標準語言。
16
JDBC驅動程式可分為下列四種:
在使用JDBC時,如果要更換JDBC驅動程式,只要重新載入新的
驅動程式即可,不需要修改Java應用程式的內容。
1. JDBC-ODBC Bridge驅動程式:Java應用程式透過橋接的方式將
JDBC轉換成ODBC,然後利用ODBC標準的驅動程式存取資料,
本節的Java應用程式就是使用JDBC-ODBC Bridge驅動程式存取
Access資料庫。
2. Native API/Partly-Java驅動程式:將Java應用程式的JDBC呼叫轉換
成Native API呼叫,然後利用Native API來存取資料。
3. Net Protocol All-Java Client驅動程式:Java應用程式透過中介軟體
(Middleware,通常是TCP/IP網路協定)將JDBC呼叫轉換成資料
庫的API呼叫,然後利用此API來存取資料。
4. Native Protocol All-Java驅動程式:Java應用程式的JDBC呼叫原生
通訊協定(Native Protocol),直接連線到資料庫伺服器,所以不
需要透過橋接或中介軟體,就可以直接存取資料。
17
ODBC:
開 放 式 資 料 庫 連 結 ( Open DataBase
Connectivity,簡稱ODBC)是在微軟的視窗
開放系統架構的結構中,針對視窗應用軟體
所提供的共同語言介面,經由它可以在網路
上對資料庫進行存取。
18
12-1.3
建立ODBC資料來源
建立Access資料庫後,可以利用JDBC-ODBC
驅動程式來存取資料,但是要先在電腦建立
ODBC資料來源。
19
建立ODBC資料來源的操作方法如下:
(請先將範例檔ch12_01_03.mdb複製到硬碟上,
並取消唯讀設定)
20
21
22
23
24
25
26
27
完成後,畫面顯示如下:
完成後,在ODBC資料來源管理員視窗中就會
看到剛才建立的ODBC資料來源,畫面顯示如
下:
28
12-1.4 連結JDBC資料庫並顯示資料
建立好ODBC資料來源後,就可以使用JDBC
API來執行SQL指令,以存取資料庫中的資料。
29
連結JDBC可以分為下面幾個步驟-1:
1. 載入java.sql類別庫:包含存取與處理資料庫
資料的函式。
2. 載 入 驅 動 程 式 : 參 數 中 的 字 串 可 以 載 入
JDBC-ODBC驅動程式。
forName
函
式
必
須
拋
出
ClassNotFoundException例外情況,也可以直
接拋出基礎類別Exception例外。
30
連結JDBC可以分為下面幾個步驟-2:
3. 建 立 Connection 物 件 連 結 資 料 庫 : 利 用
DriverManager類別的getConnection函式可以
建立Java應用程式與資料來源的連結。
資料來源的撰寫方式是jdbc:odbc:資料來源名
稱,資料來源名稱就是12-1.3小節
中設
定的名稱。
31
連結JDBC可以分為下面幾個步驟-3:
4. 建立Statement物件:利用createStatement函式
建立Statement物件。
5. 利用Statement物件執行SQL命令:Statement
物件的工作是建立SQL的查詢與執行(SQL
語法請見12-2說明)。
32
連結JDBC可以分為下面幾個步驟-4:
Statement物件除了提供executeQuery函式執行SQL命令以外,還可
以利用下面的函式執行SQL命令或其他動作:
33
連結JDBC可以分為下面幾個步驟-5:
6. 利用ResultSet物件顯示資料:可以利用while
迴圈逐一顯示資料表中的資料。
34
連結JDBC可以分為下面幾個步驟-6:
ResultSet 物 件 可 利 用 具 有 定 位 功 能 的 游 標
(Cursor)來控制資料表存取位置。
下面是常用的函式說明(Name是欄位名稱,
index是欄位編號):
35
連結JDBC可以分為下面幾個步驟-7:
36
連結JDBC可以分為下面幾個步驟-8:
7. 關閉Statement物件與Connection物件。
37
38
例如下面的程式碼:
39
40
41
上述程式碼分析如下:
1. 第 7~12 行 載 入 JDBC-ODBC 驅 動 程 式 , 並 捕 捉
ClassNotFoundException例外情況。
2. 第13~20行建立Connection與Statement物件,連結到
指定的資料庫,並捕捉SQLException例外情況。
3. 第23行利用executeQuery函式執行參數中的SQL語法。
4. 第26~31行表示當資料表的游標所在位置尚有下一筆
記錄時,就顯示指定欄位編號的欄位值,而且必須
捕捉SQLException例外情況。
5. 第35~41行在finally區塊中關閉Statement與Connection
物件,並捕捉SQLException例外情況。
42
完成後,執行程式的畫面顯示如下:
43
12-1.5
顯示資料表的資訊
上一節在步驟5在執行SQL命令成功後,可以
利 用 ResultSet 物 件 的 getMetaData 函 式 建 立
ResultSetMetaData 物 件 , 然 後 利 用
ResultSetMetaData物件取得資料表的欄位編號、
欄位名稱等資訊。
44
下 面 是 ResultSetMetaData 物 件 常 用 的
函式說明:
45
下面這個範例利用execute函式來執行SQL
命令,並顯示資料表資訊,程式碼如下:
46
47
48
上述利用execute函式來執行SQL命令,
並顯示資料表資訊的程式碼分析如下:
1. 第23行利用execute函式執行SQL命令,並傳回布林
值。
2. 第25~34行判斷當命令執行成功,就在第26行利用
Statement 物 件 取 得 ResultSet 物 件 , 第 27 行 利 用
ResultSet物件取得ResultSetMetaData物件。
3. 第28行利用getTableName函式顯示資料表名稱。
4. 第31行利用getColumnCount函式取得資料表的欄位
個數,然後利用for迴圈顯示第1個到最後1個欄位的
名稱與資料型別。
49
完成後,執行程式的畫面顯示如下:
50
51
52
12-2
12-2.1
12-2.2
12-2.3
12-2.4
12-2.5
SQL語法
SQL的簡介
SELECT查詢資料
INSERT新增資料
DELETE刪除資料
UPDATE修改資料
53
前言:
結構化查詢語言(Structured Query Language,
簡稱SQL)是一種程式語言,透過SQL命令不
僅可以定義資料庫與資料,也可以查詢、刪除
與修改資料表中的資料,它是在處理資料庫資
料之前必須熟識的語言。
54
12-2.1
SQL的簡介
SQL是由IBM公司所開發的程式語言,目前已
經成為標準的關聯式資料庫查詢語言,而支援
SQL語法的有Access、SQL Server、Sybase與
Oracle等資料庫系統,所以同樣的SQL程式可
以應用在不同的資料庫系統上,對於不同電腦
系統上運作的資訊系統,相當方便且具有彈性。
55
一般來說,可以將SQL的指令分為下面
三大類型-1:
1. 資料定義語言(Data Definition Language,簡
稱DDL):定義資料庫的架構,包含資料表
的欄位與資料型別等,主要的命令如下:
ALTER:修改資料庫的架構。
CREATE:建立資料庫物件。
DROP:刪除資料庫物件。
56
一般來說,可以將SQL的指令分為下面
三大類型-2:
2. 資料處理語言(Data Manipulation Language,
簡稱DML):處理資料庫的資料,主要的命
令如下:
SELECT:查詢資料庫的資料。
INSERT:新增資料庫的資料。
DELETE:刪除資料庫的資料。
UPDATE:修改資料庫的資料。
57
一般來說,可以將SQL的指令分為下面
三大類型-3:
3. 資料控制語言(Data Control Language,簡稱
DCL):控制資料庫的安全性與權限管理,
主要的命令如下:
GRANT:授予使用者管理資料庫物件的權限。
REVOKE:取消使用者管理資料庫物件的權
限。
COMMIT:完成某項任務的執行。
ROLLBACK:回覆到執行任務之前的狀態。
58
12-2.2
SELECT查詢資料
SELECT是選擇查詢的條件命令,可以查詢資
料表的欄位資料,其語法如下:
上述第2個語法利用“*”符號來選取所有欄位。
在Java中,可以利用Statement物件的execute與
executeQuery函式來執行SELECT查詢語法。
59
例如下面的程式碼:
60
上述程式碼第19行執行SELECT查詢命令,只選取basictable資料表
的std_name、std_class與address欄位,所以第23行只顯示這3個欄
位。
61
完成後,執行程式的畫面顯示如下:
62
利用AS命令新增或修改欄位名稱:
利用AS命令可以設定新的欄位名稱並指定欄
位值,或更改欄位名稱,其語法如下:
63
下面範例利用AS命令指定該欄位為三次
考試的平均值,其程式碼如下:
下面的程式碼將範例檔ch12_02_02a修改為查詢score
資料表,並新增一個average欄位,然後利用AS命令
指定該欄位為三次考試(exam、mid_ exam和final_
exam)的平均值:
64
完成後,執行程式的畫面顯示如下:
65
利用ORDER BY命令設定資料排序:
使用ORDER BY命令則可以設定資料記錄排列
的次序,排序規則有DESC與ASC兩種,DESC
表示由大到小排序(遞減),而ASC則表示由
小到大排序(遞增),若省略不寫,則預設為
ASC,其語法如下:
66
下面的程式碼將範例檔ch12_02_02b修
改依照平均成績遞減排序:
67
完成後,執行程式的畫面顯示如下:
68
利用WHERE命令選擇資料記錄:
在SELECT查詢命令後面,加上WHERE命令,
可選擇符合條件的資料記錄,其語法如下:
設定條件式時,必須根據資料欄位的型態,例
如:布林、數值、字串、日期時間等,設定運
算元的資料格式。
69
下面依照資料的型別,分別說明可以如
何設定條件式-1:
1. 布林:直接利用運算子=比較是否符合指定的
true或false值,例如將範例檔ch12_02_02a第
19行修改如下,則結果只會顯示男學生的資
料。
70
下面依照資料的型別,分別說明可以如
何設定條件式-2:
2. 數值:可以利用比較運算子來設定條件式。
利用=、<>、>、<、>=、<=運算子,例如將
範例檔ch12_02_02b第19行修改如下,則結果
只會顯示exam成績大於等於90分的資料。
71
下面依照資料的型別,分別說明可以如
何設定條件式-3:
利用BETWEEN…AND…運算子,例如將範例
檔ch12_02_02b第19行修改如下,則結果只會
顯示exam成績介於80與90分的資料。
72
下面依照資料的型別,分別說明可以如
何設定條件式-4:
3. 字串:在SQL查詢命令中表示字串資料時,要在字
串資料的前後加上單引號',例如:'張慧媚'。
利用=運算子直接指定欄位值。
利用IN命令顯示某集合內的資料,將集合資料撰寫在
IN命令後面的括號()中,而括號內的資料與資料之間
必須以,逗點符號隔開,區隔指定的資料。例如將範
例檔ch12_02_02a第19行修改如下,則結果只會顯示
出指定姓名符合“金泰熙”、“銘道”與“古天勒”
的資料。
73
下面依照資料的型別,分別說明可以如
何設定條件式-5:
使用LIKE命令篩選字串資料(在字串前後必
須加上單引號'),非常具有彈性,其應用技巧
整理如下表:
74
下面依照資料的型別,分別說明可以如
何設定條件式-6:
例如將範例檔ch12_02_02a第19行修改如下,
則結果只會顯示出姓名中有包含字串“慧”的
資料。
75
76
77
78
12-2.3
INSERT新增資料
利用INSERT命令可以在資料表中新增欄位資料,其語法如下:
1. 上述語法說明如下:
2. 每個新增的欄位會依照順序,對應到一個欄位值,例如:“欄位1”
對應”欄位值1”、“欄位2”對應”欄位值2”,以此類推。
3. 新增的欄位不一定與資料庫中的欄位數目或順序相同,可以只新
增需要的欄位。
4. VALUES()中的欄位值如果是字串,就必須以一對單引號'括住;如
果是日期/時間,就必須以一對符號“#”括住。
5. 可以利用Statement物件的execute或executeUpdate函式執行語法。
79
80
例如下面的程式碼:
81
82
上述程式碼第19行利用executeUpdate函式執行
INSERT語法,新增一筆資料,然後在第21行
執行查詢命令,以顯示資料表中的資料。
83
完成後,執行程式的畫面顯示如下:
84
12-2.4
DELETE刪除資料
利用DELETE命令可以在資料表中刪除欄位資
料,其語法如下:
85
上述語法說明如下:
1. 如果沒有設定WHERE條件式,就會刪除整個
資料表的資料,例如:
2. 如果設定WHERE條件式,就會刪除指定的資
料,例如:
3. 可 以 利 用 Statement 物 件 的 execute 或
executeUpdate函式執行語法。
86
如要刪除basictable資料表中,班級為“一
年三班”的學生資料,其程式碼如下:
將範例檔ch12_02_03第19行修改如下,刪除
basictable資料表中,班級為“一年三班”的學
生資料。
87
完成後,執行程式的畫面顯示如下:
88
12-2.5
UPDATE修改資料
利用UPDATE命令可以在資料表中修改欄位
資料,其語法如下:
上述語法說明如下:
1. 會修改符合WHERE條件式的記錄,將指定的
欄位修改為新的欄位值。
2. 如果省略輸入WHERE條件式,則會修改所有
資料。
3. 可 以 利 用 Statement 物 件 的 execute 或
executeUpdate函式執行語法。
89
如要 修改basictable資料表中,班級為
“一年三班”的學生資料,其程式碼如下:
將範例檔ch12_02_03第19行修改如下,修改
basictable資料表中,班級為“一年三班”的學
生資料。
90
完成後,執行程式的畫面顯示如下:
91
92
93
94
溫故知新-1:
95
溫故知新-2:
96
自我突破習題-選擇題:
97
自我突破習題-選擇題:
98
自我突破習題-實作題:
99
自我突破習題-實作題:
100