Ch01 JDBC資料庫處理

Download Report

Transcript Ch01 JDBC資料庫處理

Ch10 JDBC資料庫處理
物件導向系統實務
大綱
JDBC的基礎
 使用Access建立資料庫
 資料庫的基本存取
 SQL語言的資料庫查詢
 SQL語言的資料庫操作
 專案實例:圖書資料庫系統

2015/7/21
2
JDBC的基礎-說明

「JDBC」(Java Database Connectivity)是
實作JDBC驅動程式介面(JDBC Driver
Interface)的類別,可以讓Java程式執行SQL
指令存取資料庫系統的記錄資料,例如:微軟
SQL Server、Access和Oracle等。
2015/7/21
3
JDBC的基礎-種類




JDBC-ODBC橋接驅動程式(JDBC-ODBC Bridge):Java程
式可以存取微軟ODBC資料來源的資料庫系統,本章就是以
JDBC驅動程式為例。
原生API的Java驅動程式(A Native-API Partly Java
Driver):將Java程式的JDBC呼叫轉換成專屬資料庫系統
的原生API呼叫。
Java網路協定驅動程式(A Net-protocol All Java
Driver):將Java程式的JDBC呼叫轉換成資料庫系統專屬
的網路協定,再由伺服器轉換成資料庫系統的API呼叫。
Java原生通訊協定驅動程式(A Native-protocol All
Java Driver):將Java程式的JDBC呼叫直接轉換成資料
庫系統原生通訊協定的API呼叫,以便客戶端可以直接連
線資料庫伺服器。
2015/7/21
4
JDBC的基礎-圖例

在本章的Java應用
程式是使用JDBC的
JDBC-ODBC橋接驅
動程式,透過
JDBC-ODBC驅動程
式存取ODBC資料來
源的關聯式資料庫
系統Access,如右
圖所示:
2015/7/21
5
使用Access建立資料庫-說明

Office家族的Access是一套桌上型資料庫系統
,適合個人和中小企業使用,筆者準備使用
Access建立本章Java應用程式使用JDBC連結的
資料庫。
2015/7/21
6
使用Access建立資料庫-欄位說
明

在Books.mdb資料庫擁有資料表Book,各欄位
的說明,如下表所示:
欄位名稱
BookID
BookTitle
BookAuthor
BookPrice
BookPubDate
2015/7/21
資料類型
文字
文字
文字
貨幣
日期/時間
長度
6
30
10
N/A
N/A
7
資料庫的基本存取
新增ODBC系統資料來源
 建立JDBC資料連結
 取得資料表的資訊
 顯示資料表記錄

2015/7/21
8
新增ODBC系統資料來源(1)


先建立一個ACCESS的資料庫
為上述的資料庫在ODBC中註冊一下:
1.
2.
3.
4.
5.

開始
控制台
效能及維護
系統管理工具
資料來源(ODBC)
在ODBC資料來源管理員下:
系統資料來源名稱
2. 新增
2015/7/21
1.
9
新增ODBC系統資料來源(2)

在Windows作業系統建立ODBC系統資料來源,新增
Access資料庫「Books.mdb」名為【book_list】
的ODBC系統資料來源,如下圖所示:
2015/7/21
10
建立JDBC資料連結的四步驟
1.
2.
3.
4.
載入驅動程式
建立Connection連結物件
建立JDBC的Statement物件
執行SQL指令來操作資料庫:查詢、新增、刪
除紀錄等的動作
2015/7/21
11
建立JDBC資料連結
步驟一-載入驅動程式
在Java應用程式首先需要載入驅動程式,因為是
透過ODBC存取資料庫,所以載入JDBC-ODBC驅
動程式,如下所示:
String sDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(sDriver);

上述程式碼的字串sDriver是驅動程式名稱,
接著載入JDBC-ODBC驅動程式。
2015/7/21
12
建立JDBC資料連結步驟二-建立Connection連結物件(1)

在載入JDBC-ODBC驅動程式後,就可以使用
DriverManager類別的getConnection()類別方
法建立Connection物件dbCon,如下所示:
Connection dbCon = null;
String sCon = "jdbc:odbc:book_list";
dbCon = DriverManager.getConnection(sCon);
*此處book_list要代換成前面所提到你為你的資料庫在ODBC
中所註冊的名字
2015/7/21
13
建立JDBC資料連結步驟二-建立Connection連結物件(2)

jdbc:通訊協定的URL字串,其格式如下所示:
jdbc:<subprotocol>:<subname>

subprotocol以此例是odbc,subname是系統資
料來源book_list。DriverManager類別的相關
方法,如下表所示:
方法
說明
Connection getConnection(String) 取得 Connection 物件,第 1 個參數是 URL
Connection getConnection(String, 字串,第 2 和 3 個參數 String 分別為使
String, String)
用者名稱和密碼
2015/7/21
14
建立JDBC資料連結步驟三-建立JDBC的Statement物件


Statement物件的目的是執行SQL指令,在建立
好Connection物件後,就可以使用
createStatement()方法建立Statement物件,
如下所示:
Statement stmt = dbCon.createStatement();
Connection類別的相關方法,如下表所示:
方法
Statement createStatement()
void close()
2015/7/21
說明
建立 Statement 物件
關閉 Connection 物件的資料庫連結資源
15
範例1:測試資料庫的連結(1)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import java.sql.*;
18. //步驟2:建立Connection連結物件
class Ch01_01
19.
Connection dbCon = null;
{
20.
Statement stmt = null;
public static void main(String [] args)
21.
String sCon = "jdbc:odbc:java4_Ch01";
{
22.
try
//步驟1:載入驅動程式
23.
{
String sDriver =
24.
dbCon =
"sun.jdbc.odbc.JdbcOdbcDriver";
DriverManager.getConnection(sCon);
try
25.
if(dbCon != null)
{
26.
System.out.println("建立資料來源連結
成功!");
Class.forName(sDriver);
27.
}
28.
//步驟3:建立JDBC的Statement物件
catch (Exception e)
29.
stmt = dbCon.createStatement();
{
if(stmt != null)
System.out.println("無法載入驅動程式");30.
31.
System.out.println("建立Statement物
return;
件成功!");
}
}
System.out.println("步驟1:驅動程式載入成功32.
!");
2015/7/21
16
範例1:測試資料庫的連結(2)
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
catch(SQLException e)
{
System.out.println("連結錯誤: " +
sCon);
System.out.println(e.getMessage());
if( dbCon != null)
{
try
{
dbCon.close();
}
catch(SQLException e2) {}
}
return;
}
finally
{
try
{
//關閉步驟3所開啟的statement物件
stmt.close();
}
catch(SQLException e) {}
try
{
//關閉步驟2所開啟的資料庫連結
dbCon.close();
}
catch(SQLException e) {}
}
}
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
2015/7/21
}
17
取得資料表的資訊-說明
在建立資料庫連結和Statement物件後,就可
以進一步取得資料表資訊和資料表的記錄資料
。
 如何取得資料表資訊:資料表擁有多少欄位、
各欄位名稱和資料類型,取得資料表資訊的步
驟是繼續步驟三。

2015/7/21
18
步驟四-使用Statement物件執行
SQL指令:取得資料表的資訊(1)

在前面已經說過,建立Statement物件的目的
就是為了執行SQL指令,如下所示:
boolean state = stmt.execute(sSQL);

上述程式碼的execute()方法執行參數的SQL指
令字串sSQL,這個SQL查詢指令字串可以取得
資料表的所有記錄。
2015/7/21
19
步驟四-使用Statement物件執行
SQL指令:取得資料表的資訊(2)

Statement類別的相關方法,如下表所示:
方法
boolean execute(String)
ResultSet
executeQuery(String)
int executeUpdate(String)
ResultSet getResultSet()
void close()
2015/7/21
說明
執行參數的 SQL 指令字串,傳回值 true 表示
取得 ResultSet 物件,可以使用 getResultSet()
方法取得,如果沒有,傳回 false
執行參數的 SQL 查詢指令字串(SELECT 指
,傳回值是 ResultSet 物件
令)
執行參數的 SQL 操作指令字串(INSERT、
,傳回值是影響
DELETE 和 UPDATE 指令)
的記錄數
取得目前的 ResultSet 物件
關閉 Statement 物件
20
取得ResultSet和
ResultSetMetaData物件

在使用Statement物件執行SQL指令後,接著使用
getResultSet()方法取得ResultSet物件,如下所
示:
ResultSet rs = stmt.getResultSet();

程式碼在取得ResultSet物件後,使用
getMetaData()方法取得ResultSetMetaData物件
,如下所示:
ResultSetMetaData md = rs.getMetaData();
2015/7/21
21
取得ResultSet和
ResultSetMetaData物件

ResultSetMetaData類別的相關方法,如下表
所示:
方法
int getColumnCount()
int getColumnDisplaySize(int)
String getColumnLabel(int)
String
getColumnTypeName(int)
2015/7/21
說明
取得資料表共有多少欄位
取得資料表欄位的尺寸,參數是欄位編
號,從 1 開始
取得資料表欄位名稱,參數是欄位編號
取得資料表欄位的資料類型,參數是欄位
編號
22
顯示資料表記錄-說明

在這一節筆者準備執行SQL查詢指令取得資料
表的記錄資料,步驟是繼續第15-3-2節的步驟
三。
2015/7/21
23
顯示資料表記錄-步驟四
步驟四:使用Statement物件執行SQL指令
 在Java程式執行SQL查詢指令可以取得查詢結果的
ResultSet物件,不同於第15-3-3節,在這一節是
直接使用executeQuery()方法取得ResultSet物件
,如下所示:
ResultSet rs = stmt.executeQuery(sSQL);
 程式碼取得參數SQL指令sSQL查詢結果的
ResultSet物件,參數的SQL查詢指令可以取得資
料表Book的所有記錄。
2015/7/21
24
顯示資料表記錄-步驟五
步驟五:使用迴圈取得ResultSet物件的記錄
 在取得查詢結果的ResultSet物件後,可以使用
while迴圈配合next()方法顯示記錄,如下所示:
while ( rs.next() )
{ int num; // 欄位編號
num = rs.findColumn("BookID");
System.out.print(num + ": ");
System.out.print(rs.getString("BookID"));
………
}
2015/7/21
25
顯示資料表記錄-步驟六
步驟六:關閉連結的Connection和Statement物
件
 在處理完資料庫的查詢或操作後,Java程式需
要關閉Connection和Statement物件,使用的
都是close()方法,如下所示:
try {
catch
try {
catch
2015/7/21
stmt.close(); }
( SQLException e ) {}
dbCon.close(); }
( SQLException e ) {}
26
SQL語言的資料庫查詢
SQL語言的基礎
 SQL指令查詢的程式範例
 GUI介面的SQL查詢程式

2015/7/21
27
SQL語言的資料庫查詢-說明

Java應用程式搭配資料庫的目的,主要是為了
更有效率且快速的查詢記錄資料,SQL語言是
一種資料庫查詢語言,在Java程式是使用
Statement物件來執行SQL指令來進行資料庫的
查詢。
2015/7/21
28
SQL語言的資料庫查詢-類別
方法

在Ch15_4類別提供3個類別方法,可以分別開
啟資料庫連結、執行SQL查詢和關閉資料庫連
結,如下表所示:
方法
Ch15_4.openODBC(Str1,Str2,Str3)
Ch15_4.closeODBC()
String Ch15_4.queryTable(String)
2015/7/21
說明
開啟 JDBC-ODBC 資料庫連結,參數
依序為系統資料來源 DSN 字串、使用
者名稱和密碼
關閉資料庫連結
執行參數的 SQL 查詢字串,在取得資
料表資訊後,依序取得每筆記錄的欄
位名稱和欄位值,傳回查詢結果的字
串
29
SQL語言的資料庫查詢-類別
變數

在Ch15_4類別提供2個類別變數參考
Connection和Statement物件,如下表所示:
類別變數
Ch15_4. dbCon
Ch15_4.stmt
2015/7/21
說明
開啟 JDBC-ODBC 資料連結建立的 Connection 物件
使用 createStatement()方法建立的 Statement 物件
30
SQL語言的基礎-什麼是SQL語言


「SQL」(Structured Query Language)為「
ANSI」(American National Standards
Institute)標準的資料庫語言,SQL指令語法可
以用來查詢、新增、刪除和更新資料庫的記錄,
目前Access、SQL Server、DB2、MySQL、MySQL
MaxDB、Oracle和Sybase等資料庫管理系統都以
ANSI的SQL語言作為標準的資料庫語言。
早在1970年,E. F. Codd建立關聯性資料庫的觀
念,同時提出構想的資料庫語言,這是一種完整
和通用的資料存取方式,雖然在當時並沒有真正
建立語法,但這就是SQL的源起。
2015/7/21
31
SQL語言的基礎-分類

SQL語言的指令可以分為三大部分,如下表
所示:
資料定義語言(Data Definition Language,
DLL):建立資料表、索引和視界(Views)等
,並且定義資料表的欄位。
 資料操作語言(Data Manipulation Language
,DML):屬於資料表記錄查詢、插入、刪除和
更新指令。
 資料控制語言(Data Control Language,DCL
):屬於資料庫安全設定和權限管理的相關指
令。

2015/7/21
32
SQL語言的基礎-SELECT指令說
明
SQL查詢指令 - SELECT
 Java程式在使用JDBC連結資料庫後,可以使用SQL
指令進行資料庫查詢,SQL的資料查詢指令只有一
個SELECT指令,完整指令語法如下所示:
SELECT 欄位1, 欄位2 FROM 資料表 WHERE
conditions
 上述SELECT指令的欄位1~2為記錄的欄位,
conditions是查詢條件,指令使用口語來說是「
從資料表取回符合WHERE子句條件的記錄,顯示欄
位1和2」。
2015/7/21
33
SQL語言的基礎-指令1
“*”記錄欄位
 在上述SQL語法的欄位1~2是取回的資料表
欄位,我們可以使用”*”符號代表所有欄
位,表示取回資料表記錄的所有欄位,如
下所示:
SELECT * FROM Book

上述指令沒有WHERE子句,所以將資料表內
所有的記錄和欄位取回。
2015/7/21
34
SQL語言的基礎-指令2
單一查詢條件的WHERE子句
 SQL查詢指令的單一條件,WHERE子句的基
本規則和範例,如下所示:
文字欄位要加上單引號,例如:書號P611,如
下所示:
SELECT * FROM Book WHERE BookID=’P611’
 數值欄位並不需要額外的字元括起,例如:書
價大於560元,如下所示:
SELECT * FROM Book WHERE BookPrice > 560

2015/7/21
35
SQL語言的基礎-指令3
文字的欄位可以使用【LIKE】包含運算子配合
”%”萬用字元,此時查詢的條件子句只需包含
的子字串就符合條件,例如:書號內包含有
“7”的子字串,如下所示:
SELECT * FROM Book WHERE BookID LIKE
‘%7%’
 數值或日期欄位可以使用<>、>、<、>=和<=不
等於、大於、小於、大於等於和小於等於等運
算子建立多樣化的查詢條件。

2015/7/21
36
SQL語言的基礎-指令4
多重查詢條件的WHERE子句
 WHERE子句的查詢條件可以使用AND和OR邏輯運算
子連接,其基本語法,如下所示:
AND且運算子:連接的前後條件都必須成立,整個條件
才成立,例如:書號包含“7”且書名有“網頁”的子
字串,如下所示:
SELECT * FROM Book WHERE BookID LIKE ‘%7%’ AND
BookTitle LIKE ‘%網頁%’
 OR或運算子:連接的前後條件只需任何一個成立即可
,例如:書號包含“5”或書名有“程式”的子字串,
如下所示:
SELECT * FROM Book WHERE BookID LIKE ‘%5%’ OR
2015/7/21 BookTitle LIKE ‘%程式%’
37

SQL語言的基礎-指令5
排序輸出
 SQL的查詢結果可以指定欄位進行由小到大,或由
大到小排序,只需在SELECT指令的最後加上ORDER
BY子句即可,如下所示:
SELECT * FROM Book WHERE BookPrice>=500 ORDER
BY BookPrice
 上述查詢結果使用BookPrice欄位排序,預設是由
小到大的ASC,如果想倒過來由大到小,只需加上
DESC,如下所示:
SELECT * FROM Book WHERE BookPrice>=500 ORDER
BY BookPrice DESC
2015/7/21
38
SQL指令查詢的程式範例

為了方便讀者測試第15-4-1節的SQL查詢指令
,筆者準備建立命令列和第15-4-3節GUI介面
的2種資料庫查詢程式,只需輸入SQL指令敘述
,就可以看到查詢結果。
2015/7/21
39
GUI介面的SQL查詢程式

GUI介面查詢程式,只需在文字方塊欄位輸入
SQL指令,按【查詢】鈕,可以在下方的文字
區域顯示查詢到的每一筆記錄資料。
2015/7/21
40
SQL語言的資料庫操作
插入記錄
 更新記錄
 刪除記錄

2015/7/21
41
SQL語言的資料庫操作
Java程式一樣可以使用JDBC執行SQL資料表操
作指令來維護或更新資料表的記錄資料,這就
是資料表插入、刪除和更新記錄的SQL指令:
INSERT、DELETE和UPDATE。
 在這一節的程式範例也是使用Ch15_4類別的方
法和變數,以便減少Java程式碼的長度。

2015/7/21
42
插入記錄-說明
SQL語言插入記錄指令INSERT可以新增一筆
記錄到資料表,INSERT指令的語法格式,
如下所示:
INSERT INTO table
(column1,column2,…..) VALUES
('value1', 'value2 ', …)
 table為準備插入記錄的資料表名稱,
column1~n為資料表的欄位名稱清單,只需
列出使用到的欄位,value1~n是對應的欄
位值。

2015/7/21
43
插入記錄-注意事項
不論欄位或值的清單,都需要使用逗號分
隔。
 INSERT指令VALUES的值,數值不用單引號
包圍,字元需要單引號包圍,日期時間需
要”#”符號。
 INSERT指令的欄位名稱清單,並不需要和
資料表定義的欄位數目或順序相同,只需
選擇需要新增資料的欄位,但是括號內的
欄位名稱順序需和VALUES值的順序相同。

2015/7/21
44
插入記錄-範例
例如:在資料表Book插入一筆圖書記錄的SQL指令
,如下所示:
INSERT INTO Book
(BookID,BookTitle,BookAuthor,
BookPrice,BookPubDate)
VALUES ('L333','PHP網頁設計範例教本','陳會安
',
560.0,#06/06/2003#)
 在Java程式只需使用Statement物件的
executeUpdate()方法執行SQL指令就可以插入一
筆圖書記錄,如下所示:
2015/7/21
45
Ch15_4.stmt.executeUpdate(strSQL);

更新記錄-說明
SQL語言更新記錄指令UPDATE是將資料表內符合條
件的記錄,都更新成指定的欄位值,UPDAT E指令
的語法格式,如下所示:
UPDATE table SET column1 = ‘value1’ WHERE
conditions
 table是資料表,SET子句column1是資料表的欄位
名稱,這是需要更新的欄位,value1是更新的欄
位值,如果更新欄位不只一個,請使用逗號分隔
,其語法格式,如下所示:
UPDATE table SET column1 = 'value1' , column2
= 'value2' WHERE conditions

2015/7/21
46
更新記錄-注意事項
WHERE子句是必要元素,如果沒有WHERE子句,
資料表內所有記錄欄位都會被更新。
 更新欄位值是數值不用單引號包圍,字元需要
使用單引號包圍,日期時間為”#”符號。

2015/7/21
47
更新記錄-範例

例如:在資料表Book更改記錄圖書資料的SQL
指令,如下所示:
UPDATE Book SET BookPrice=580.0,
BookPubDate=#8/8/2003#
WHERE BookID='L333'

上述SQL指令的WHERE條件為圖書書號BookID欄
位,使用SET子句更新欄位資料。
2015/7/21
48
刪除記錄-說明

SQL語言刪除記錄指令DELETE是將資料表內符
合條件的記錄通通刪除掉。DELETE指令的語法
格式,如下所示:
DELETE FROM table WHERE conditions

table是資料表,WHERE子句conditions為刪除
記錄的條件,口語來說是「將符合conditions
條件的記錄刪除掉」。
2015/7/21
49
刪除記錄-注意事項與範例

DELETE指令的注意事項,如下所示:


WHERE子句是DELETE指令的必要元素,如果沒有
WHERE子句,資料表內的所有記錄都會被刪除。
例如:在資料表Book刪除一筆圖書記錄的SQL
指令,如下所示:
DELETE FROM Book WHERE BookID='L333'
2015/7/21
50
專案實例:圖書資料管理系統
圖書資料管理系統的架構
 圖書資料管理系統的編譯與執行
 Java程式說明

2015/7/21
51
圖書資料管理系統的架構-說明
圖書資料管理系統使用本章Access資料庫
Books.mdb,其使用介面是第11章JInternetFrame
類別的多重視窗和第10章JOptionPane類別的訊息
對話方塊。
 在圖書資料管理系統使用功能表列的指令執行資
料庫操作和搜尋,使用者並不需要下達完整的SQL
指令,就可以新增、更新、刪除和以書號查詢圖
書記錄,搜尋記錄功能可以讓使用者輸入完整的
SQL查詢指令,其中每一種功能都擁有獨立的內層
視窗,使用者可以同時開啟多個視窗執行不同的
圖書資料查詢。
2015/7/21
52

圖書資料管理系統的架構-Java
程式說明
Java 程式
Books.java
JDBC.java
AddRecord.java
DeleteRecord.java
SQLQuery.java
IdQuery.java
2015/7/21
說明
圖書資料管理系統的主程式,這是 JFrame 的
Swing 應用程式,擁有功能表列和各種功能指
令,處理各功能內層視窗的建立
類似 Ch15_4.java 的 JDBC 相關類別方法
JInternalFrame 內層視窗類別,用來新增圖書資
料
JInternalFrame 內層視窗類別,只需輸入書號就
可以刪除圖書資料
JInternalFrame 內層視窗類別,可以執行 SQL 查
詢指令
JInternalFrame 內層視窗類別,可以使用書號查
詢圖書資料
53
圖書資料管理系統的編譯與執
行
2015/7/21
54
Java程式說明-Books.java
Books.java
 Books.java程式是修改自Ch11_5.java的多
重視窗應用程式,直接擴充
createMenuBar()方法的功能表列,新增功
能表指令來開啟不同JInternalFrame類別
的內層視窗。
 在其中的createInternalFrame()方法可以
建立內層視窗,資料庫操作的addFrame和
deleteFrame視窗物件都只能建立一次。
2015/7/21
55
Java程式說明-Books.java
使用if條件檢查內層視窗是否已經建立,如下所
示:
if (addFrame == null)
{ // 第一次建立
addFrame = new AddRecord();
jdesktop.add(addFrame);
}
else if (addFrame.isClosed())
{ // 內層視窗被關閉
addFrame = new AddRecord();
jdesktop.add(addFrame);
2015/7/21}
56

Java程式說明-Books.java

如果內層視窗已經建立,因為使用者可能縮小
視窗成為圖示,所以使用isIcon()方法檢查是
否為圖示顯示,setIcon(false)方法將它設成
不是圖示顯示,如下所示:
if (iframe.isIcon())
iframe.setIcon(false);
2015/7/21
57
Java程式說明-JDBC.java
JDBC.java
 JDBC.java就是Ch15_4.java,只是更改類別名
稱,內含JDBC驅動程式的載入、建立和關閉
ODBC資料庫連結的方法。
2015/7/21
58
Java程式說明AddRecord.java
AddRecord.java
 AddRecord.java是繼承JInternalFrame類別的
內層視窗類別,在建立好輸入欄位資料的
JTextField元件後,直接使用Ch15_5_1.java
的SQL指令來新增記錄。
2015/7/21
59
Java程式說明AddRecord.java

按鈕的事件處理方法actionPerformed()在
新增記錄前會查詢書號,以確認書號是否
已經存在,如下所示:
String code = id.getText();
String strSQL = "SELECT * FROM Book WHERE
BookID='" + code + "'";
rs = JDBC.stmt.executeQuery(strSQL);
int count = 0;
while ( rs.next() ) // 是否有此記錄
count++;
2015/7/21
60
Java程式說明AddRecord.java

新增記錄的出版日期就是今天,這是使用
System類別的currentTimeMillis()方法取得
的Date日期物件,如下所示:
Date pubDate = new
Date(System.currentTimeMillis());
2015/7/21
61
Java程式說明DeleteRecord.java
DeleteRecord.java
 DeleteRecord.java是繼承JInternalFrame類
別的內層視窗類別,在建立好輸入書號欄位資
料的JTextField元件後,使用Ch15_5_3.java
的SQL指令刪除記錄,在刪除記錄前會查詢書
號,以確認刪除書號存在。
2015/7/21
62
Java程式說明-SQLQuery.java
SQLQuery.java
 SQLQuery.java就是第15-4-3節的
Ch15_4_3.java,只是改成繼承
JInternalFrame類別的內層視窗類別。
2015/7/21
63
Java程式說明-IdQuery.java
IdQuery.java
 idQuery.java和SQLQuery.java相似,只是SQL
指令改成書號的萬用字元條件,如下所示:
String strSQL;
strSQL="SELECT * FROM Book WHERE BookID LIKE
'%"+code+"%'";
2015/7/21
64
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import java.sql.*;
class Ch01_02
{
public static void main(String [] args)
{
//步驟1:載入驅動程式
String sDriver =
"sun.jdbc.odbc.JdbcOdbcDriver";
try
{
Class.forName(sDriver);
}
catch (Exception e)
{
System.out.println("無法載入驅動程式");
return;
}
System.out.println("步驟1:驅動程式載入成功!");
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
2015/7/21
//步驟2:建立Connection連結物件
Connection dbCon = null;
Statement stmt = null;
String sCon = "jdbc:odbc:Ch10Book";
try
{
dbCon =
DriverManager.getConnection(sCon);
if(dbCon != null)
System.out.println("建立資料來源連結成
功!");
//步驟3:建立JDBC的Statement物件
stmt = dbCon.createStatement();
if(stmt != null)
System.out.println("建立Statement物件
成功!");
//步驟4: 使用Statement物件執行SQL指令
String sSQL = "SELECT * "
+ "FROM Book";
ResultSet rs = stmt.executeQuery(sSQL);
65
36.
37.
38.
39.
//步驟五:使用迴圈取得ResultSet物件的記錄
while (rs.next())
{ System.out.println(rs.getString("BID") +
" " + rs.getString("BName") + " " +
rs.getInt("BPrice"));
}
56.
57.
58.
59.
60.
61.
62.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
}
catch(SQLException e)
{
System.out.println("連結錯誤: " + sCon);
System.out.println(e.getMessage());
if( dbCon != null)
{
try
{
dbCon.close();
}
catch(SQLException e2) {}
}
return;
}
2015/7/21
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
finally
{
try
{
//關閉步驟3所開啟的statement物件
stmt.close();
}
catch(SQLException e) {}
try
{
//關閉步驟2所開啟的資料庫連結
dbCon.close();
}
catch(SQLException e) {}
}
}
}
66