• 沒有找到結果。

遠端資料表一 (T1)

義在於當使用者與伺服器連線時,伺服器可以給定每一個上線的使用 者一個 Session 並設定其中的內容,這些 Session 都是個別獨立的,

伺服器端可以藉此來辨識使用者資訊進而提供個別的服務。

4.2.1.2 秀出資料欄位

在 Java 程式中利用 Connection 類別物件負責維護 Java 資料庫程 式和資料庫之間的連結,連到資料庫後,然後利 PreparedStatement

類別將 SQL 指令傳送給資料庫,再利用 ResultSetMetaData 類別 將近端及遠端的資料庫中資料表的欄位特性取出,最後秀出欄位名稱。

*Statement 類別與 Preparedstatement 類別是分常相似的,但我 們選用了 PreparedStatement 類別是因為此類別會將傳入的 SQL 指令編譯並暫存在記憶體中,如此當某單一 SQL 指令在程式 中會被執行許多次時,使用 PreparedStatement 類別再效率上 有所提昇。

4.2.1.3 選擇來源欄位資料

在秀出遠端與近端的資料表欄位後,舉例如下所示:

遠端資料表一 (T1)

t1 t2 t3 t4 t5 t6 t7 t8 t9

ID 姓名 身分字號 住址 電話 性別 血型 過敏情形 病史

近端資料表 (T2)

a b c d e f NUM 身分字號 NAME 性別 病史 過敏情形

註:遠端資料表示指提供資料查詢的資料庫所包含的資料表,近

端是指查詢資料者

目的:欲取 T1 中的姓名(t2)、身分字號(t3)、性別(t6)、過敏情 形(t8)、病史(t9)。並將查詢取得的資料依序對應至 T2 中 的 c、b、d、f、e 欄位中。

做法:先將 T1 中的 t2、t3、t6、t8、t9,依欄位的位置編號,

第二欄、第三欄、第六欄、第八欄、第九欄依序將這些數 字儲存至一自訂好的資料表中(在此稱 MAPTABLE)。

*管理者輸入的數字需轉換成 byte 資料型態的字串,因為 MySQL 內部資料庫處理的方式是以 byte 的資料型態來進 行,且 MySQL 的 JDBC 驅動程式在收送資料時是以 String 來 傳送,所以必須經過轉換成 byte 型態的字串傳送到 MySQL 資料庫後才能正確的顯示與處理。

4.2.2 使用者端

4.2.2.1 使用者資料的查詢

在 3.2.1.3 中提到依序將欄位數存入一 MAPTABLE 中,接著使用者 就是透過這個 MAPTABLE 來選擇性的讀取遠端資料庫中資料表的欄位資 料。

首先,鍵入欲搜尋的關鍵值 例如:姓名、身分字號等。

於是程式就會先到 MAPTABLE 這個資料表,把裡面的值取出,再連 接到遠端資料庫,找到符合關鍵值的那列資料,在遠端資料表中,利 用指標一一的指向每個欄位,用 GetColumnCount 來計算,若 MAPTABLE 裡的值和 GetColumnCount 傳出的值相同,則將欄位裡的資料傳回至近 端,然後將資料秀出。

4.2.3 程式中使用到的類別

4.2.3.1 DriverManaget 類別

這個類別負責管理 JDBC 驅動程式。再使用 JDBC 驅動程式之前,

需先將 JDBC 驅動程式載入並向 DriverManage 類別註冊後才能使用。

載入和註冊驅動程式可以使用 Class.forName 這個函式來完成。

DriverManage 類別也負責建立 Java 程式和資料庫的連線。

DriverManage 提供的函式如下表:

表 4.1 DriverManage 提供的函式

函 式 說 明

Connection getConnection(

String ur1,String user,String password )

取得資料庫的連線

ur1=” jdbc:<subprotocol>:<subname>

user:連接資料庫的使用者名稱 password:使用者密碼

Driver getDriver(String ur1)

再已經向 DriverManager 註冊的驅動程式 中尋找一個能夠開啟 ur1 所指定的資料庫 驅動程式

4.2.3.2 Connection 類別

Connection 類別物件負責維護 Java 資料庫程式和資料庫之間的 聯結。透過 Connection 類別可以建立出另外三種類別物件。分別是:

「Statement」、「PreparedStatement」、「DatabaseMetaData」類別。

1.Statement 類別:主要功能是將 SQL 指令傳送給資料庫,並將 SQL 指令的執行結果傳回。

表 4.2 Statement 類別提供的函式

函 式 說 明

ResultSet executeQuery(String sql)

使用 SQL 指令 SELECT 對資料庫進行 查詢紀錄作業

Int executeUpdate(String sql) 使用 SQL 指令 INSERT、DELETE 和 UPDATE 對資料庫進行新增、刪除和 修改紀錄

Void close() 結束 Statement 類別物件對資料庫 的連線

2.PreparedStatement 類別:與 Statement 是相似的。

表 4.3 PreparedStatement 類別提供的函式

函 式 說 明

ResultSet executeQuery() 使用 SQL 指令 SELECT 對資料庫進行 查詢紀錄作業

Int executeUpdate() 同 statement

ResultSetMetaData getMetaData 取得 ResultSet 類別物件有關欄 位的相關資訊

3.DatabaseMetaData 類別:不同公司研發的資料庫系統擁有不同 的特性,DatabaseMetaData 類別保存了資料庫的特性,還提供 函式來取得資料庫的特性。

4.3 系統的資料流程圖

資料流圖的符號及符號名稱,利用 Yourdon 符號集。

外部實體 過程 資料流 資料儲存

4.3.1 管理者端

帳號、密碼

輸入資料庫 路徑及資料

表名稱 確認 管理者 登入

秀出遠端及 近端資料表 欄位名稱

欄位數字

MAPTABLE

將數字存入 一資料表 (maptable) 利用 checkbox

勾選欲得之欄 位

路徑及資料表名稱

欄位數字 欄位名稱

圖 4.3 管理者端的資料流程圖

3.3.2 使用者端

輸入帳號密碼

秀出所求 資料

輸入欲查詢的關鍵值

取得getcolumncoun

t 及

與關鍵值香符合的欄位的資料

傳回 MAPTABLE 欄位裡的 資料(是數字)

MAPTABLE 使用者資料庫

遠端資料庫

連接遠端資料庫並同 時取出 MAPTABLE 裡的欄位值與遠端資 料表 getColumnCount

相比對 查詢 確認 使用者 登入

圖 4.4 使用者端的資料流程圖

第五章 未來展望及心得

相關文件