1 / 350

Java 系列概論 資料庫入門程式 Java System Concepts and Database Programming 賈蓉生 胡大源 林金池 編著

Java 系列概論 資料庫入門程式 Java System Concepts and Database Programming 賈蓉生 胡大源 林金池 編著. 第一篇. Java 資料庫環境. 本書在眾多資料庫中,選定 Java/Access 資料庫系統,以實作方式表現資料庫之功能。 Access 應屬最方便且功能不輸其他者,凡有 Office 的電腦,開機即可使用,無需另添購軟體。 Java 是功能強大的物件導向語言,本身即擁有網路功能,是多數網路電玩採用的設計語言,也是多數大銀行建立網路銀行的設計語言,本書使用 Java 剖析資料庫之各項應用。. 第一章.

josie
Download Presentation

Java 系列概論 資料庫入門程式 Java System Concepts and Database Programming 賈蓉生 胡大源 林金池 編著

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. Java系列概論 資料庫入門程式 Java System Concepts and Database Programming 賈蓉生 胡大源 林金池 編著

  2. 第一篇 Java資料庫環境

  3. 本書在眾多資料庫中,選定Java/Access資料庫系統,以實作方式表現資料庫之功能。Access應屬最方便且功能不輸其他者,凡有Office的電腦,開機即可使用,無需另添購軟體。Java是功能強大的物件導向語言,本身即擁有網路功能,是多數網路電玩採用的設計語言,也是多數大銀行建立網路銀行的設計語言,本書使用Java剖析資料庫之各項應用。本書在眾多資料庫中,選定Java/Access資料庫系統,以實作方式表現資料庫之功能。Access應屬最方便且功能不輸其他者,凡有Office的電腦,開機即可使用,無需另添購軟體。Java是功能強大的物件導向語言,本身即擁有網路功能,是多數網路電玩採用的設計語言,也是多數大銀行建立網路銀行的設計語言,本書使用Java剖析資料庫之各項應用。

  4. 第一章 Java系統安裝

  5. 1-1 簡介 • 本系列書籍使用標準版J2SE,亦即標準版開發套件(J2SE Development Kit),簡稱為jdk。讀者可於網站(http://java.sun.com) 下載、或使用本書隨書光碟提供之Java系統安裝程式,如何安裝、如何設定?請參考本章執行步驟。 • 本章內容包括安裝Java 系統軟體(jdk-6.0)、設定Java環境、編輯第一個Java程式、編譯Java程式、執行類別檔案。

  6. 1-2 安裝Java 系統軟體(jdk-6.0) • jdk-6.0為Java程式之系統軟體,讀者可於 “http://java.sun.com” 免費下載昇陽(Sun) 之最新版、或使用本書光碟C:\BookJavaVol_4\System已備妥之執行檔 “jdk-6u4-windows-i586-p.exe”。

  7. 1-3 設定Java環境 • Java之執行式均備儲於C:\Program Files\Java\jdk1.6.0_04\bin目錄內(如下圖)。當要編譯Java程式、或執行Java程式碼時,必須先將該程式或程式碼移置於此目錄內,才可執行,甚為不便。

  8. 1-4 編輯第一個Java程式 • 可儲存Java程式之編輯工具非常多,筆者認為 “記事本” 最為樸實,負擔輕、效率高,因此建議讀者以 “記事本” 為Java程式之編輯器。

  9. 第二章 第一個Java資料庫應用

  10. 2-1 簡介 • 我們可以關聯代數(Relation Algebra) 輕易地解釋非常困難的查詢邏輯、並藉SQL資料庫語言實作執行,而Java却可流暢地驅動SQL執行各類查詢邏輯。 • 在尚未真正進入資料庫精髓之前,為了讓讀者先觸摸Java與Access之關係,本章將片段基礎介紹:建立資料庫、設定ODBC、建立資料表、輸入資料、讀取資料。

  11. 2-2 建立Access資料庫 • 本書使用Java/Access系統,以Access2007為範例資料庫(如要使用其他資料庫請自行按規定轉換),本節以手動於目錄C:\BookJavaVol_4\Program\ch02\02_2建立資料庫Book.accdb。

  12. 2-3 設定ODBC • 當資料庫建立完成後(如前節之Book.accdb),我們可立即以手動方式建立資料表(Data Tables)、輸入/讀取資料。但却無法藉由Win作業系統之應用程式來建立資料表、輸入/讀取資料。 • 如果要藉由Win作業系統之應用程式來建立資料表、輸入/讀取資料,必須先設定ODBC(Open Database Connectivity),用以連通Win作業系統與資料庫。

  13. 2-4 建立資料表 • 資料表(Data Relation Tabes) 為儲存資料的表格,包括欄位(Field) 與資料型態(Type)。本節將分別介紹:手動資料表(by hands)、Java資料表(by Java)。 • 在查詢操作上,因手動資料表操作複雜,有些查詢邏輯不易執行,但我們可以關聯代數(Relation Algebra) 輕易地解釋非常困難的查詢邏輯、並藉SQL資料庫語言實作執行,而Java却可流暢地驅動SQL執行各類查詢邏輯。

  14. 2-4-2 Java建立資料表(by Java) 1、設定ODBC,將資料庫與Win系統連接 2、載入驅動程式sun.jdbc.odbc.JdbcOdbcDriver,執行方法為: • Class.forName(sun.jdbc.odbc.JdbcOdbcDriver): 3、建立連接物件,連接資料庫,執行方法為: • Connection con = DriverManager.getConnection(jdbc:odbc:xxx); • 其中con為連接物件,xxx為資料庫邏輯名稱。 4、以連接物件之方法程序createStatement() 建立敘述物件,執行方法為: • Statement stmt = con.createStatement(); • 其中stmt為敘述物件。 5、依SQL語言建立字串 “create table …”,其中 “…” 為設定之資料表名稱及所屬各欄位。再以敘述物件之方法程序executeUpdate() 建立資料表,執行方法為: • stmt.executeUpdate(xxxxx); • 其中xxxxx為SQL字串。

  15. 範例01:設計檔案CreateTable02_4_2.java,其功能為解釋以Java建立資料表。範例01:設計檔案CreateTable02_4_2.java,其功能為解釋以Java建立資料表。 • 01 import java.sql.*; • 02 public class CreateTable02_4_2 { • 03 public static void main(String[] args) { • 04 String JDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; • 05 String connectDB="jdbc:odbc:Book02_4"; • 06 try { • 07 Class.forName(JDriver); • 08 } • 09 catch(java.lang.ClassNotFoundException e) { • 10 System.out.println("ForName :" + e.getMessage()); • 11 }

  16. 範例01:續 • 12 try { • 13 Connection con = DriverManager.getConnection(connectDB); • 14 Statement stmt = con.createStatement(); • 15 String query = "create table書目_by_Java ( " • + "編號Text(20)," • + "書名Text(20)," • + "作者Text(10)," • + "書價Number" • + ")"; • 16 stmt.executeUpdate(query); • 17 stmt.close(); • 18 con.close(); • 19 } • 20 catch(SQLException e) { • 21 System.out.println("SQLException: " +e.getMessage()); • 22 } • 23 } • 24 }

  17. 2-5-2 Java輸入資料表(by Java) • 當以Java對資料庫(Data Bases) 之資料表(Data Tables) 輸入資料時,其關鍵步驟與2-4-2節相同,唯一不同者是將項5之SQL字串 “create table …” 改成 “insert into …”。

  18. 範例02:設計檔案InsertTable02_5_2.java,其功能為解釋以Java將資料輸入資料表。範例02:設計檔案InsertTable02_5_2.java,其功能為解釋以Java將資料輸入資料表。 • 01 import java.sql.*; • 02 public class InsertTable02_5_2 { • 03 public static void main(String[] args) { • 04 String JDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; • 05 String connectDB=“jdbc:odbc:Book02_5”; • 06 try { • 07 Class.forName(JDriver); • 08 } • 09 catch(java.lang.ClassNotFoundException e) { • 10 System.out.println("ForName :" + e.getMessage()); • 11 }

  19. 範例02:續1 • 12 try { • 13 Connection con = DriverManager.getConnection(connectDB); • 14 Statement stmt = con.createStatement(); • 15 String query1 = "insert into書目_by_Java values (" • + "'001','資料庫系統概論','賈蓉生', 527)"; • 16 String query2 = "insert into 書目_by_Java values (" • + "'002','Java基礎入門程式','賈蓉生', 442)"; • 17 String query3 = "insert into 書目_by_Java values (" • + "'003','Java網路入門程式','賈蓉生', 476)"; • 18 String query4 = "insert into 書目_by_Java values (" • + "'004','Java動畫遊戲程式','賈蓉生', 500)"; • 19 String query5 = "insert into 書目_by_Java values (" • + "'005','Java資料庫入門程式','賈蓉生', 480)";

  20. 範例02:續2 • 20 String query6 = "insert into 書目_by_Java values (" • + "'006','Java網站資料庫程式','賈蓉生', 510)"; • 21 stmt.executeUpdate(query1); • 22 stmt.executeUpdate(query2); • 23 stmt.executeUpdate(query3); • 24 stmt.executeUpdate(query4); • 25 stmt.executeUpdate(query5); • 26 stmt.executeUpdate(query6); • 27 stmt.close(); • 28 con.close(); • 29 } • 30 catch(SQLException e) { • 31 System.out.println("SQLException: " +e.getMessage()); • 32 } • 33 } • 34 }

  21. 2-6 讀取資料表 • 當以Java對資料庫(Data Bases) 之資料表(Data Tables) 讀物資料時,其關鍵步驟與2-4-2節相同,不同者有: • (1) 將SQL字串改成"select * from xxx",其中xxx為資料表名稱; • (2) 以該SQL字串建立ResultSet物件; • (3) 以該ResultSet物件藉while迴圈讀取資料表內的每筆資料。

  22. 範例03:設計檔案PrintTable02_6.java,其功能為解釋以Java讀取資料表之內容。範例03:設計檔案PrintTable02_6.java,其功能為解釋以Java讀取資料表之內容。 • 01 import java.sql.*; • 02 public class PrintTable02_6 { • 03 public static void main(String[] args) { • 04 String JDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; • 05 String connectDB="jdbc:odbc:Book02_6"; • 06 try { • 07 Class.forName(JDriver); • 08 } • 09 catch(java.lang.ClassNotFoundException e) { • 10 System.out.println("ForName :" + e.getMessage()); • 11 }

  23. 範例03:續 • 12 try { • 13 Connection con = DriverManager.getConnection(connectDB); • 14 Statement stmt = con.createStatement(); • 15 ResultSet rs = stmt.executeQuery("select * from 書目_by_Java"); • 16 System.out.println("編號"+"\t"+"書名"+"\t"+"\t"+"\t"+"作者"+"\t"+"書價"); • 17 while(rs.next()) { • 18 System.out.println(rs.getString("編號")+"\t"+rs.getString("書名")+"\t"+ • rs.getString("作者")+"\t"+rs.getInt("書價")); • 19 } • 20 stmt.close(); • 21 con.close(); • 22 } • 23 catch(SQLException e) { • 24 System.out.println("SQLException: " +e.getMessage()); • 25 } • 26 } • 27 }

  24. 2-7 習題(Exercises) 01、我們可手動作資料庫應用,為何還要藉助Java來作資料庫應用? 02、設定ODBC(Open Database Connectivity) 有何意義? 03、當以Java建立資料庫(Data Bases) 之資料表(Data Tables) 時,其關鍵步驟為何? 04、當以Java對資料庫(Data Bases) 之資料表(Data Tables) 輸入資料時,其關鍵步驟為何? 05、當以Java對資料庫(Data Bases) 之資料表(Data Tables) 讀物資料時,其關鍵步驟為何?

  25. 第二篇 Java資料庫關聯查詢

  26. 資料庫(Database) 設計的重點考量為資料儲存(Data Store) 與資料查詢(Data Query),儲存資料要井然有序,查詢資料要迅速有效,前者將於爾後詳細討論,本篇將專業討論 “如何以Java程式使用SQL字串作迅速有效地資料查詢?”。

  27. 第三章 基礎操作(Basic Operations)

  28. 3-1 簡介 • 本章將針對現今資料庫使常用的資料錄關聯模型(Record Relational Model),在資料查詢上,作有系統地探討,以Access2007為範例資料庫、以Java為程式語言、以SQL為查詢語言,執行各類基礎查詢。

  29. 3-3 SQL查詢基礎架構(Basic Query Structure) • 關聯式資料庫(Relational Database) 是由多個資料表(Relations) 組合而成,每一資料表都有一個獨一無二的名稱,其查詢語言SQL是由三組子句(Clauses) 所組成:欄位選取子句(select Clause)、資料表選取子句(from Clause)、與條件子句(where Clause)。

  30. 3-5 欄位選取查詢(select Clause) • 關聯式資料庫(Relational Database) 是由數個資料表(Relational Table) 所組成,表格為資料錄(Record) 形態,由數個欄位(Columns) 組成。欄位與欄位間、表格與表格之間有其一定的數學關係,依照這些關係,我們可精準地執行指定之查詢。

  31. 範例04:設計Java程式Select_04.java,使用資料庫Bank03.accdb之資料表Deposit(如圖3-3-4),試請 “印出欄位branch_name之各資料內容”。 • 01 import java.sql.*; • 02 public class Select_04 { • 03 public static void main(String[] args) { • 04 String JDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; • 05 String connectDB="jdbc:odbc:Bank03"; • 06 try { • 07 Class.forName(JDriver); • 08 } • 09 catch(java.lang.ClassNotFoundException e) { • 10 System.out.println("ForName :" + e.getMessage()); • 11 }

  32. 範例04:續 • 12 try { • 13 Connection con = DriverManager.getConnection(connectDB); • 14 Statement stmt = con.createStatement(); • 15 ResultSet rs = stmt.executeQuery("SELECT branch_name " + • "FROM Deposit"); • 16 System.out.println(" branch_name"); • 17 System.out.println("-------------"); • 18 while(rs.next()) { • 19 System.out.println(rs.getString("branch_name")); • 20 } • 21 stmt.close(); • 22 con.close(); • 23 } • 24 catch(SQLException e) { • 25 System.out.println("SQLException: " +e.getMessage()); • 26 } • 27 } • 28 }

  33. 範例05:參考範例04,設計Java程式Select_05.java,使用資料庫Bank03.accdb之資料表Deposit(如圖3-3-4),試請 “印出欄位branch_name之各資料內容,使用distinct”。 • (1) SQL查詢句設計為: • SELECTdistinct branch_name • FROM Deposit • (2) 設計程式Select_05.java(參考本書CD檔案)。

  34. 範例06:參考範例05,設計Java程式Select_06.java,使用資料庫Bank03.accdb之資料表Deposit(如圖3-3-4),試請 “印出欄位branch_name之各資料內容,使用all”。 • (1) SQL查詢句設計為: • SELECTall branch_name • FROM Deposit • (2) 設計程式Select_06.java(參考本書CD檔案)。

  35. 範例07:設計Java程式Select_07.java,使用資料庫Bank03.accdb之資料表Deposit(如圖3-3-4),試請 “印出欄位branch_name、customer_name之各資料內容”。 • (1) SQL查詢句設計為: • SELECT branch_name, customer_name • FROM Deposit • (2) 設計程式Select_07.java(參考本書CD檔案)。

  36. 範例08:設計Java程式Select_08.java,使用資料庫Bank03.accdb之資料表Deposit(如圖3-3-4),試請 “於存款額(balance) 配發5%利息,印出欄位branch_name、customer_name、balance之各資料內容”。 (1) SQL查詢句設計為: • SELECT branch_name, customer_name, balance*1.05 as newbalance • FROM Deposit • 其中newbalance為配發5%利息後新得之存款欄位名稱。 (2) 設計程式Select_08.java(參考本書CD檔案)。

  37. 3-6 條件選取(where Clause) • 條件選取支援選擇性資料之查詢,設定特定條件,篩除不合條件的資料,只選取滿足條件的資料。常用之條件選取有:單一條件選取(如範例09)、多個條件選取(如範例10)、中間條件選取(如範例11)。

  38. 範例09:設計Java程式Where_09.java,使用資料庫Bank03.accdb之資料表Borrow(如圖3-3-1),試請 “印出分行(branch_name) Perryridge之各借款帳戶帳號(loan_number) 與借款額(amount)”。 • (1) SQL查詢句設計為: • SELECT loan_number, amount • FROM Borrow • WHERE branch_name=’ Perryridge’ • (2) 設計程式Where_09.java(如本書CD檔案)

  39. 範例10:設計Java程式Where_10.java,使用資料庫Bank03.accdb之資料表Borrow(如圖3-3-1),試請 “印出分行(branch_name) Perryridge、借款額大於2500之各借款帳戶帳號(loan_number) 與借款額(amount)”。 • (1) SQL查詢句設計為: • SELECT loan_number, amount • FROM Borrow • WHERE branch_name = ‘Perryridge’ and amount > 2500 • (2) 設計程式Where_10.java(參考本書CD檔案)。

  40. 範例11:設計Java程式Where_11.java,使用資料庫Bank03.accdb之資料表Borrow(如圖3-3-1),試請 “印出借款額大於等於2500、和小於等於3000之各借款帳戶帳號(loan_number) 與借款額(amount)”。 • (1) SQL查詢句設計1為: • SELECT loan_number, amount • FROM Borrow • WHERE amount between 2500 and 3000 • (2) SQL查詢句設計2為: • SELECT loan_number, amount • FROM Borrow • WHERE amount <= 2500 and amount>=2500 • (3) 設計程式Where_11.java(參考本書CD檔案)。

  41. 3-7 多個資料表關聯選取(from Clause) • 一個有效率的機構總是依賴一個分工的組織,資料庫也是一樣,以多個不同功能的資料表奠定分工的基礎。 • 如本章範例資料庫Bank03.accdb,存款部門建立資料表Deposit、借款部門建立資料表Borrow、公關部門建立資料表Customer、組織部門建立資料表Branch。各部門各依資料表分工作業,必要時亦可相互支援合作,即為本節之多個資料表關聯選取。 • 當將兩個資料表關聯操作時,兩個資料表必須至少有一個相同名稱的欄位,我們可以程式關聯、或以手動關聯執行之,筆者偏向手動關聯,因可降低系統的負擔。

  42. 範例12:設計Java程式Tables_12.java,使用資料庫Bank03.accdb之資料表Borrow(如圖3-3-1) 與Deposit(如圖3-3-4),試請 “印出所有持有借款帳戶的客戶(customer_name) 及其居住的城市(customer_city)”。 • (1) SQL查詢句設計為: • SELECT Borrow.customer_name, Customer.customer_city • FROM Borrow, Customer • WHERE Borrow.customer_name = Customer.customer_name • 因是同時使用兩個資料表,在欄位左端需加置所屬資料表名稱,否則系統將無所適從選擇正確的資料表。 • (2) 設計程式Tables_12.java(如本書CD檔案)

  43. 範例13:與範例12相同,設計Java程式Tables_13.java,使用資料庫Bank03.accdb之查詢表Borrow_Deposit,試請 “印出所有持有借款帳戶的客戶(customer_name) 及其居住的城市(customer_city)”。 • (1) SQL查詢句設計為: • SELECT Borrow.customer_name, Customer.customer_city • FROM Borrow_Customer • (2) 設計程式Tables_13.java(參考本書CD檔案)。

  44. 3-8 更名操作(Rename Operation) • 在操作過程中,更改名稱(Rename) 可將繁雜的名稱整理成精簡的名稱,增加可讀性與應用性,SQL提供更名機制 “as”,可更改資料表(Relations) 或欄位(Attributes) 的名稱。同時也可用於欄位計算後之新名稱(如範例08)。

  45. 範例14:設計Java程式Rename_14.java,使用資料庫Bank03.accdb之查詢表Borrow_Deposit,試請 “印出下列SQL查詢句之執行結果”。 • (1) SQL查詢句設計為: • SELECT customer_name as client_name, customer_city as city • FROM Borrow, Customer • WHERE Borrow.customer_name = Customer.customer_name and • branch_name = ‘Perryridge’ • 為了降低系統負擔,可以查詢表Borrow_Customer取代資料表Borrow, Customer,並將SQL字串改為下列字串。 • (2) SQL查詢句設計為: • SELECT customer_name as client_name, customer_city as city • FROM Borrow_Customer • WHERE branch_name = ‘Perryridge’ • (3) 設計程式Rename_14.java(參考本書CD檔案):

  46. 3-9 資料組變數(Tuple Variables) • 有些查詢問題牽涉到資料組間之關係,極不容易解答,但以資料組變數之輔助,則可輕易解決。

  47. 範例15:設計Java程式Variables_15.java,使用資料庫Bank03.accdb之資料表Deposit,試請 “印出其分行名稱(branch_name) 與客戶名稱(customer_name),如果有重複之分行名稱,則選取存款額(amount) 較大的資料組”。 • (1) SQL查詢句設計為: • SELECTdistinct T.branch_name, T.customer_name • FROM Deposit as T, Deposit as S • WHERE T.balance > S.balance • (2) 設計程式Variables_15.java(參考本書CD檔案):

  48. 3-10 字串操作(String Operations) • 在SQL字串中,有些符號具有特定意義,尤其是字串括號、暫離符號、與模糊取代(like) 之用法,常用格式有: 1、單引號(Single Quote):SQL字串以單引號括住字串之兩端,如 ‘It is my book ’。 2、雙引號(Double Quote):如果字串中已有單號成員,如It’s my book,則以雙引號取代之,如 ‘ It”s my book’。 3、百分號(Percent) %:用於次字串(Sub String) 之模糊取代(like),如 ‘downtown’ = ‘down%’,其中 ‘ %’ = ‘town’。 4、底線(Underscore) _:用於字元(Character) 之模糊取代(like),如 ‘down_own’ = ‘downtown’,其中 ‘_’ = ‘t’; ‘down_ _ _n’ = ‘downtown’,其中 ‘_ _ _’ = ‘tow’。 5、右斜線\:視為暫離符號(Escape),當字串中有特殊符號時,為了避免誤會,SQL提供右斜線\ 作暫離,如 ‘10% of people’ 應改為 ‘10\% of people’。

  49. 範例16:設計Java程式String_16.java,使用資料庫Bank03.accdb之查詢表Deposit_Customer,試請 “印出在分行(branch_name) ‘ %rryr%’ 所有持有借款帳戶的客戶(customer_name) 及其居住的城市(customer_city)”。 • (1) SQL查詢句設計為: • SELECT customer_name, customer_city • FROM Borrow_Customer • WHERE branch_name like ‘ %rryr%’ • (2) 設計程式Strein_16.java(參考本書CD檔案):

  50. 3-11 排序操作(Ordering the Display of Tuples) • SQL提供指令 “order by” 指定某欄位(Attribute) 為排序欄位,依其中的內容執行資料組(Tuples) 排序(Ordering)。

More Related