• 沒有找到結果。

4-1 JSP 網頁與資料庫

我們想要在 www 上做一樁成功的買賣,除了我們必須告訴買方,

我們在賣些什麼之外,還必須能夠知道買方是誰,想要買什麼。運用 靜態網頁僅能將我們想賣的東西告訴買方,卻無法得到買方的資料。

所以我們必須找出如何從客戶端取得買方的資料、與欲訂購之產品明 細。我們可以用檔案儲存簡單的資料、像是訪客人數、訪客留言…之 類的資料還可以儲存。若想儲存訂單資料、顯然沒有多大的用處,因 為如果每一筆訂單都儲存成一個檔案,那有一天如果有幾百來筆的交 易,那網站上不就會有幾百個文字檔、這樣實在是太累了。所以我們 要把資料存在資料庫裡面,不論在儲存上、應用上與維護上絕對比起 存在檔案理的來的方便優秀的多。

JDBC

我們在 JSP 網頁中,我們要用 JDBC(Java Database Connectivity)。

JDBC 是一組 API(Application Programming Interface 應用程式介 面),這組 API 可以協助我們,處理資料庫與資料庫間的連結動作。

由於 JDBC 是以 Java 撰寫,亦所以具備了 Java 跨平台的特性。因此,

我們利用 JSP 與 JDBC 開發 Web 應用程式,具備良好的可攜性 (Portability)。

JDBC 共有四種類型,分別為 TYPE1、TYPE2、TYPE3、TYPE4。

TYPE1 與 TYPE2 需要安裝驅動程式至使用者電腦,TYPE1 把 JDBC API 轉成 ODBC 的呼叫方法,TYPE2 轉換成資料庫的原生碼。TYPE3

與 TYPE4 不需安裝任何驅動程式至使用者電腦,TYPE3 則透過中繼軟 體(middleware)進行資料存取,TYPE4 則完全由 Java 撰寫之驅動程 式與資料庫溝通。

TYPE1:JDBC-ODBC 橋接器(JDBC-ODBC bridge):

這類型的驅動程式是 JDK 內建的 package,這種類型的 JDBC 並沒有 直接和資料庫溝通,是透過安裝好的 ODBC 驅動程式,再透過

JDBC-ODBC 橋接器的轉換,由於 ODBC 本身可以跟任何的資料庫溝 通。利用轉換的方式就可以達到 Java 聯結後端資料庫的目的。這類 型的資料庫執行效能比較差(因為有透過轉換)。

TYPE2 :原生 API 驅動程式(Native-API Driver):

與第一類型相似,但是不需透過 ODBC 即可聯結資料庫,而是透過 Java Native Interface 的技術,呼叫資料庫本身所提供的 API 來存 取資料庫,在轉換成資料庫指定原生碼,此類由資料庫廠商提供的

API 函數,大多由 C/C++寫成,一般來說,執行效率較高。

TYPE3:網路協定與中介軟體驅動程式(JDBC-Net pure Java Driver):

此類型的驅動程式使用網路協定(protocol),Client 端與資料庫之 間使用中介軟體 (Middleware),JDBC 對資料庫的請求與回覆皆透過 中繼伺服器(MiddServer)來處理,這類型的驅動程式用 Java 寫成,

可攜性最高,故具跨平台的功能。

TYPE4:原生協定及純 Java 驅動程式(Native-protocol pure Java Driver):

此類型的驅動程式使用與資料庫相同的協定(protocol),它直接透過 網路協定,將資料送出至資料庫處理或從資料庫取回資料,可以直接 與資料庫溝通,因此此類型驅動程式具跨平台的功能。

4-2 簡介 Access 資料庫的操作

這次研究所使用的資料庫為 Microsoft Office 中的 Access,

Access 為供給個人與小型企業使用的資料庫應用軟體,該軟體裡面 有資料表該軟體裡面有資料表、查詢、表單….等物件。下圖為用於 儲存留言版資料之內容。

圖4-1 儲存留言版之資料表

在 JSP 網頁開始運用 Access 資料庫儲存資料表之前,必須完成資料 庫與資料表的建立。

建立一個資料庫

啟動 Access,進入 Microsoft Access,在新增檔案裡面點選空白資 料庫選項。

圖 4-2 Microsoft Access

資料表的建立

資料表是 Access 中儲存資料的物件,將在資料儲存進資料表前,

必須先完成資料表的建立。所謂的建立資料表,就是設定資料表中 有哪些欄位,以及這些欄位所欲儲存的資料型態是哪一種。這些設 定的進行完成於資料表的設計檢視畫面中,下圖為資料表的設計檢視 畫面。

圖 4-3 設計檢視畫面

欄位的新增與操作

新增一欄位時,第一步是在欄位名稱攔中,設定儲存資料之欄位名 稱。第二步則在資料類型欄中,選取該欄位所欲儲存資料的類型。而 敘述欄僅用於輸入說明該欄位用途的文字。

圖 4-4 新增欄位

完成了欄位名稱與所儲存資料類型設定後,第三步則要進行各欄位屬 性的設定。各欄位的屬性設定將隨資料型態的不同而不同。

文字

單純的文字資料,可用於儲存地址、電話號碼…這一類不需要進行計 算的資料。一個文字欄位最多可儲存 255 個字元。下圖為文字資料類 型欄位的屬性設定。

圖 4-5 文字資料

數字

可以用來進行數學運算數值資料,但若為貨幣資料時,則需要使用貨 幣類型。在 Access 中,型態為數字的欄位,可以儲存之數值類型如 下表。

類型 可儲存數值的範圍 小數點位

儲存空間

位元組 0~255 1 位元組

整數 -32768~32768 2 位元組

常整數 -2147483648~2147483648 4 位元組

小數點 (浮點數)

儲存數字範圍。當為負值時 -1.79769E308 至-4.94065E-324,

當為正值時,1.79769E308 至 4.94065

15 8 位元組

單精準數 儲存數字範圍。當為負值時

-3.40282E38 至-1.40129E-45 當為 正值時 1.40129E-45 至 3.40282

7 4 位元組

雙精準數 儲存數字範圍由

− 10

28-1 至

10

28-1 28 12 位元組

複製編號 全域唯一識別子 不適用 16 位元組

表 4-1 Access 中數字可儲存之數值類型表

下圖為數字資料類型欄位的屬性設定畫面。

圖 4-6 數字資料類型欄位的屬性

4-3 資料庫連結的建立

建立 ODBC 資料來源,本次研究裡用 TYPE1 類型的 JDBC 驅動程 式,操作 Access 資料庫。因此我們在利用資料庫前,必須在伺服端 的電腦上,完成 ODBC 資料來源的建立。首先我們先進入控制台的系 統管理工具點選資料來源(ODBC)選項。

圖 4-7 建立 JDBC-ODBC 來源(1)

然後到系統資料來源裡面新增一各 Microsoft Access Driver(*.mdb)

圖 4-8 建立 JDBC-ODBC 來源(2)

利用選取資料庫的對話盒,選取提供資料的 Access 資料庫

圖 4-9 建立 JDBC-ODBC 來源(3)

當我們完成了資料來源的建立,我們就可以在 JSP 網頁中,連結此資 料來源。

此外,進行資料庫連結時,需使用 java.sql 套件中的類別。在正式 聯結資料庫時,首先必須利用 Class.forName 方法載入驅動程式類 別。

Class.forName(“sun.jdbc.odbc.jdbcOdbcDriver”) 當驅動程式載入記憶體之後,將會自動利用驅動程式管理員

-java.sql.DriverManager 類別,註冊載入的驅動程式,使其狀態為 可使用(available)。然後再利用 DriverManager 類別開啟資料庫的 連結,其語法如下:

Connection Connection 物件變數 = DriverManger.getConnection (“jdbc:odbc:ODBC 資料來源名稱”,”使用者帳號”,”密碼”)

4-4 從資料庫取得資料

當我們透過資料庫連結,執行 SQL 敘述進行資料查詢時,回傳 的查詢結果為紀錄集。運用紀錄即取得回傳的紀錄時,就像是一各虛 擬的資料工作表。我們用到紀錄指標(Cursor)的觀念來取得資料。紀 錄集雖然是由一組紀錄所組成,但是我們只能一次存取一筆紀錄。而 這筆紀錄就是紀錄指標所指向的紀錄,該筆紀錄稱之為目前紀錄 (Current Record)。我們在 JSP 程式中,便透過這各指標,指定紀錄 集中欲操作的紀錄。

Index Name Category E-mail

1 黃永仁 同學 kaber@chu.edu.tw 2 嚴凱軍 同學 kjyan@chu.edu.tw 3 朱清文 同學 xyz @chu.edu.tw

在 JDBC 中,用於操作紀錄集的物件為 ResultSet,當執行 SQL 敘述 查詢資料庫時,便會傳回此物件。

在查詢動作之前,我們必須在程式中,呼叫 Connection 物件的 createStatement 方法,建立 Statement 物件,以代表 SQL 敘述,其 語法如下:

紀錄指標

Statement Statement 物件變數 =

Connection 物件變數.createStatement()

當我們建立好 Statement 物件後,我們將開始執行查詢動作,並將結 果以 ResultSet 物件傳回,其語法如下:

ResultSet ResultSet 物件變數 =

Statement 物件變數.executeQuery(String SQL 敘述)

欲從 ResultSet 物件中,取得紀錄指標目前指向紀錄各欄位的資料 時,可以依照欄位中的資料型態呼叫 getxxx 方法,其語法如下:

ResultSet 物件變數.getxxx(“欄位名稱”)

下表為從欄位中,取得各種不同資料的 getxxx 方法。

方法 說明

getBoolean 從欄位中取得型態為布林值的資料

getByte 從欄位中取得型態為 Byte 的資料

getBytes 從欄位中取得型態為 Bytes 的資料

getDate 從欄位中取得日期資料,並回傳為 Date 物件

getDouble 從欄位中取得型態為 Double 的資料 getFloat 從欄位中取得型態為 Floate 的資料

getInt 從欄位中取得型態為 Int 的資料

getLong 從欄位中取得型態為 Long 的資料

getTime 從欄位中取得日期資料,並回傳為 Time 物件

表 4-2 ResultSet 物件中取得不同資料之方法

欲取得 ResultSet 物件開啟紀錄集中的欄位數時,必須呼叫

ResultSet 的 getMetaData 方法,取得 ResultSetMetaData 物件,然 後呼叫 getColumnCount 方法,

取得紀錄集中的欄位數目,其語法如下:

ResultSetMetaData ResultSetMetaData 物件 = rs.getMetaData();

取得 ResultSetMetaData 物件之後

int ColNum = ResultSetMetaData 物件.getColumnCount();

就可以取得欄位數目了

欲取得資料集中某欄位名稱的語法如下:

ResultSetMetaData 物件變數.getColumnName(欄位索引值)

相關文件