Network Database Programming

Slides:



Advertisements
Similar presentations
第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Advertisements

2010 年 6 月课件制作人:王亚楠 1 模块 2 项目开发概论 教学课件 年 6 月课件制作人:王亚楠 2 目录 目标 了解:数据库技术的基本概念与结构 理解:数据模型的分类与结构组成 掌握:关系数据库及 SQL 的基本理论 知识 掌握:数据库设计的方法与步骤 内容 2.1 数据库技术基础.
Data type P64 ‘’ 转义字符 P67 P68 EXE,选出某个教师的学生中最新的一 个,要姓名, ID (,LIMIT ) EXISTS,NOT EXISTS P409 Q,EXISTS 和 in 的区别( 1000 ,查询结果)
Java 技术与应用 数据库应用 ( 第 14 章 ) 西安交大 卫颜俊 2008 年 12 月 电子信箱: QQ: 网站 : /java.
第 7 章 数据库 1. Overview  数据库概述  数据库管理系统  数据库的体系结构和数据库模型  SQL 语言  数据库技术  构建数据库系统 2.
目 录 第 1 章 数据库技术基础 第 2 章 SQL Server基础 第 3 章 数据库管理 第 4 章 查询和视图
第2章 資料庫系統 2-1 資料庫環境的四大組成元件 2-2 ANSI/SPARC的三層資料庫系統架構
關聯查詢.
第5章 关系数据库标准语言SQL 主讲:张丽芳.
第2讲 Transact-SQL语言.
第六章 資料倉儲與採礦技術 6.1 資料倉儲與採礦定義 6.2 資料採礦之步驟與技術分類 6.3 資料採礦在顧客關係管理之應用
数据库技术 实践.
高等院校计算机教材系列 数据库原理与应用(第2版) 任课教师:刘雅莉
第2章 数据模型 2.1 实体联系模型 2.2 关系模型 2.3 面向对象的数据模型 习 题 2.
Chap 11 SQL基本查詢指令.
第8章 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
第8章 设计数据库应用网站 本章讲述的主要内容 8.1 数据库基础知识 8.2 使用数据库系统 8.3 SQL查询基础
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
第14章 預存程序 14-1 預存程序的基礎 14-2 建立與執行預存程序 14-3 預存程序的參數傳遞 14-4 預存程序的傳回值
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
第3章 SQL的基础知识 数据库管理及应用 3.1 SQL简介 3.2 SQL的数据模型 3.3 标识符 3.4 使用SQL语句管理数据库
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
第 八 章 資料庫安全 本投影片(下稱教用資源)僅授權給採用教用資源相關之旗標書籍為教科書之授課老師(下稱老師)專用,老師為教學使用之目的,得摘錄、編輯、重製教用資源(但使用量不得超過各該教用資源內容之80%)以製作為輔助教學之教學投影片,並於授課時搭配旗標書籍公開播放,但不得為網際網路公開傳輸之遠距教學、網路教學等之使用;除此之外,老師不得再授權予任何第三人使用,並不得將依此授權所製作之教學投影片之相關著作物移作他用。
文科计算机小公共课规划教材 Access 程序设计.
Chap 13 視界與資料庫程式設計.
第6章 資料庫管理系統 6-1 關聯式資料庫管理系統 6-2 SQL Server資料庫管理系統
第3章 数据查询与SQL命令.
第2章 数据定义功能 创建表 在关系型数据模型中,表(Table)是最基本的数据结构。
第7章 建立資料表與完整性限制條件 7-1 資料型別 7-2 資料表的建立 7-3 建立完整性限制條件 7-4 修改與刪除資料表
關聯式資料庫.
Access 2007 進銷存管理系統實作 文魁資訊股份有限公司.
9 SELECT敘述的進階查詢 9-1 SQL的多資料表查詢 9-2 合併查詢 9-3 集合運算查詢 9-4 子查詢
資料庫系統 Database Systems
課程名稱:資料庫系統 授課老師:李春雄 博士
課程名稱:資料庫系統 授課老師:李春雄 博士
二.資料庫系統建立與管理 Access 資料庫:windows下的單機資料庫 Access 操作 Mysql資料庫介紹.
Chap 10 SQL定義、操作與控制指令.
Chap 3 資料庫模型與處理架構.
資料庫安全 (Database Security)
彰化縣政府補助辦理網頁設計資料庫應用班 ASP與資料庫介紹 建國技術學院資管系 饒瑞佶.
SQL Server 2000 数据库入门.
第4章(2) 空间数据库 —关系数据库 北京建筑工程学院 王文宇.
課程名稱:資料庫系統 授課老師:李春雄 博士
課程名稱:資料庫系統 授課老師:李春雄 博士
5 数据库管理与保护 数据库运行的最小逻辑工作单位是事务,所有对数据库的操作,都以事务作为一个整体来执行或撤销。
第九章 進階的查詢技巧.
SQL SERVER 一些经典语句 1.
資料庫系統導論.
MySQL 結構化查詢語言 MySQL.
第十七章 資料庫SQL 17-1 SELECT 17-2 INSERT 17-3 UPDATE 17-4 DELETE.
第十二章 SQL語言簡介 講授大綱: 新增資料庫 新增資料表 新增資料 修改資料 刪除資料 查詢資料 透視ASP.NET-第12章
Ch4.SQL Server 2005資料庫組成員元件介紹
第4章(1) 空间数据库 —数据库理论基础 北京建筑工程学院 王文宇.
認識 Java.
CH03 行銷資訊系統資料庫模組--資料庫概論
数据库技术.
第18章 SQL結構化查詢語言 18-1 SQL語言的基礎 18-2 SQL的查詢指令 18-3 SQL子查詢與合併查詢.
資料庫系統 李翊豪 2017/12/21 Reference
4.2 视图 (1) 视图是一个虚拟表,其内容来自对表查询的基础上。
3. SQL语言的应用 3.1 SQL历史和优点 3.2 数据查询 3.3 数据操纵.
查询与视图 蔡海洋.
第14章 SQL数据查询与操纵 内容提要 本章知识点
SQL查询语句 蔡海洋.
17 交易處理與鎖定 17-1 交易的基礎 17-2 交易處理 17-3 並行控制 17-4 資料鎖定 17-5 死結問題.
資料庫管理 Database Managent Ex.1-2 課本範例練習
8 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
資料庫系統  Database System 施莉萍 2017/12/28.
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
資料庫應用與實作 一到六章重點、習題.
第4章 数据查询.
Presentation transcript:

Network Database Programming Java概論與實作 Java System Concepts 網路資料庫設計 Network Database Programming   賈蓉生 胡大源 林金池 編著

第一篇 Java資料庫環境

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

第一章 Java系統安裝

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

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

1-3 設定Java環境 Java之所有系統執行式均備儲於C:\Program Files\Java\jdk1.6.0_06\bin目錄內。當要編譯Java程式、或執行Java程式碼時,必須先將該程式或程式碼移置於此目錄內,才可執行,甚為不便。 為了避免必須將程式碼移置至C:\Program Files\Java\ jdk1.6.0_06\bin目錄內之不便,讓任一目錄內之Java程式、或Java程式碼均可在自己目錄內執行,我們應設定Java執行路徑之環境。

1-4 編輯第一個Java程式 可儲存Java程式之編輯工具非常多,筆者認為 “記事本” 最為樸實,負擔輕、效率高,因此建議讀者以 “記事本” 為Java程式之編輯器。 1 class MyfirstJava{ 2 public static void main(String[ ] args){ 3 System.out.println("My first Java program"); 4 } 5 }

第二章 第一個Java網站資料庫

2-1 簡介 在尚未真正進入基礎網站資料庫精髓之前,為了讓讀者先觸摸Java與Access之網站資料庫關係,本章將作片段基礎介紹:建立資料庫、設定ODBC、網路輸入/讀取資料。

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

2-3 建立資料表(Establish Table) 延續前節資料庫Book.accdb, 於目錄C:\BookJavaVol_5\Program\ch02、開啟資料庫Book.accdb \ 建立資料表。

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

2-5 遠端輸入(Network Writing) 設計Server/Client程式,於Client端鍵入指令,經由網路對Server端之資料庫作資料輸入。本章用意是請讀者體驗第一個Java網站資料庫之資料輸入,有關設計細節將於爾後各章節另詳細介紹。 參考範例01

2-6 遠端讀取(Network Reading) 設計Server/Client程式,於Client端鍵入指令,經由網路對Server端之資料庫作資料讀取。本章用意是請讀者體驗第一個Java網站資料庫之資料讀取,有關設計細節將於爾後各章另詳細介紹。   參考範例02

網路串流(Data Stream in Network) 第二篇 網路串流(Data Stream in Network)

人說Java語言有許多其他語言所不能及的優點,網路資料串流就是其中最大優點之一,不需要如其他語言大張旗鼓地先架設網站平台,然後才可執行網路資料傳遞,Java只需於程式中寫幾列程式碼,即可執行網路資料傳遞。   有關Java在網路上之應用,讀者可參考本系列叢書第二冊 “Java網路入門程式, 碁峰EL0049”,本篇將以Server / Client為兩組端點、設計Java網路程式,觀察如何將資料納入網路串流,傳輸於兩端點之間。

網路結構概念 (Network Structure Concepts) 第三章 網路結構概念 (Network Structure Concepts)

3-1 簡介 網路系統 (Network System) 是多個處理器(Processors) 的組合,各處理器散置於各不同地區,彼此間互不共享記憶體,各有其自己的記憶體(Memory),以地區網路(LAN Local Area Network) 或廣域網路(WAN Wide Area Network) 互通訊息。本章將探討網路系統結構之概念。

3-2 網路意義(Background) 網路系統(Network System) 是多個電腦處理器(Processors) 的組合,從小型的手持微電腦、個人電腦、到大型的工作站,散置於各不同地區(Sites),由網路互相連通、互相支援。

3-3 節點連接(Topology) 網路系統是將散置於各處的處理器(Processors) 以網路連接,互通訊息。其中有許多連接方式,各有其優缺點,我們考量的重點有:   (1) 實體安裝代價(Installation Cost):連接線愈多,實體代 價愈高。 (2) 通訊時間代價(Communication Cost):連接線愈多,兩 節點連通途徑愈多,有較多最短途徑的選擇,節省通 訊時間,致通訊時間代價降低。 (3) 執行方便考量(Availability):連接線愈多,兩節點連通 途徑愈多,有較多選擇途徑。同時如果有一連線損壞, 也有較多機會以其他途徑取代之。

3-4 網路通訊(Communication) 當探討網路通訊,我們須考量:(1) 名稱解析(Naming Resolution),各節點之行程(Processes) 如何在廣大的網域中互相定址對方? (2) 路由策略(Routing Strategies),如何在網域中選擇傳遞資料之途徑? (3) 連接策略(Connection Strategies),網路中如何安排多個行程同時傳遞資料? (4) 衝突避免(Contention),當發生網路上爭議的問題時,如何解決?

3-5 網路通訊協定(Communication Protocols)   網路通訊協定(Communication Protocols) 是以多階層(Multiple Layers) 方式設計,網域網路採用國際標準組織(ISO International Standards Organization) 所提出的協定(Protocol)

3-6 網路故障處理(Robustness) 網路節點眾多,發生故障的機會更是稀鬆平常,如連線故障(Failure of Link)、電腦節點故障(Failure of Site)、資料遺失(Loss of Message) 等。   為了維護網路隨時保持良好狀態,網路應有能力執行:偵測故障(Detect Failure)、重組系統(Reconfiguration)、與修補故障(Recovery from Failure)。

3-7 網站資料庫處理(Database in Network) 1、於Server端建立資料庫,設定ODBC連接Win作業系統; 2、於Server端設計網站程式:(1)建立網站;(2)建立連接平台,等待Client端來連接;(3)建立輸入/輸出串流,與Client端傳遞資料;(4)經由Win作業系統連通資料庫。 3、於Client端設計網路程式:(1)建立連接平台,連接Server端;(2)建立輸入/輸出串流,將操作指令傳遞至Server端,同時接收Server端回傳之訊息。

網路連接(Server/Client Connection) 第四章 網路連接(Server/Client Connection)

4-1 簡介 本章將介紹Server / Client端點如何作網路連接。設計Server端網路程式,等待被Client端連接;設計Client端網路程式,連接Server端。   Server端以設定之執行埠(port) 建置網站平台(ServerSocket),再以網站平台建立連接平台(Socket),當Client端有訊息來連接時,以連接平台(Socket) 之接收功能接受連接,並捉取Client端的網址(IP) 印出之。Client端以Server之網址(IP)、及設定之執行埠(port) 建立網路連接平台(Socket,由Client端連接Server端。

4-2 ServerSocket Class java.net.ServerSocket繼承自Object,此類別產生的新物件,可依本機之網址(IP)、與設定之執行埠(port) 建立Server端網站平台(ServerSocket),等待Client端來連接。其中執行埠(port) 不得設定已被使用者(參考附錄A),否則將無法成功建立。 參考範例03

4-3 InetAddress Class java.net.InetAddress繼承自Object,此類別可依指定電腦之名稱或IP,建立一個網路位置,使用在封包(Datagram Packet) 或網路平台(Socket) 之類別內。此類別無建構子,故無法以建構子產生新物件,但可以類別方法程序回傳一個物件(如範例04之列06)。

4-4 Socket Class java.net.Socket繼承自Object,此類別產生的新物件,可依網站之IP和port,與Server網站連接,進而以網路串流執行遠端讀取或寫入。 參考範例05

4-5 指令參數與Server/Client連接 指令參數是位於執行指令後端之參數。於前節、於程式內固定設置IP與port,一旦完成編譯後,即無法改變,極不方便。如果改以指令參數(Command Parameters) 就可機動設定IP與port,我們可將完成之編譯碼,使用於任何Server/Client之連接,這也是正式應用之設計方式。 參考範例06

訊息傳遞(Message Transition) 第五章 訊息傳遞(Message Transition)

5-1 簡介 當Server端與Client端連接後,彼此以網路串流將資料相互傳遞。本章介紹如何於Client端以指令參數輸入訊息,交由網路輸出串流物件,傳送至Server端印出,再讀取Server端設定之訊息,回傳至Client端印出,完成以網路串流相互傳遞訊息。

5-2 DataInputStream Class java.io.DataInptStream繼承(extends) 自FilterInputStream→InputStream→Object,且承作(implements) 自DataInput。此類別為串流物件,可用於讀取網路平台之輸入串流。

5-3 DataOutputStream Class   java.io.DataOutptStream繼承(extends) 自FilterOutputStream→ OutputStream→ Object,承作(implements) 自DataOutput。此類別為串流物件,可用於從網路平台輸出串流。

5-4 PrintStream Class   java.io.PrintStream繼承(extends) 自FilterOutputStream→ OutputStream→ Object。此類別為串流物件,可用於從網路平台輸出串流,與DataOutputStream有相同的功能,使用環境則更為普遍。

5-5 訊息傳遞操作(Message Transition)   以類別DataInputStream、PrintStream設計輸入/輸出網路串流,設計Server/Client範例程式07,將Client端之參數訊息傳遞至Server端,同時將Server端之即定訊息回傳至Client端。 參考範例07

為了傳遞中文訊息,我們改以DataOutputStream建立輸出串流物件,以其方法程序writeUTF() 網路輸出中英文字串訊息、以readUTF() 讀取網路中英文字串訊息。   參考範例08

資料庫建立(Establish Database) 第三篇 資料庫建立(Establish Database)

除了由手動建立資料庫框架之外,其餘如資料表建立(Tables)、檢視表建立(Views)、資料輸入(Input)、資料新增(Insert)、資料更新(Update) 資料刪除(Delete)等,均可藉由Java程式在網路上作遠端操作。   筆者強烈推薦讀者參考本系列叢書第四冊 “資料庫入門程式, 碁峰EL0051”,先行了解各類型問題的操作指令。本篇將以Server/Client網路連接方式,由Client端鍵入指令,遠端操作Server端之資料庫。

資料表建立(Establish Tables) 第六章 資料表建立(Establish Tables)

6-1 簡介 當手動建立資料庫以後,我們即可利用網路,遠端操作該資料庫。資料庫建立於Server端,指令由Client端鍵入,執行操作。   當手動建立資料庫以後,我們即可利用網路,遠端操作該資料庫。資料庫建立於Server端,指令由Client端鍵入,執行操作。 本章將以範例實作,介紹如何遠端操作資料表建立(Tables Establish)、限制設定(Constraints)、欄位變更(Fields Alter)、資料表刪除(Tables Delete)。

6-2資料型態(Datatype)

6-3資料表建立(Tables Establish) 於Server端,參考2-2節手動建立資料庫(Database),參考2-4節設定ODBC,使資料庫與Win作業系統(Operating System) 連通;設計Server端應用程式(Application Program),連通Win作業系統與資料庫;設計Client端操作程式,鍵入指令經由網路遠端操作資料庫,建立資料表。 參考範例09

6-4 限制設定(Constraints) 建立資料表時,我們可對各欄位之內容作一些限制(Constraints),常用的限制有:主索引欄位設定、必須資料欄位設定、獨一無二欄位設定。   SQL語言提供指令 “PRIMARY KEY” 設定主索引欄位;提供指令 “NOT NULL” 設定必須資料欄位;提供指令 “UNIQUE” 設定獨一無二欄位。 參考範例10

6-5資料表變更(Alter Table) 資料表變更常用於資料型態變更(Alter Data Type)、與欄位變更(Alter Field),前者為改變資料之型態或長度;後者為增加欄位或刪除欄位。

6-5-1資料型態變更(Alter Data Type) SQL語言提供指令 “ALTER TABLE tablename ALTER COLUMN field type(n)” 變更資料之型態(type) 或長度(n)。   參考範例11

6-5-2 欄位增刪(Add/Drop Fields) SQL語言提供指令 “ALTER TABLE tablename ADD COLUMN field type(n)” 增加新欄位;提供指令 “ALTER TABLE tablename DROP COLUMN field” 刪除欄位。 參考範例13

6-6 資料表刪除(Drop Table) 於本章前數節、我們探討到如何以Java建立資料表、變更資料表,本節將延續探討刪除資料表。SQL語言提供指令 “DROP TABLE tablename” 刪除資料表。   參考範例15

資料變更(Data Modification) 第七章 資料變更(Data Modification)

7-1 簡介   當資料表建立完成後,下一步應考量如何儲存資料、與應用資料,依循本書軌跡,我們設計Server/Client網路程式,由Client端鍵入指令,對Server端之資料庫執行資料新增(Insert)、資料刪除(Delete)、與資料更新(Update)。

7-2 資料新增(Insert) SQL提供指令 “INSERT INTO” 執行資料庫資料新增,執行時需注意:(1) 必須是整個資料組(Tuple) 的新增,無法僅新增資料組部分欄位(Attributes) 內之資料;(2) 於一個時間內,只允許一個資料表(Relation) 執行一組資料新增,如果要對多個資料表新增多組資料,則必須分多次執行。   參考範例16

7-3 資料更新(Update) SQL語言提供指令 “UPDATE … SET …” 執行資料庫資料更新。執行資料更新時,可對資料組中部分欄位(Attributes) 內之資料作更新。   參考範例17

7-4 資料刪除(Delete) SQL語言提供指令 “DELETE FROM” 執行資料庫資料刪除。與資料新增相同,執行時需是整個資料組(Tuple) 的刪除,無法僅刪除資料組部分欄位(Attributes) 內之資料。   參考範例18

檢視表建立(Establish Views) 第八章 檢視表建立(Establish Views)

8-1 簡介 為了更靈活地應用資料庫,我們可就即有的資料表(Tables),依功能需要更改其中架構,建立另一個新資料表,如此新建之資料表是謂 “檢視表(View)”。   檢視表(View) 可依一個資料表、或由多個資料表改建。前者以一個資料表,取其特定條件之資料建立而成;後者以多個資料表,取其特定條件之關聯資料建立而成。

8-2 範例資料庫   為了儘速進入本章範例實作,依前述章節方法,於本書CD目錄C: \BookJavaVol_5 \Program \ch08建立資料庫Bank_ch08.accdb,及資料表Borrow(如圖8-2-1)、Branch(如圖8-2-2)、Customer(如圖8-2-3)、Deposit(如圖8-2-4)

8-3 單一資料表之檢視表 SQL語言提供指令 “CREATE VIEW … AS … ” 建立檢視表(View)。本節介紹如何以一個資料表(Table) 之特定條件資料建立一個新的檢視表(View)。設計範例19,依原有資料表內容,以其部份欄位建立檢視表。   參考範例19

8-4 多個資料表之檢視表 一個有效率的機構總是依賴一些分工的組織,資料庫也是一樣,以多個不同功能的資料表奠定分工的基礎,必要時、也可聯結此多個資料表之某些內容,建立成一個檢視表,用以輔助解決一些非常困難的查詢。本節將介紹如何聯結多個資料表之內容,執行特定功能之聯結操作(Join Operations)。

8-5 一般聯結(Join) 當兩個資料表中至少有一個屬性欄位(Attribute) 名稱相同時,才可將該兩個資料表執行連結,一般聯結是指欄位(Attributes) 完全聯結(Join),即使是同名稱之聯結欄位也要重複列出,而自然聯結(Natural Join) 却不將同名稱之聯結欄位作重複列出。

一、內聯結(Inner Join): SQL語言提供內聯結指令 “… INNER JOIN … ON …” 內聯結兩個資料表(Relations),其中相同欄位之資料組為完全相同。   參考範例21

二、左外聯結(Left Outer Join): SQL語言提供左外聯結指令 “… LEFT OUTER JOIN … ON …” 左外聯結兩個關聯表(Relations),其中相同欄位之資料組內容不完全相同,當左端有資料而右端無資料時,以Null表示右端殘缺之資料組內容,如此操作是謂 “左外聯結”。   參考範例22

三、右外聯結(Right Outer Join): SQL語言提供右外聯結指令 “… RIGHT OUTER JOIN … ON …” 右外聯結兩個關聯表(Relations),其中相同欄位之資料組內容不完全相同,當右端有資料而左端無資料時,以Null表示左端殘缺之資料組內容,如此操作是謂 “右外聯結”。 參考範例23

四、完全外聯結(Full Outer Join): SQL語言提供完全外聯結指令 “… FULL OUTER JOIN … ON …” 完全外聯結兩個關聯表(Relations),其中相同欄位之資料組內容不完全相同,當左端有資料而右端無資料時,以Null表示右端殘缺之資料組內容;當右端有資料而左端無資料時,以Null表示左端殘缺之資料組內容,如此操作是謂 “完全外聯結”。 參考範例24

8-6 自然聯結(Natural Join) 如前述,當兩個資料表中至少有一個屬性欄位(Attribute) 名稱相同時,才可將該兩個資料表執行連結,前節之一般聯結是指欄位(Attributes) 完全聯結(Join),即使是同名稱之聯結欄位也要重複列出,而本節之自然聯結(Natural Join) 却不將同名稱之聯結欄位作重複列出,比較前節、是為常用之聯結方法。

一、自然內聯結(Inner Join): SQL語言提供自然內聯結指令 “… NATURAL INNER JOIN … ON …” 自然內聯結兩個資料表(Relations),其中同名稱之聯結欄位將不得重複列出。   參考範例25

二、自然左外聯結(Natual Left Outer Join): SQL語言提供自然左外聯結指令 “… NATURAL LEFT OUTER JOIN … ON …” 自然左外聯結兩個關聯表,其中同名稱之聯結欄位不得重複列出,當左端有資料而右端無資料時,以Null表示右端殘缺之資料組內容,如此操作是謂 “自然左外聯結”。   參考範例26

三、自然右外聯結(Natual Right Outer Join): SQL語言提供自然左外聯結指令 “… NATURAL RIGHT OUTER JOIN … ON …” 自然右外聯結兩個關聯表,其中同名稱之聯結欄位不得重複列出,當右端有資料而左端無資料時,以Null表示左端殘缺之資料組內容,如此操作是謂 “自然右外聯結”。   參考範例27

四、自然完全外聯結(Natual Full Outer Join): SQL語言提供自然完全外聯結指令 “… NATURAL FULL OUTER JOIN … ON …” 自然完全外聯結兩個關聯表,其中同名稱之聯結欄位不得重複列出,當左端有資料而右端無資料時,以Null表示右端殘缺之資料組內容;當右端有資料而左端無資料時,以Null表示左端殘缺之資料組內容,如此操作是謂 “自然完全外聯結”。   參考範例28

第四篇 資料查詢(Data Query)

資料庫(Database) 設計的重點為:井然有序地儲存資料、與迅速有效地查詢資料。於本系列叢書第四冊 “資料庫入門程式, 碁峰EL0051” 曾詳細介紹SQL語言用於Access之查詢指令,本書本篇將介紹如何以Server/Client架構,執行網路遠端資料庫查詢。

基礎操作(Basic Operations) 第九章 基礎操作(Basic Operations)

9-1 簡介 於第三篇,當資料庫建立完成後,我們希望能了解該資料庫內各資料表的內容:(1) 單資料表全部資料內容、(2) 單資料表部份欄位資料內容、(3) 單資料表特定條件資料內容、(4) 多資料表關聯資料內容、(5) 特定函數資料內容。   本章將就其中基礎操作部份提出,配合SQL語言指令,以Server/Client架構作網路遠端資料庫查詢。

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

典型SQL語言查詢子句格式為:   SELECT A1, A2, …, An FROM r1, r2, …,rm WHERE P 其中Ai為欄位名稱,ri為資料表名稱,P為要求條件。其意義是反應關聯代數式(Relational Algebra): П A1, A2, …, An (σ P (r1× r2 × … × rm))

9-3 欄位選取查詢(select Clause) 常用欄位選取查詢有:所有欄位選取(如範例29)、單一欄位選取(如範例30)、多欄位選取(如範例31)、相同資料合併選取(如範例32)、欄位計算選取(如範例33)。

9-3-2 單一欄位選取(SELECT field FROM …)   SQL語言如9-2節之查詢句型格式,提供指令 “SELECT field FROM …” 執行單一欄位選取查詢,其中SELECT為設定選取欄位(field)、FROM為設定資料表(tables)。 參考範例30

9-3-3 多欄位選取 (SELECT field1,field2,… FROM …)   SQL語言如9-2節之查詢句型格式,提供指令 “SELECT field1,field2,… FROM …” 執行多欄位選取查詢,其中SELECT為設定選取欄位(field)、FROM為設定資料表(tables)。 參考範例31

9-3-4 重複資料選取 (SELECT DISTINCT … FROM …)   觀察範例30,於其執行結果、我們可看到7個資料組(Tuples),其中有2個Perryridge。SQL允許執行刪除重複資料。 SQL語言如9-2節之查詢句型格式,提供指令 “SELECT DISTINCT … FROM …” 執行刪除重複資料選取,其中DISTINCT為不得有重複資料。 參考範例32

9-3-5 欄位計算選取(SELECT … AS … FROM …)   於選取子句,除了可選取多個欄位之外,亦可將 +、−、*、/ 等計算加諸於指定欄位,計算該欄位之資料內容。 SQL語言如9-2節之查詢句型格式,提供指令 “SELECT … AS … FROM …” 執行欄位計算選取,其中AS為新建欄位。 參考範例33

9-4 條件選取(where Clause)   條件選取支援選擇性資料之查詢,設定特定條件,篩除不合條件的資料,只選取滿足條件的資料。常用之條件選取有:單一條件選取(如範例34)、多條件選取(如範例35)、範圍條件選取(如範例36)。

9-4-1 單一條件選取(WHERE …)   SQL語言如9-2節之查詢句型格式,提供指令 “WHERE …” 執行單一條件選取,以指令WHERE設定條件(Predicates)。 參考範例34

9-4-2 多條件選取(WHERE … AND …)   SQL語言如9-2節之查詢句型格式,提供指令 “WHERE … AND …” 執行多條件選取,邏輯連接指令有“AND”、“OR”、“NOT”。 參考範例35

9-4-3 範圍條件選取(WHERE … BETWEEN …) SQL語言如9-2節之查詢句型格式,提供指令 “WHERE … BETWEEN …” 執行範圍條件選取,範圍指令可使用 “BETWEEN”、或 “<=”、“<”、“>=”、“>”。   參考範例36

9-5 多個資料表關聯選取(from Clause) 一個有效率的機構總是依賴一個分工的組織,資料庫也是一樣,以多個不同功能的資料表奠定分工基礎。   如本章範例資料庫Bank_ch09.accdb,存款部門建立資料表Deposit、借款部門建立資料表Borrow、公關部門建立資料表Customer、組織部門建立資料表Branch。各部門各依資料表分工作業,必要時亦可相互支援合作,即為本節多個資料表關聯選取。 當將兩個資料表關聯操作時,兩個資料表必須至少有一個相同名稱的欄位,我們可以直接關聯、或以檢視表關聯執行之。

9-5-1 直接關聯 直接以SQL語言指令將兩個資料表作關聯,再依條件需要,選取適當欄位(Fields)或資料組(Tuples) 之內容。   直接以SQL語言指令將兩個資料表作關聯,再依條件需要,選取適當欄位(Fields)或資料組(Tuples) 之內容。 參考範例37

9-5-2 檢視表關聯   當碰到比較困難問題、且又不易以直接關聯法解答時,我們可以檢視表關聯法解答。先將多個資料表以適當條件建立檢視表,再依需要讀取檢視表之內容。 參考範例38

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

9-7 資料組變數(Tuple Variables)   有些查詢問題牽涉到資料組間之關係,非常困難而極不容易解答,但以資料組變數之輔助,則可輕易解答。 參考範例40

9-8 字串操作(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’,其中 ‘_ _ _’ = ‘t o w’。 5、右斜線 \:視為暫離符號(Escape),當字串中有特殊符號時,為了避免誤會,SQL提供右斜線 \ 作暫離,如 ‘10% of people’ 應改為 ‘10\% of people’。 參考範例41

9-9 排序操作(Ordering the Display of Tuples)   SQL語言提供指令 “ORDER BY” 指定某欄位(Attribute) 為排序索引欄位,依其中的內容執行資料組(Tuples) 排序(Ordering)。 參考範例42

第十章 集合運算(Set Operations)

10-1 簡介   所謂集合(Set) 是謂 “有一完善定義的範圍(well-defined List/Collection),在範圍內包涵適當數量之元素(Elements)”。 SQL語言提供集合操作功能,以指令 “聯集(union)”、“交集(intersect)、“差集(except)” 組合多個資料集合(Sets) 之運算。

10-2 集合之定義(Definitions of Set)   集合操作可概分四類運算方法:聯集運算(Union)、交集運算(Intersect)、相對餘補集運算(Relative Complement)、與絕對餘補集運算(Absolute Complement)。

10-3 聯集運算(Union Operation)   SQL聯集運算(Union Operation) 如同關聯代數(Relational Algebra) 之 “∪”,建立多個資料集合或運算式間之 “or” 關係,使用指令 “UNION”。 範例45參考

10-4 交集運算(Intersect Operation)   SQL交集操作(Intersect Operation) 如同關聯代數(Relational Algebra) 之 “∩”,建立多個資料集合或運算式間之 “and” 關係,使用指令 “INTERSECT”。 參考範例47

10-5 差集運算(Except/Minus Operation)   SQL差集操作(Except/Minus Operation) 如同關聯代數(Relational Algebra) 之 “−”,建立多個資料集合或運算式間之 “not” 關係,使用指令 “EXCEPT” 或 “MINUS”。 參考範例48

聚合函數(Aggregate Functions) 第十一章 聚合函數(Aggregate Functions)

11-1 簡介 聚合函數(Aggregate Functions) 是將多個輸入值(Input Value) 經過計算後回傳(Return) 一個結果值(Result Value)。當聚合式執行多組聚合運算時,是謂 “群組聚合(Group aggregation)”。   SQL語言內建5個聚合函數指令:(1) 平均值(Average) 指令avg,(2) 總和值(Total) 指令sum,(3) 計數值(Count) 指令count,(4) 最大值(Maximum) 指令max,(5) 最小值(Minimum) 指令min。 上述指令中,avg、sum必須用於數字(Number) 環境,其他指令除了數字外,亦可用於其他如字串(String) 環境。

11-2平均值(Average)   SQL語言提供指令 “AVG” 計算特定欄位(Field) 各資料組(Tuples) 之平均值(Average Value)。 參考範例49

11-3 總和值(Sum)   SQL語言提供指令 “SUM” 計算特定欄位(Field) 各資料組(Tuples) 之總和值(Total Sum Value)。 參考範例50

11-4 計數值(Count)   SQL語言提供指令 “COUNT” 計算特定欄位(Field) 各組資料元素(Elements) 之數量(Number)。 參考範例53

11-5 最大值(Maximum)   SQL語言提供指令 “MAX” 搜尋特定欄位(Field) 各組資料(Tuples) 之最大值(Maximum Value)。 參考範例56

11-6 最小值(Minimum)   SQL語言提供指令 “MIN” 搜尋特定欄位(Field) 各組資料(Tuples) 之最小值(Minimum Value)。 參考範例58

巢式子查詢(Nested Subqueries) 第十二章 巢式子查詢(Nested Subqueries)

12-1 簡介 在查詢句(Query Clauses) 中另設置子查詢句(Subquery Clauses),是謂 “巢式子查詢(Nested Subqueries)”,常使用之項目包括:子成員(Sub Membership)、成員測試(Test Set Membership)、比較設定(Make Set Comparisons)、關聯資料存在測試(Test for Existed Relations) 等。   於第十章、第十一章無法解決的問題,使用 “巢式子查詢(Nested Subqueries)” 却可輕易地解答。

12-2 子成員(Sub Membership) 在主查詢句(Query Clauses) 中、單純地另設置子查詢句(Subquery Clauses),可將子查詢句取得之結果,套諸於主查詢句使用,使問題邏輯簡易化。 回顧範例57,因於聚合運算,條件子句WHERE或HAVING均無法執行,此時我們可以子成員方式,設計範例60,巢式子句取代執行聚合指令 “MAX”。   參考範例60

12-3 成員測試(Test Set Membership)   SQL語言提供成員測試指令 “IN” 與 “NOT IN”,當子查詢句(Subquery Clauses) 存在於查詢句(Query Clause) 中時,使用 “IN”;當子查詢句不存在於查詢句中時,使用 “NOT IN”。回顧10-4節範例47,我們使用 “IN” 執行 “INTERSECT”; 回顧10-5節範例48,使用 “NOT IN” 執行 “EXCEPT/MINUS”。 參考範例62

12-4 比較設定(Make Set Comparisons)  如範例64、範例65,為了執行部分比較,SQL語言提供代名詞指令 “SOME” 及其比較指令 “< SOME”、“<= SOME”、“> SOME”、“>= SOME”、“= SOME” 、“<> SOME”。   如範例66,為了執行全部比較,SQL提供代名詞指令 “ALL” 及其比較指令 “< ALL”、“<= ALL”、“> ALL”、“>= ALL”、“= ALL” 、“<> ALL”。 參考範例64

12-5 關聯資料存在測試 (Test for Existed Relations) 在多個資料表(Relations) 之關聯架構下,SQL語言提供指令 “EXISTS” 與 “NOT EXISTS” 測試關聯資料之存在與否,當關聯子查詢句(Subquery Clauses) 存在於查詢句(Query Clause) 中時,使用 “EXISTS”;當關聯子查詢句不存在於查詢句中時,使用 “NOT EXISTS”。回顧範例62,我們可使用 “EXISTS” 執行 “INTERSECT”;回顧範例63,可使用 “NOT EXISTS” 執行 “EXCEPT/MINUS”。   參考範例67

交易管理(Transaction Management) 第五篇 交易管理(Transaction Management)

交易管理(Transaction Management) 是指藉管理一連串多個連續操作(Operations) 來完成一項邏輯工作(Logical Unit of Work) 之處理。例如銀行轉帳(Transfer of Money),從一個銀行帳戶(Account) 轉帳至另一帳戶,在邏輯上是一項工作,在操作上是一串多個連續操作之組合執行。   本篇將詳細討論交易處理(Transaction)、轉帳交易(Concurrency Control)、與資料重整(Problem Recovery)。

第十三章 交易處理(Transaction)

13-1 簡介 例如有一個銀行帳戶,哥哥到銀行臨櫃存錢,同一時間,弟弟則以提款卡到提款機取錢,如此同步並行,如果管理不當,資料將會失去一致性,帳戶餘額亦將會混亂錯誤。   當多個行程(Processes) 作交易並行時,行程之間將相互影響、將分享記憶體(Memory)、將分享資料(Data),此時往往因管理不周嚴,使得資料失去正確性(Inconsistency)。 因此、在多個行程作交易並行時,如何保持資料的緊密性(Atomicity)、一致性(Consistency)、區隔性(Isolation)、持久性(Durability),是交易處理的重要環節,本章將深入探討之。

13-2 交易處理概念(Transaction Concept) 交易處理(Transaction) 是執行一連串多個連續操作(Operations)、進而完成一個單元邏輯工作(Logical Unit of Work) 之處理,執行於BEGIN … END區段內。在未討論資料庫交易處理之前,我們可以一般高階語言程式為例,於C、begin … end為一工作單元,其間之程式碼為一個交易處理;於Java、{…} 為一工作單元,其間之程式碼為一個交易處理。   為確保資料的整體性(Integrity),資料庫系統應考量其交易處理要具有:緊密性(Atomicity)、區隔性(Isolation)、一致性(Consistency)、與持久性(Durability)。 參考範例69

13-3 交易處理狀態(Transaction States)

13-4 陰影複製法(Shadow Copy)   資料庫之修補機制(Recovery Management Component) 亦可支援緊密性(Atomicity)與持久性(Durability) 的執行。陰影複製法(Shadow Copy) 是一種常用且有效的方法。設定資料庫指標(Database Pointer) 指向資料庫

13-5 Java/Access交易處理指令 為了執行交易處理,Java/Access提供指令 “SET” 與方法程序setAutoCommit()、commit() 輔助執行。   當設定setAutoCommit(false) 時,系統將關閉自動執行模式,程式碼有執行描述,但無實際執行動作;當逢commit()時,將描述的所有程式碼一併快速執行。因此、setAutoCommit(false) 可視為Begin Transaction,commit() 可視為End Transaction,交易行程(Transaction Processes) 執行於兩者之間。當設定setAutoCommit(true) 時,解除交易處理環境,系統恢復正常執行模式。 參考範例70

轉帳交易(Concurrency Transaction) 第十四章 轉帳交易(Concurrency Transaction)

14-1 簡介   轉帳交易是由2組執行緒並行作業,如13-2節範例69、一組從存款P減去交易額,另一組從存款Q增加交易額。為了完成轉帳交易作業,我們需先了解如何建立資料庫輔助記憶區、與資料庫資料輔助記憶區之資料複製。

14-2 輔助記憶區(Auxiliary Areas)   於資料表增設特定輔助欄位區(Auxiliary Area Fields) 與輔助資料組區(Auxiliary Area Tuples),用於儲存特定輔助資料,以輔助執行轉帳交易,該特定欄位區與資料組區是謂 “輔助記憶區(Auxiliary Areas)”。 參考範例71

14-3 記憶區資料複製 (Copies in Auxiliary Areas)   為了解決問題,需要將資料表內某處之資料複製到他處,SQL/Access提供指令函數DLookup(expr, domain [, criteria] ) 執行資料庫記憶區資料複製(Copies in Auxiliary Areas),其中expr為欄位回傳值、domain為資料表名稱、criteria為條件。 參考範例72

14-4 轉帳交易(Concurrency Transaction)   在了解如何建立資料庫輔助記憶區、與資料庫資料輔助記憶區之資料複製之後,配合SQL/Access指令,執行轉帳交易(Concurrency Transaction) 操作就流暢得多, 參考範例73

故障修補(Recoverability) 第十五章 故障修補(Recoverability)

15-1 簡介   於13-3節我們曾討論交易處理之執行狀態(States),如圖13-3,當交易處理無法繼續正常執行時,將進入失敗狀態(Failed State),再進入放棄狀態(Aborted State),此時系統將交易處理倒退(Roll Back) 至起始狀態,同時資料庫恢復至交易處理前之儲存內容,準備重新啟動(Restart)、或取消(Kill) 該交易處理。

15-2 SQL/Access修補指令 為了執行交易處理之修補,SQL/Access提供方法程序rollback() 執行倒退操作,在未執行commit() 更新資料庫之前,如果執行rollback(),將可導引交易處理倒退至起始狀態,準備重新啟動(Restart)、或取消(Kill) 該交易處理。 參考13-5節範例70,設計範例74,假設在存款交易途中發生錯誤,使用方法程序rollback() 導引交易處理倒退至起始狀態,並未更新任何資料庫之資料。   參考範例74

15-3 修補指令條件應用 如前節,在交易處理過程中,當系統遭到問題而無法繼續時,可利用rollback() 倒退至起始點,準備重新啟動(Restart)、或取消(Kill) 該交易處理。   我們亦可在程式中設定特定條件,當條件事件發生時,rollback() 發生作用,倒退至起始點,準備重新啟動(Restart)、或取消(Kill) 該交易處理;同理當條件事件不發生時,交易處理順利進行。設計範例75,增設如果存款額不足不得提款之條件。 參考範例75

15-4 條件修補指令與轉帳交易   於前兩節,僅涉及存款與提款的問題,操作步驟較為簡易,本節將參考14-4節範例73,設計範例77,使用資料庫輔助記憶區、與條件修補指令,執行轉帳交易。 參考範例77

第六篇 實例應用(Applications)

本書應用範例是屬於輔助型基礎網站資料庫,重點在網路遠端作資料庫操作,用以輔助精美網頁資料庫之應用,有關精美網頁資料庫之設計,筆者於本系列叢書第六冊 “Servlet 網站與資料庫”、第七冊 “JSP網站與資料庫” 另作詳細介紹。   於前述各篇,已詳細介紹如何遠端操作資料庫,本篇將就其精義,設計四組應用實例,讀者亦可以此為基幹,開發自己需要的系統。

第十六章 甄試與查榜系統(Exam System)

16-1 簡介 行政作業系統之設計,通常包括資料庫設計、與應用程式設計。有別於一般在本機設計之模式,為了更寬廣更方便,本章強調從網路遠端作操作應用,範例架構為: (1) 於Server端手動建立資料庫Exam_ch16.accdb,並作ODBC設定; (2) 設計資料表建立/輸入程式Server_makeTable.java、 Client_makeTable.java,於Client端經由網路建立考生資料表 (Student_Info)、考生成績表(Student_scores),前者用於考生報名 時填寫基本資料,後者用於登記考生成績。 (3) 於考生成績表(Student_scores) 計算總成績。 (4) 建立檢視表Student_view列出成績單內容。 (5) 設計查詢應用程式Server_QueryTable.java、Client_QueryTable.java, 於Client端讀取檢視表Student_view之成績單內容。

16-2 資料庫建立 (Establish Database)   如前述,本系列叢書各冊,在眾多資料庫中,選擇Access2007為範例資料庫,因其方便且功能不輸其他者,凡有Office的電腦,開機即可使用,無需另添購軟體。

16-3 資料表建立/輸入程式(Establish/Input Programs) 一般行政系統之資料表,都是由軟體工程師在本機以手動建立資料表,由系統管理員在本機輸入資料,為了使作業更寬、更廣、更方便,本節設計Server/Client資料表建立/輸入程式,幫助軟體工程師可在任何地點、任何時間,從Client端經網路對Server端的資料庫建立資料表;幫助系統管理員從Client端經網路對資料表輸入資料。   參考第六章,於範例79、設計Server_makeTable.java、Client_makeTable.java,建立/輸入資料表之Java網路程式。

16-4 資料表建立(Establish Tables) 最簡單的甄試查榜系統至少需要2組資料表:(1)考生資料表(Student_Info)、(2)考生成績表(Student_scores)。當考生報名甄試填寫基本資料時,需使用考生資料表(Student_Info);當試卷批改後登記成績時,需使用考生成績表(Student_score)。   參考第六章,於範例80、建立考生資料表(Student_Info),於範例81、建立考生成績表(Student_score)。

16-5 資料表輸入 (Input Tables) 當考生報名甄試時,將其基本資料輸入考生資料表(Student_Info);當試卷批改後,將其成績登記至考生成績表(Student_Score)。本章範例輸入內容將摘錄自 “乙級軟體證照試題” 之部份內容。   參考第七章,於範例82、輸入考生資料表(Student_Info),於範例83、輸入考生成績表(Student_Score)。

16-6 總成績計算 (Calculate The Sum)   當輸入成績之後,應將各科成績加總,計算出總成績,以為錄取之依據。參考第十四章,於範例84、於考生成績表(Student_Score) 將各科成績加總,計算出總成績。

16-7 檢視表建立(Establish View) 一個有效率的機構總是依賴一些分工的組織,資料庫也是一樣,以多個不同功能的資料表奠定分工的基礎。如本例、在不同的階段,使用不同的資料表分工,當考生報名時,使用考生資料表(Student_Info) 填寫基本資料;當試卷批改後,使用考生成績表(Student_score) 登記成績。 參考第八章,於範例85、連接Student_info與Student_score,取欄位 “准考證號碼”、“姓名”、“地址”、“總成績” 建立檢視表Student_view。

16-8 查詢程式(Query Programs) 如16-3節之資料表建立與輸入程式,本節設計Java Server/Client查詢程式,從Client端查詢Server端資料表(Data Table) / 查詢表(Query Table) / 檢視表(View) 之內容。   參考第九章,於範例86設計程式Server_QueryTable.java、Client_QueryTable.java,用於遠端資料表查詢。

16-9 成績查詢(Result Query) 成績查詢可分為靜態成績查詢(All Query)、與動態查詢(Select Query),前者由管理員作全體考生之成績查詢,後者由考生對個人成績作查詢。   本書為基礎網站資料庫應用,重點在網路遠端操作資料庫,並非作精美網頁應用,在功能上是輔助精美網頁應用,將於本系列叢書 “Servlet網站資料庫”、與 “JSP網站資料庫” 詳細介紹。故本節僅在基礎架構上作應用。 參考範例87

16-10 綜合整理 本章應用範例是屬於輔助型基礎網站資料庫,重點在網路遠端作資料庫操作,用以輔助精美網頁資料庫之應用。本章甄試查榜系統之設計步驟為:   1、建立資料庫:於本機以手動建立資料庫,並作ODBC設定。 2、設計資料表建立/輸入程式:設計Java Server/Client程式,用以遠端建立/輸入資料表。 3、建立資料表:使用項2之Java Server/Client程式,遠端建立資料表。 4、輸入資料表:使用項2之Java Server/Client程式,遠端輸入資料表。 5、總成績計算:於成績資料表作總成績計算。 6、建立檢視表:視需要欄位,建立檢視表。 7、設計查詢程式:設計Java Server/Client程式,用以遠端查詢檢視表。

16-11 系統實例應用   當本章系統建置完成後,本節將以實例導引使用此系統。只要輸入考生之成績,系統將自動整合計算出成績單。 參考應用範例

學生操行成績電腦化系統 (Student Conduct Ranking System) 第十七章 學生操行成績電腦化系統 (Student Conduct Ranking System)

17-1 簡介 本章範例為學校學生操行成績電腦化系統,管理員於網路上輸入當日曠缺課資料及學期導師評分,系統即自動計算學生個人操行成績。本章強調從網路遠端操作應用,範例架構為: (1) 於Server端手動建立資料庫Exam_ch17.accdb,並作ODBC設定; (2) 設計資料表建立/輸入程式Server_makeTable.java、Client_makeTable.java,於Client端經由網路建立學生基礎資料表(Student)、曠缺課記錄表(Record)、導師評分表(Conduct)。當學生入學填寫基本資料時,使用學生基礎資料表(Student);當每日登記學生曠缺時數時,使用曠缺課記錄表(Record);當每學期導師評分時,使用導師評分表(Conduct)。 (3) 建立4組檢視表view_曠缺總時數、view_全體曠缺總時數、view_扣分成績、view_操行成績單,計算操行成績。每曠課1節扣1分;每事假12節扣1分;公假、病假不扣分。操行成績=導師評分-扣分。 (4) 檢視表view_操行成績單,列出成績單內容。 (5) 設計查詢應用程式Server_QueryTable.java、Client_QueryTable.java,於Client端讀取檢視表view_操行成績單之內容。

17-2資料庫建立 (Establish Database)   如前述,本系列叢書各冊,在眾多資料庫中,選擇Access2007為範例資料庫,因其方便且功能不輸其他者,凡有Office的電腦,開機即可使用,無需另添購軟體。

17-3 資料表建立/輸入程式 (Establish/Input Programs)   如16-3節,設計Server/Client資料表建立/輸入程式,從Client端經網路對Server端的資料庫建立資料表、輸入資料。 參考範例89

17-4 資料表建立(Establish Tables) 最精簡的學生操行成績系統至少需要有3組資料表:(1)學生基礎資料表(Student)、(2)曠缺課記錄表(Record)、(3)導師評分表(Conduct)。當學生入學填寫基本資料時,需使用學生基礎資料表(Student);當每日登記學生曠缺時數時,需使用曠缺課記錄表(Record);當每學期導師評分時,需使用導師評分表(Conduct)。   參考第六章,於範例90、建立學生基礎資料表(Student),於範例91、建立曠缺課記錄表(Record),於範例92、建立導師評分表(Conduct)。

17-5 資料表輸入(Input Tables)   使用學生基礎資料表(Student) 入學時填寫基本資料;使用曠缺課記錄表(Record) 每日登記學生曠缺時數;使用導師評分表(Conduct) 每學期導師評分。 參考第七章,於範例93、輸入學生基礎資料表(Student),於範例94、輸入曠缺課記錄表(Record),於範例95、輸入導師評分表(Conduct)。 (本章範例內容部分摘錄自 “軟體應用乙級證照試題”)

17-6 成績計算(Calculate Scores)   於17-5節、我們已完成輸入學生基礎資料表(Student)、曠缺課記錄表(Record)、導師評分表(Conduct)。本節將以這3個資料表之內容,關聯建立4個檢視表計算操行成績、與列印成績單。

17-6-1 曠缺總時數   參考17-5節範例94,資料表Record記錄2003/10/01至2003/10/13學生曠缺情形,本節將以此資料建立檢視表 “view_曠缺總時數”,計算在這段期間學生之個人曠缺總時數。 參考範例96

17-6-2 全體曠缺總時數   於前節(17-6-1)、僅考量有曠缺記錄的學生資料,在檢視表view_曠缺總時數內,沒有顯示無曠缺記錄學生的資料,致無法製作全體學生之操行成績。本節建立檢視表 “view_全體曠缺總時數”,將無曠缺記錄學生之曠缺時數以0計算。 參考範例97

17-6-3 扣分成績   於前節(17-6-2節)、已計算出全體學生之個人曠缺總時數,本節將建立檢視表 “view_扣分成績” 計算扣分成績。每曠課1節扣1分;每事假12節扣1分;公假、病假不扣分。 參考範例98

17-6-4 操行成績 操行成績之計算為:“導師評分” 減去 “扣分”,亦即需要先關聯 “Conduct與view_扣分成績”,再取 “導師評分-扣分” 之值。   為了節省操作步驟,可關聯 “Student、Conduct與view_扣分成績”,建立檢視表 “view_操行成績單” 列出欄位為 “學號、姓名、家長、地址、操行成績” 之成績單,可依家長姓名與地址,將成績單寄給家長。 參考範例99

17-7 查詢程式(Query Programs) 本節設計Java Server/Client查詢程式,從Client端查詢Server端之資料表(Data Table) / 查詢表(Query Table)/ 檢視表(View) 內容。   參考16-8節,設計程式Server_QueryTable.java、Client_QueryTable.java,用於遠端資料表查詢。 參考範例100

17-8 成績查詢(Result Query)   如16-9節、成績查詢可分為靜態成績查詢(All Query)、與動態成績查詢(Select Query),前者由管理員作全體學生之成績查詢,後者由學生對個人成績作查詢。 參考範例101

17-9 綜合整理 本章應用範例是屬於輔助型基礎網站資料庫,重點在網路遠端作資料庫操作,用以輔助精美網頁資料庫之應用。本章學生曠缺課系統之設計步驟為:   1、建立資料庫:於本機以手動建立資料庫,並作ODBC設定。 2、設計資料表建立/輸入程式:設計Java Server/Client程式,用以遠端建立/輸入資料表。 3、建立資料表:使用項2之Java Server/Client程式,遠端建立資料表Student、Record、Conduct,分別用於填寫基本資料、登記學生曠缺時數、導師評分。 4、輸入資料表:使用項2之Java Server/Client程式,遠端輸入資料表。 5、成績計算:建立檢視表view_曠缺總時數、view_全體曠缺總時數、view_扣分成績、view_操行成績單,計算操行成績。 6、設計查詢程式:設計Java Server/Client程式,用以遠端查詢檢視表view_操行成績單,讀取操行成績。

17-10 系統實例應用 當本章系統建置完成後,本節將以實例導引使用此系統。只要輸入學生之新曠缺記錄,系統將自動整合計算出操行成績單。   當本章系統建置完成後,本節將以實例導引使用此系統。只要輸入學生之新曠缺記錄,系統將自動整合計算出操行成績單。 參考應用範例

經銷公司人力成本考核系統 (Evaluation System for the Cost of Salesmen) 第十八章 經銷公司人力成本考核系統 (Evaluation System for the Cost of Salesmen)

18-1 簡介 一家經銷公司之榮衰,直接繫於其推銷業績成效,而業績成效,則有賴公司推銷員(Salesmen) 之努力、與能力成本(Cost)。本篇範例即是將公司推銷人員業務能力、成本、作電腦化統計及追踪,期盼隨時能對公司之推銷員作適時適地之了解,進而作聘用晉升之參考。   推銷員在公司的價值是依其能創造多少有意義的業績而定,所謂有意義的業績是 (業績金額/薪資金額) 之比例,亦即如公式 (績效比例 = 銷售盈利 / (未休假獎金 + 加班費 + 月薪資)),績效比例愈高者對公司的供獻愈大,可作為考績升遷的參考。

1、建立資料庫檔案Company_ch18.accdb: (1) 本機管理員建立靜態資料表Employee(員工資料)、Product(產品資料);建立動態資料表Leave(請假記錄)、Overtime(加班時數記錄)、Sales(銷售記錄)。 (2) 由本機管理員於本機當地填寫或修改靜態資料表。 (3) 由網路管理員於網路新增或修改動態資料表。

2、建立計算檢視表: (1) 計算員工休假日數、及未休假獎金。 (2) 計算員工加班時數、及加班費。 (3) 計算員工銷售業績、銷售成本、銷售盈利。 (4) 計算員工績效比例。

3、網路查詢: (1) 網路查詢未休假獎金。 (2) 網路查詢加班費。 (3) 網路查詢績效比例。

18-2資料庫建立 (Establish Database)   如前述,本系列叢書各冊,在眾多資料庫中,選擇Access2007為範例資料庫,因其方便且功能不輸其他者,凡有Office的電腦,開機即可使用,無需另添購軟體。

18-3資料表建立/輸入程式 (Establish/Input Programs) 如17-3節,設計Server/Client資料表建立/輸入程式,從Client端經網路對Server端的資料庫建立資料表、輸入資料。   參考17-3節,於範例103、設計Server_makeTable.java、Client_makeTable.java,建立/輸入資料表之Java網路程式。 參考範例103

18-4 靜態資料表建立(Establish Static Tables) 所謂靜態資料表,是一旦建立後,將很少再更動,亦即於久久更動時,直接到機房電腦更新即可,不必浪費網路資源。但本書宗旨是在網路遠端操作資料庫,故仍使用18-3節之Server_makeTable.java、Client_makeTable.java建立/輸入資料表,本章範例靜態資料表有:員工資料表Employee、產品資料表Product。   參考第六章,於範例104、建立員工資料表Employee,於範例105、建立產品資料表Product。

18-5 靜態資料表輸入(Input Static Tables)   使用員工資料表Employee填寫員工基本資料;使用產品資料表Product登記產品資料表。 參考第七章,於範例106、輸入員工資料表Employee,於範例107、輸入產品資料表Product。 (本章範例內容部分摘錄自 “軟體應用乙級證照試題”)

18-6 動態資料表建立 (Establish Dynamic Tables) 一家公司之銷售情況、人員作業,瞬息萬變,須搶時間、搶方便,故應設計為由網路上更新,本章將員工請假記錄Leave、員工加班時數記錄Overtime、員工銷售記錄Sales等列為動態資料。   與前節之靜態資料不同,一旦建立後,將很少再更動,亦即於久久更動時,直接到機房電腦更新即可,不必浪費網路資源。 參考第六章,於範例108、建立員工請假記錄Leave,於範例109、建立員工加班時數記錄Overtime,於範例110、建立員工銷售記錄Sales。

18-7 動態資料表輸入 (Establish Dynamic Tables) 使用員工請假記錄Leave紀錄員工請假資料;使用員工加班時數記錄Overtime紀錄員工加班資料;使用員工銷售記錄Sales紀錄員工銷售資料;。   參考第七章,於範例111、輸入員工請假記錄Leave;於範例112、輸入員工加班時數記錄Overtime;於範例113、輸入員工銷售記錄Sales。 (本章範例內容部分摘錄自 “軟體應用乙級證照試題”)

18-8 計算未休假獎金 各項基本資料檔案建置完成後,管理員即可視作業需求,於資料庫設計各類查詢表,計算需要的資料。本節將建立檢視表 “view_未休假天數”、“view_未休假獎金” 計算每位員工10月份之未他假獎金。計算公式為: 未休假天數 = 核准休假天數 – 休假天數 (如範例114,其中核准休假天數包括周六、日)   未休假獎金 = Int((目前月薪/28) * 未休假天數 + 0.5) (如範例115,取四捨五入整數值,其中設定28為每月天數) 參考範例114

18-9 計算加班費 本節建立檢視表 “view_加班費”,關聯資料表Employee與Overtime,計算每位員工10月份之加班費。計算公式為: 加班費 = (目前月薪資 / 224) * 1.5 * 加班時數 (如範例116,其中224為每月工作時數,計算自每日8小時乘以每月28天;其中1.5是指加班費為平日工時費之1.5倍)   參考範例116

18-10 計算銷售盈利   本節建立檢視表 “view_銷售業績”、“view_銷售成本”、“view_銷售盈利” 計算每位員工10月份為公司賺到的盈利。計算公式為: 銷售業績 = 單價 * 數量 (如範例117) 銷售成本 = 成本 * 數量 (如範例118) 銷售盈利 = 銷售業績 - 銷售成本 (如範例119) 參考範例117

18-11 計算績效比例 本節建立檢視表 “view_績效比例” 計算每位員工10月份之績效比例。計算公式為: 參考範例120   本節建立檢視表 “view_績效比例” 計算每位員工10月份之績效比例。計算公式為: 績效比例 = 銷售盈利/(未休假獎金+加班費+月薪資) (如範例120,績效比例愈高、貢獻愈大) 參考範例120

18-12查詢程式(Query Programs) 公司人事部門為了考核員工績效,需要查詢所有員工之績效比例;員工本身為了了解個人能力,也需要查詢個人績效比例。   本節設計Java Server/Client查詢程式,從Client端查詢Server端之資料表(Data Table) / 查詢表(Query Table)/ 檢視表(View) 內容。 參考範例121

18-13 網路查詢績效比例   如17-8節、本節設計Server/Client查詢程式,作靜態績效比例查詢(All Query)、與動態績效比例查詢(Select Query),前者由人事部門作全體員工之績效比例查詢,後者由員工作個人績效比例查詢。 參考範例122

18-14 綜合整理 本章應用範例是屬於輔助型基礎網站資料庫,重點在網路遠端作資料庫操作,用以輔助精美網頁資料庫之應用。本章經銷公司人力成本考核系統之設計步驟為:   1、建立資料庫:於本機以手動建立資料庫,並作ODBC設定。 2、設計資料表建立/輸入程式:設計Java Server/Client程式,用以遠端建立/輸入資料表。 3、建立資料表:使用項2之Java Server/Client程式,遠端建立靜態資料表Employee(員工資料)、Product(產品資料);建立動態資料表Leave(請假記錄)、Overtime(加班時數記錄)、Sales(銷售記錄)。 4、輸入資料表:使用項2之Java Server/Client程式,遠端輸入資料表。 5、績效計算:(1) 計算員工休假日數、及未休假獎金。(2) 計算員工加班時數、及加班費。(3) 計算員工銷售業績、銷售成本、銷售盈利。(4) 計算員工績效比例。 6、設計查詢程式:設計Java Server/Client程式,用以遠端查詢檢視表view_績效比例,用以升遷考核參考。

18-15 系統實例應用   當本章系統建置完成後,本節將以實例導引使用此系統。只要輸入員工之請假記錄Leave、加班時數記錄Overtime、銷售記錄Sales,系統將自動整合計算出績效比例。 參考應用範例

倉儲盤點系統 (Storage and Inventory System) 第十九章 倉儲盤點系統 (Storage and Inventory System)

19-1 簡介 本章範例為設計一倉儲貨品盤點網路電腦化系統,使用者僅需在網路上執行:(1) 在銷售上,於系統輸入賣出貨品名稱及其銷售量;(2)在補貨上,於系統輸入補充貨品名稱及其到補貨量。其他如整理、計算、統計等繁雜工作,均由系統自動處理。

1、建立資料庫檔案Store_ch19.accdb: (1) 本機管理員建資料表Product(產品資料)、Sales(銷售記錄)、Arrival(補貨記錄)。 (2) 由網路管理員於網路新增或修改資料表。

2、設計邏輯: (1)、系統資料內容有:編號、產品名稱、基低量、高限量、實儲量、銷售量、訂貨量、存貨量。 (2)、在每一定時間期間統計各產品之銷售量。 (3)、a、存貨量 = 實儲量 – 銷售量。 b、當存貨量少於基低量時,訂補進貨。 訂貨量 = 高限量 – 存貨量。 (4)、盤點儲貨量:將上述之存貨量盤點載入儲貨量。 (5)、補貨點收入帳:運到之實際補貨量、可能與訂貨量不儘一致,故須一件一件清點入帳。 設計一應用程式執行: a、清點每項貨品之到貨量、並輸入之。 b、新實儲量 = 到貨量 + 存貨量。

19-2資料庫建立 (Establish Database)   如前述,本系列叢書各冊,在眾多資料庫中,選擇Access2007為範例資料庫,因其方便且功能不輸其他者,凡有Office的電腦,開機即可使用,無需另添購軟體。

19-3 資料表建立/輸入程式 (Establish/Input Programs)   如18-3節,設計Server/Client資料表建立/輸入程式,從Client端經網路對Server端的資料庫建立資料表、輸入資料。 參考18-3節,於範例124、設計Server_makeTable.java、Client_makeTable.java,建立/輸入資料表之Java網路程式。

19-4資料表建立(Establish Tables) 最精簡的倉儲盤點系統至少需要有3組資料表:(1)Product(產品資料),登錄店內現有產品之資料;(2)Sales(銷售記錄),登錄賣出產品之資料(3)Arrival(到貨記錄),登錄廠商實際送達之產品資料。   參考第六章,於範例125、建立產品資料表Product,於範例126、建立銷售記錄Sales,於範例127、建立到貨記錄Arrival。

19-5資料表輸入(Input Tables) 使用產品資料表Product登錄店內現有產品之資料;使用銷售記錄Sales登錄賣出產品之資料;使用到貨記錄Arrival登錄廠商實際送達之產品資料。   參考第七章,於範例128、輸入產品資料表Product,於範例129、定期輸入銷售記錄Sales,於範例130、輸入到貨記錄Arrival。 (本章範例內容部分摘錄自 “軟體應用乙級證照試題”)

19-6 計算存貨量   各項基本資料檔案建置完成後,管理員即可視作業需求,於資料庫設計各類查詢表,計算需要的資料。本節將建立檢視表 “view_存貨量” 計算店內貨品存量。計算公式為: 存貨量 = 實儲量 – 銷售量 (如範例131)

19-7 計算訂貨量 本節將建立檢視表 “view_訂貨量” 計算要求廠商之補充量,當存貨量少於基底量時,訂補進貨。計算公式為:   本節將建立檢視表 “view_訂貨量” 計算要求廠商之補充量,當存貨量少於基底量時,訂補進貨。計算公式為: 訂貨量 = 高限量 – 存貨量 (如範例132)

19-8 讀取訂貨單 如前節,自動建立訂貨量,廠商只需於遠端定期讀取 “view_訂貨量” 之內容,準備補充貨品送達經銷商店販賣。   如前節,自動建立訂貨量,廠商只需於遠端定期讀取 “view_訂貨量” 之內容,準備補充貨品送達經銷商店販賣。 參考範例133

19-9 點收補貨入帳   當廠商了解訂貨量內容之後,即可準備貨源產品送到經銷店販賣,運到之實際補貨量、可能與訂貨量不儘一致,故須一件一件清點入帳,點收入資料表Arrival。 參考範例130

19-10 盤點實儲量 經過新到貨補充後,本節將建立檢視表 “view_新實儲量” 計算店內實際儲貨量。計算公式為:   經過新到貨補充後,本節將建立檢視表 “view_新實儲量” 計算店內實際儲貨量。計算公式為: 新實儲量 = 到貨量 + 存貨量 (如範例132) 參考範例134

19-10 盤點實儲量 經過新到貨補充後,本節將建立檢視表 “view_新實儲量” 計算店內實際儲貨量。計算公式為:   經過新到貨補充後,本節將建立檢視表 “view_新實儲量” 計算店內實際儲貨量。計算公式為: 新實儲量 = 到貨量 + 存貨量 (如範例134)

19-11 綜合整理 本章應用範例是屬於輔助型基礎網站資料庫,重點在網路遠端作資料庫操作,用以輔助精美網頁資料庫之應用。本章倉儲盤點系統之設計步驟為:   1、建立資料庫:於本機以手動建立資料庫,並作ODBC設定。 2、設計資料表建立/輸入程式:設計Java Server/Client程式,用以遠端建立/輸入資料表。 3、建立資料表:使用項2之Java Server/Client程式,遠端建立產品資料表Product、銷售記錄Sales、到貨記錄Arrival。 4、輸入資料表:使用項2之Java Server/Client程式,遠端輸入資料表。 5、資料計算:(1)計算存貨量、(2)計算訂貨量、(3)登錄到貨量、(4)計算實儲量。 6、設計查詢程式:設計Java Server/Client程式,用以遠端查詢檢視表view_訂貨量,用以提供補貨資料。

19-12 系統實例應用 當本章系統建置完成後,本節將以實例導引使用此系統。只要輸入銷售記錄Sales,系統將自動整合計算出訂貨單。   參考應用範例