1 / 60

第 16 章 JDBC 資料庫處理

第 16 章 JDBC 資料庫處理. 16-1 JDBC的基礎 16-2 使用Access建立資料庫 16-3 資料庫的基本存取 16-4 資料庫查詢 16-5 插入、更新與刪除記錄 16-6 專案實例:圖書資料庫系統. 16-1 JDBC 的基礎 - 說明. 「 JDBC 」( Java Database Connectivity )是實作 JDBC 驅動程式介面( JDBC Driver Interface )的類別,可以讓 Java 程式執行 SQL 指令存取資料庫系統的記錄資料。

justin
Download Presentation

第 16 章 JDBC 資料庫處理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第16章 JDBC資料庫處理 • 16-1 JDBC的基礎 • 16-2 使用Access建立資料庫 • 16-3 資料庫的基本存取 • 16-4 資料庫查詢 • 16-5 插入、更新與刪除記錄 • 16-6 專案實例:圖書資料庫系統

  2. 16-1 JDBC的基礎-說明 • 「JDBC」(Java Database Connectivity)是實作JDBC驅動程式介面(JDBC Driver Interface)的類別,可以讓Java程式執行SQL指令存取資料庫系統的記錄資料。 • 例如:微軟SQL Server、Access、MySQL和Oracle等。

  3. 16-1 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呼叫,以便客戶端可以直接連線資料庫伺服器。

  4. 16-1 JDBC的基礎-圖例 • 在本章的Java應用程式是使用JDBC的JDBC-ODBC橋接驅動程式,透過JDBC-ODBC驅動程式存取ODBC資料來源的關聯式資料庫系統Access,如右圖所示:

  5. 16-2 使用Access建立資料庫-說明 • Office家族的Access是一套桌上型資料庫系統,適合個人和中小企業使用,筆者準備使用Access建立本章Java應用程式使用JDBC連接的資料庫。

  6. 16-2 使用Access建立資料庫-欄位說明 • 在Books.mdb資料庫擁有資料表Book,各欄位的說明,如下表所示:

  7. 16-3 資料庫的基本存取 • 16-3-1 新增ODBC系統資料來源 • 16-3-2 建立JDBC資料連接 • 16-3-3 取得資料表的資訊 • 16-3-4 顯示資料表記錄

  8. 16-3-1 新增ODBC系統資料來源 • 在Windows作業系統建立ODBC系統資料來源,筆者準備在Windows XP作業系統的電腦新增Access資料庫「Books.mdb」名為【book_list】的ODBC系統資料來源,如下圖所示:

  9. 16-3-2 建立JDBC資料連接-步驟一 步驟一:載入驅動程式 • 在Java應用程式首先需要載入驅動程式,因為是透過ODBC存取資料庫,所以載入JDBC-ODBC驅動程式,如下所示: String sDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; Class.forName(sDriver); • 上述程式碼的字串sDriver是驅動程式名稱,接著載入JDBC-ODBC驅動程式。

  10. 16-3-2 建立JDBC資料連接-步驟二(說明) 步驟二:建立Connection連接物件 • 在載入JDBC-ODBC驅動程式後,就可以使用DriverManager類別的getConnection()類別方法建立Connection物件dbCon,如下所示: String sCon = "jdbc:odbc:book_list"; dbCon = DriverManager.getConnection(sCon);

  11. 16-3-2 建立JDBC資料連結-步驟二(通訊協定) • jdbc:通訊協定的URL字串,其格式如下所示: jdbc:<subprotocol>:<subname> • subprotocol以此例是odbc,subname是系統資料來源book_list。DriverManager類別的相關方法,如下表所示:

  12. 16-3-2 建立JDBC資料連接-步驟三 步驟三:建立JDBC的Statement物件 • Statement物件的目的是執行SQL指令,在建立好Connection物件後,就可以使用createStatement()方法建立Statement物件,如下所示: Statement stmt = dbCon.createStatement(); • Connection類別相關方法,如下表所示:

  13. 16-3-3 取得資料表的資訊-說明 • 在建立資料庫連接和Statement物件後,就可以進一步取得資料表資訊和資料表的記錄資料。 • 在這一節先說明如何取得資料表資訊,也就是資料表擁有多少欄位、各欄位名稱和資料類型,下一節將說明如何執行SQL指令取得資料表的記錄資料。取得資料表資訊的步驟是繼續第16-3-2節的步驟三。

  14. 16-3-3 取得資料表的資訊-步驟四(說明) 步驟四:使用Statement物件執行SQL指令 • 在前面已經說過,建立Statement物件的目的就是為了執行SQL指令,如下所示: boolean state = stmt.execute(sSQL); • 上述程式碼的execute()方法執行參數的SQL指令字串sSQL,這個SQL查詢指令字串可以取得資料表Book的所有記錄。

  15. 16-3-3 取得資料表的資訊-步驟四(方法) • Statement類別的相關方法,如下表所示:

  16. 16-3-3 取得資料表的資訊-步驟五(說明) 步驟五:取得ResultSet和ResultSetMetaData物件 • 在使用Statement物件執行SQL指令後,接著使用getResultSet()方法取得ResultSet物件,如下所示: ResultSet rs = stmt.getResultSet(); • 程式碼在取得ResultSet物件後,使用getMetaData()方法取得ResultSetMetaData物件,如下所示: ResultSetMetaData md = rs.getMetaData();

  17. 16-3-3 取得資料表的資訊-步驟五(方法) • ResultSetMetaData類別的相關方法,如下表所示:

  18. 16-3-4 顯示資料表記錄-說明 • 在這一節筆者準備執行SQL查詢指令取得資料表的記錄資料,步驟是繼續第16-3-2節的步驟三。

  19. 16-3-4 顯示資料表記錄-步驟四 步驟四:使用Statement物件執行SQL指令 • 在Java程式執行SQL查詢指令可以取得查詢結果的ResultSet物件,不同於第16-3-3節,在這一節是直接使用executeQuery()方法取得ResultSet物件,如下所示: ResultSet rs = stmt.executeQuery(sSQL); • 程式碼取得參數SQL指令sSQL查詢結果的ResultSet物件,參數的SQL查詢指令可以取得資料表Book的所有記錄。

  20. 16-3-4 顯示資料表記錄-步驟五 步驟五:使用迴圈取得ResultSet物件的記錄 • 在取得查詢結果的ResultSet物件後,可以使用while迴圈配合next()方法顯示記錄,如下所示: while ( rs.next() ) { int num; // 欄位編號 num = rs.findColumn("BookID"); System.out.print(num + ": "); System.out.print(rs.getString("BookID")); ……… }

  21. 16-3-4 顯示資料表記錄-步驟六 步驟六:關閉連接的Connection和Statement物件 • 在處理完資料庫的查詢或操作後,Java程式需要關閉Connection和Statement物件,使用的都是close()方法,如下所示: stmt.close(); dbCon.close();

  22. 16-4 SQL語言的資料庫查詢 • 16-4-1 SQL語言的基礎 • 16-4-2 SQL查詢的程式範例 • 16-4-3 GUI介面的SQL查詢程式

  23. 16-4 SQL語言的資料庫查詢-說明 • Java應用程式搭配資料庫的目的,主要是為了更有效率且快速的查詢記錄資料,SQL語言是一種資料庫查詢語言,在Java程式是使用Statement物件來執行SQL指令來進行資料庫的查詢。

  24. 16-4 SQL語言的資料庫查詢-類別方法 • 在JDBC類別提供3個類別方法,可以分別開啟資料庫連接、執行SQL查詢和關閉資料庫連接,其說明如下表所示:

  25. 16-4 SQL語言的資料庫查詢-類別變數 • 在JDBC類別提供2個類別變數參考Connection和Statement物件,其說明如下表所示:

  26. 16-4-1 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的源起。

  27. 16-4-1 SQL語言的基礎-分類 • SQL語言的指令可以分為三大部分,如下表所示: • 資料定義語言(Data Definition Language,DLL):建立資料表、索引和視界(Views)等,並且定義資料表的欄位。 • 資料操作語言(Data Manipulation Language,DML):屬於資料表記錄查詢、插入、刪除和更新指令。 • 資料控制語言(Data Control Language,DCL):屬於資料庫安全設定和權限管理的相關指令。

  28. 16-4-1 SQL語言的基礎-SELECT指令說明 SQL查詢指令 - SELECT • Java程式在使用JDBC連結資料庫後,可以使用SQL指令進行資料庫查詢,SQL的資料查詢指令只有一個SELECT指令,完整指令語法如下所示: SELECT 欄位1, 欄位2 FROM 資料表 WHERE conditions • 上述SELECT指令的欄位1~2為記錄的欄位,conditions是查詢條件,指令使用口語來說是「從資料表取回符合WHERE子句條件的記錄,顯示欄位1和2」。

  29. 16-4-1 SQL語言的基礎-指令1 “*”記錄欄位 • 在上述SQL語法的欄位1~2是取回的資料表欄位,我們可以使用”*”符號代表所有欄位,表示取回資料表記錄的所有欄位,如下所示: SELECT * FROM Book • 上述指令沒有WHERE子句,所以將資料表內所有的記錄和欄位取回。

  30. 16-4-1 SQL語言的基礎-指令2 單一查詢條件的WHERE子句 • SQL查詢指令的單一條件,WHERE子句的基本規則和範例,如下所示: • 文字欄位要加上單引號,例如:書號S752,如下所示: SELECT * FROM Book WHERE BookID=’ S752’ • 數值欄位並不需要額外的字元括起,例如:書價大於550元,如下所示: SELECT * FROM Book WHERE BookPrice > 550

  31. 16-4-1 SQL語言的基礎-指令3 • 文字的欄位可以使用【LIKE】包含運算子配合”%”萬用字元,此時查詢的條件子句只需包含的子字串就符合條件,例如:書號內包含有“7”的子字串,如下所示: SELECT * FROM Book WHERE BookID LIKE ‘%7%’ • 數值或日期欄位可以使用<>、>、<、>=和<=不等於、大於、小於、大於等於和小於等於等運算子建立多樣化的查詢條件。

  32. 16-4-1 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 BookTitle LIKE ‘%設計%’

  33. 16-4-1 SQL語言的基礎-指令5 排序輸出 • SQL的查詢結果可以指定欄位進行由小到大,或由大到小排序,只需在SELECT指令的最後加上ORDER BY子句即可,如下所示: SELECT * FROM Book WHERE BookPrice>=550 ORDER BY BookPrice • 上述查詢結果使用BookPrice欄位排序,預設是由小到大的ASC,如果想倒過來由大到小,只需加上DESC,如下所示: SELECT * FROM Book WHERE BookPrice>=550 ORDER BY BookPrice DESC

  34. 16-4-2 SQL查詢的程式範例 • 為了方便讀者測試第16-4-1節的SQL查詢指令,筆者準備建立命令列和第16-4-3節GUI介面的2種資料庫查詢程式,只需輸入SQL指令敘述,就可以查詢資料庫的記錄資料。

  35. 16-4-3 GUI介面的SQL查詢程式 • GUI介面查詢程式,只需在文字方塊欄位輸入SQL指令,按【查詢】鈕,可以在下方的文字區域顯示查詢到的每一筆記錄資料。

  36. 16-5 SQL語言的資料庫操作 • 16-5-1 插入記錄 • 16-5-2 更新記錄 • 16-5-3 刪除記錄

  37. 16-5 SQL語言的資料庫操作 • Java程式一樣可以使用JDBC執行SQL資料表操作指令來維護或更新資料表的記錄資料,這就是資料表插入、刪除和更新記錄的SQL指令:INSERT、DELETE和UPDATE。 • 在這一節的程式範例也是使用JDBC類別的方法和變數,以便減少Java程式碼的長度。

  38. 16-5-1 插入記錄-說明 • SQL語言插入記錄指令INSERT可以新增一筆記錄到資料表,INSERT指令的語法格式,如下所示: INSERT INTO table (column1,column2,…..) VALUES ('value1', 'value2 ', …) • table為準備插入記錄的資料表名稱,column1~n為資料表的欄位名稱清單,只需列出使用到的欄位,value1~n是對應的欄位值。

  39. 16-5-1 插入記錄-注意事項 • 不論欄位或值的清單,都需要使用逗號分隔。 • INSERT指令VALUES的值,數值不用單引號包圍,字元需要單引號包圍,日期時間需要”#”符號。 • INSERT指令的欄位名稱清單,並不需要和資料表定義的欄位數目或順序相同,只需選擇需要新增資料的欄位,但是括號內的欄位名稱順序需和VALUES值的順序相同。

  40. 16-5-1 插入記錄-範例 • 例如:在Book資料表插入一筆圖書記錄的SQL指令,如下所示: INSERT INTO Book (BookID,BookTitle,BookAuthor, BookPrice,BookPubDate) VALUES ('P716','PHP 5網頁設計範例教本', '陳會安',600.0,#04/01/2005#) • 上述SQL指令的欄位值是字串時,請使用單引號括起,如為數值就不需要,日期/時間值是使用「#」符號括起。在Java程式是使用Statement物件的executeUpdate()方法來執行SQL指令,可以插入一筆圖書記錄,如下所示: JDBC.stmt.executeUpdate(strSQL);

  41. 16-5-2 更新記錄-說明 • SQL語言更新記錄指令UPDATE是將資料表內符合條件的記錄,都更新成指定的欄位值,UPDAT E指令的語法格式,如下所示: UPDATE table SET column1 = ‘value1’ WHERE conditions • table是資料表,SET子句column1是資料表的欄位名稱,這是需要更新的欄位,value1是更新的欄位值,如果更新欄位不只一個,請使用逗號分隔,其語法格式,如下所示: UPDATE table SET column1 = 'value1' , column2 = 'value2' WHERE conditions

  42. 16-5-2 更新記錄-注意事項 • WHERE子句是必要元素,如果沒有WHERE子句,資料表內所有記錄欄位都會被更新。 • 更新欄位值是數值不用單引號包圍,字元需要使用單引號包圍,日期時間為”#”符號。

  43. 16-5-2 更新記錄-範例 • 例如:在Book資料表更改記錄圖書資料的SQL指令,如下所示: UPDATE Book SET BookPrice=580.0, BookPubDate=#4/1/2006# WHERE BookID='P716' • 上述SQL指令的WHERE條件為圖書書號BookID欄位,使用SET子句更新欄位資料。

  44. 16-5-3 刪除記錄-說明 • SQL語言刪除記錄指令DELETE是將資料表內符合條件的記錄通通刪除掉。DELETE指令的語法格式,如下所示: DELETE FROM table WHERE conditions • table是資料表,WHERE子句conditions為刪除記錄的條件,口語來說是「將符合conditions條件的記錄刪除掉」。

  45. 16-5-3 刪除記錄-注意事項與範例 • DELETE指令的注意事項,如下所示: • WHERE子句是DELETE指令的必要元素,如果沒有WHERE子句,資料表內的所有記錄都會被刪除。 • 例如:在Book資料表刪除一筆圖書記錄的SQL指令,如下所示: DELETE FROM Book WHERE BookID='P716' • 上述SQL指令的WHERE條件為圖書書號BookID欄位,這個指令可以將符合書號條件的圖書記錄都刪除掉。

  46. 16-6 專案實例:圖書資料管理系統 • 16-6-1 圖書資料管理系統的架構 • 16-6-2 圖書資料管理系統的編譯與執行 • 16-6-3 Java程式說明

  47. 16-6-1 圖書資料管理系統的架構-說明 • 圖書資料管理系統使用本章Access資料庫Books.mdb,其使用介面是第14章JInternalFrame類別的多重視窗和第11章JOptionPane類別的訊息對話方塊。 • 在圖書資料管理系統使用功能表列的指令執行資料庫操作和搜尋,使用者並不需要下達完整SQL指令,就可以新增、更新、刪除和以書號查詢圖書記錄。搜尋記錄功能可以讓使用者輸入完整的SQL查詢指令,其中每一種功能都擁有獨立的內層視窗,使用者可以同時開啟多個視窗執行不同的圖書資料查詢。

  48. 16-6-1 圖書資料管理系統的架構-Java程式說明

  49. 16-6-2 圖書資料管理系統的編譯與執行

  50. 16-6-3 Java程式說明-Books.java Books.java • Books.java程式是修改自Ch14_4.java的多重視窗應用程式,直接擴充createMenuBar()方法的功能表列,新增功能表指令來開啟不同JInternalFrame類別的內層視窗。 • 在其中的createInternalFrame()方法可以建立內層視窗,資料庫操作的addFrame和deleteFrame視窗物件都只能建立一次。

More Related