2018年12月13日 星期四

Java SE 入門教學 - 簡單操作資料庫 - 環境架設

更新時間:12/13/2018

前言

有些資料執行完畢就可以丟掉,但有些資料必須保存,以利下一次的使用,我們可以使用序列化與反序列化將資料儲存在硬碟中,但資料多後,程式碼需要控制流程,又要管理資料,這會變得很難維護。

在紙筆發明前,我們的老祖宗只能使用我們的大腦記住所有的資料同時又必須思考要做什麼事情。在紙筆發明後,我們可以將一些資訊寫下來,這樣我們的老祖宗可以專心思考要做什麼事情,甚至可以創作一些詩詞廣為流傳,例如《江城子》蘇軾


近代,在電腦發明前,我們可能使用"資料夾"的方式來保存世界上所有國家的資料。


在電腦發明後,我們可能使用這樣的工作表軟體紀錄資料。


使用這種工作表來儲存國家資料,當然比用卡片好多了,尤其是想要尋找某個國家的資料,然後修改它的人口數量。雖然方便多了,不過在你查詢國家資料時,可能會有這樣的問題:各表單間還是不能連貫,那跟一個一個檔案分開也沒啥區別了



一、資料庫系統簡介

資料庫系統 (Database System) 是電腦化的資料儲存系統,使用者則透過各種應用程式來存取其中的資料。

資料庫管理系統(DataBase Management System, DBMS),例如:Microsoft SQL Server、Oracle、SyBase、Informix、MySQL、PostgreSQL ... 等。

資料庫管理系統是一種軟體程式,它主要的工作就是儲存與管理資料,如果你把這個軟體程式安裝在一台電腦中,這台電腦就會稱為「資料庫伺服器」:


1.1 資料階層:資料一共分成六個階層:位元(Bit)、位元組(Byte, Character)、欄位(Field, Column, Attribute)、紀錄(Record, Row, Tuple)、檔案(File, Table, Relation)和資料庫(Database)。

1.1.1) 欄位(Field, Column, Attribute) 是由 1 或多個位元組或字元組成,屬於相同性質資料組成的資料項目,以欄位名稱來識別。例如:
  一組字元組成的字串"Joe"和"Chen",可以使用欄位名稱"姓名"來識別,或數值33、29,可以使用欄位名稱"年齡"來識別等。

1.1.2) 記錄(Record, Row, Tuple) 是相關欄位的集合,記錄的欄位是儲存「實體(Entity)」的一些「屬性(Attributes)」值,實體是用來描述真實世界的東西。例如:
  記錄為學生的詳細資料。如姓名、年齡、地址等欄位的值。

1.1.3) 檔案(File, Table, Relation) 就是相關聯記錄的集合,檔案是以檔案名稱儲存在電腦磁碟。程式設計者可以撰寫電腦程式使用檔案名稱來開啟和存取檔案內容的記錄,其相關操作如下所示:
  讀取紀錄
  更新紀錄
  新增紀錄
  刪除紀錄

1.1.4) 資料庫(Database) 是相關檔案的集合,包括資料和中繼資料。通常這些資料是使用不同檔案來分開儲存。
  中繼資料(Meta-data) 是用來描述資料庫儲存的是什麼樣的資料(data about data, 資料的資料),定義資料列(Row)或記錄(Record)型態,也就是定義各資料欄(Columns)的型態。

1.2 資料庫系統的優點

資料庫管理系統擁有多種程式模組:查詢處理模組、交易管理和回復處理等,可以進行資料庫的資料管理,將實際資料庫結構和存取都隱藏在資料庫管理系統之後,如此可以達到:

  • 多人使用,資料共享。
  • 資料一致和最少的資料重複,資料不重複出現於多個檔案。
  • 資料獨立,與程式無關。
  • 改進資料完整性問題,如:不可為負值的銀行帳戶。
  • 更加的資料安全管理,權限控管。
  • 同步與交易管理,資料正確性確保。
  • 資料備份與回復。

1.3 資料庫環境的四大組成元件:資料(Data)、軟體(Software)、硬體(Hardware)與使用者(User)。


1.3.1) 資料(Data)

永續化資料(Persistent Data):

在企業或組織的資料庫,其儲存的大量資料並非是一種短暫儲存的暫時資料,而是一種長時間存在的資料,稱為永續化資料,這些資料是維持企業或組織正常運作的重要資料。

系統目錄(System Catalog, Data Dictionary):

資料庫結構的定義資料,它是用來描述資料本身,也稱為中繼資料(meta data或data about data),系統目錄的主要用途是用來提供維護資料庫所需的資訊。

交易記錄(Transaction Log):

記錄使用者在什麼時間下達什麼指令或執行什麼操作。對於資料庫管理師來說,就是十分重要的參考資訊。

索引資料(Indexes):

將資料庫中特定屬性的資料預先進行排序或整理建立索引,並且提供「指標」指向資料庫真正儲存資料的位置。索引資料的目的是為了在資料庫儲存的龐大資料中能夠更快速的找到資料。

1.3.2) 軟體(Software)

資料庫管理系統(DBMS):

為一組程式模組,用來定義、處理和管理資料庫的資料。

資料庫管理系統語言(DBMS Languages):

資料定義語言(Data Definition Language,DDL)用來定義資料庫的結構。
資料操作語言(Data Manipulation Language,DML)可以對資料庫的資料做查詢、新增、修改與刪除等操作。

開發工具(Development Tools):

用來建立資料庫和開發應用程式。例如:資料庫設計工具、資料庫開發工具或程式語言的整合開發環境,它可以幫助資料庫設計師建立資料庫結構和程式設計者快速建立應用程式。如: Oracle Developer 、Java、PowerBuilder等等。

應用程式(Application Program):

程式設計師(Program Designer, PD)所開發的專屬軟體。使用者可透過應用程式所提供的介面,很容易的操作資料庫裡的資料。如:選課系統、人事系統等等。

1.3.3) 硬體(Hardware)

安裝資料庫相關軟體的硬體設備,包含:主機(CPU、記憶體和網路卡等)、磁碟機、磁碟陣列、光碟機、磁帶機和備份裝置。
整個資料庫系統的硬體處理架構依其運算方式,可以分為:集中式或分散式的架構。

1.3.4) 使用者(User)

終端使用者(End Users):

主要工作是查詢或更新資料庫,或是存取資料庫以產生所需的報表。

資料庫設計師(Database Designers):

主要的工作是建立資料庫結構,判斷哪些資料需要儲存在資料庫,和使用什麼樣的結構來儲存這些資料。

資料庫管理師(Database Administrator, DBA):

需要對整個系統十分了解,負責管理整個資料庫環境,與資料庫設計的溝通協調。

系統分析師(System Analyst, SA)/系統設計師(System Designer, SD):

系統分析師依據終端使用者的需要,主要是指初級使用者(Naive orParametric Users)的需要來製定資料庫應用程式的規格與功能。

以上是資料庫的簡單介紹。資料庫是一門很專業的學問,如果要更深入了解資料庫,必須要花許多時間閱讀大量的資料,瞭解整個架構與用法。


二、下載開源的 MariaDB 資料庫與 Java 連接器

在 1.3 的架構中,我們使用 Java 開發,屬於軟體中的應用程式,也就是程式設計師(Program Designer, PD)!但因為自己在學習,所以必須要自己安裝資料庫自己測試,同時也要會使用 Structrued Query Language(SQL),對於 Java 新手,這部分的學習曲線會很陡。為了要連線資料庫,所以必須要有對應的驅動程式才能連線,我們將會下載 MariaDB 資料庫與 mariadb-java-client-*.jar 驅動程式,並使用 NetBeans IDE 工具開發。

2.1 MariaDB 安裝與設定:請參閱 安裝 MariaDB 文章。

2.2 下載 MariaDB Connector For Java

▼ 進入 MariaDB 網站,點擊 "Download"

▼ 點擊 "Connectors",Product 選擇 "Java 8 connector",最後選擇 "Download"

▼ 如果沒有自動啟動下載,請點擊 "download" 再次下載

2.3 NetBeans IDE 安裝與設定:請參閱 安裝 NetBeans IDE 文章。

2.4 在 NetBeans 建立一個專案,並導入"mariadb-java-client-2.3.0.jar"

首先建立一個 「MyDatabase」 專案。如果還不知道怎麼使用 NetBeans IDE,請參閱 第一次使用與設定 NetBeans IDE 文章,此篇文章建立的專案名稱為「FirstProject」,請更改為「MyDatabase」。

專案建立好後,我們需要在專案內建立一個資料夾「lib」,專門放函式庫。這樣的好處是可以使用相對路徑讀取函式庫,如果要移動專案也不會因為路徑不同,而無法取得函式庫。


▼ 在 Projects 視窗下,對著專案名稱按右鍵,增加一個資料夾

▼ 資料夾的名稱命名為"lib"

▼ 複製 2.2 下載的 "mariadb-java-client-2.3.0.jar"

▼ 切換到 Files 視窗,對著 lib 資料夾按右鍵,貼上(Past)

▼ 完成後,會看見 "mariadb-java-client-2.3.0.jar" 在資料夾內

做完上述的步驟後,我們想要在專案使用它,必須回到 Projects 視窗,對著"Libraries"按右鍵,選擇"Add JAR/Folder...",載入我們專案內 lib/mariadb-java-client-2.3.0.jar


▼ 對著"Libraries"按右鍵,選擇"Add JAR/Folder..."

▼ 切換路徑到您的 NetBeansProjects 選擇此次的專案 MyDatabase,
並找到 lib/mariadb-java-client-2.3.0.jar。使用相對路徑參考函式庫。


2.5 在主程式中,撰寫代碼測試連接資料庫

詳細的語法會在下一篇文章中介紹,這邊先測試您的資料庫是否有架設成功,並可以使用驅動程式連接。

在輸出視窗中,如果有出現"資料庫連線成功",代表上述的設定已經完成。


捕獲例外訊息為 No suitable driver found for jdbc:mariadb://localhost:3306 ,代表找不到驅動程式,再次檢查 2.4 在 NetBeans 建立一個專案,並導入"mariadb-java-client-2.3.0.jar" 的步驟

錯誤
Libraries 並沒有參考到驅動程式
正確配置
有參考到就會顯示出來


捕獲例外訊息為 Could not connect to address=(host=localhost)(port=3306)(type=master) : Connection refused: connect ,代表 MariaDB 資料的服務未啟動。
如何處理,請參閱 安裝 MariaDB 文章。

錯誤
服務未啟動
正確配置
執行中


三、NetBeans 與 Database

3.1 為了更好簡單操作資料庫,我們使用 NetBeans 的服務(Services)功能,使用介面的方式自己建立一個測試用的資料庫(Database)、資料表(File, Table)、紀錄(Record, Row) 與 欄位(Field, Column)。


▼ 切換到 Services 視窗,對著 Database 按右鍵,選擇「New Connection」

▼ 「New Driver」→「Add...」→ 選擇驅動程式「mariadb-java-client-2.3.0.jar」

▼ 點擊「Find」,自動找尋 Driver Class

▼ 給一個名字,自己識別用

▼ 按下一步,點擊【Next>】

▼ 給預設的帳號(root)與密碼(無密碼)登入,且設定連接的 URL(jdbc:mariadb://localhost:3306)
在完成前,點擊【Test Connection】測試以上的資料是否可以成功連線,如果可以成功,最後再點擊【Finish】

▼ 完成後,會看見左方您資料庫的資訊。
MariaDB 預設有4個資料庫

3.2 使用指令處理資料庫的事情:新增一個資料庫"mydatabase",新增一個帳戶並設定密碼,給予這個帳戶使用的權限,最後查詢這個使用者的權限。


▼ 對著已連線的資料庫按右鍵,選擇「Excute Command」
打上指令後,點擊(4)的圖示 Run SQL

▼ 執行完成後,會新增一個資料庫,並顯示 my_user 的權限

要管理資料庫必須使用它的語言:結構化查詢語言(Structrued Query Language, SQL),可參考 MariaDB SQL StatementW3Schools SQL Tutorial


四、總結

此篇文章還沒有使用 Java 操作資料庫,居然就如此多的資訊,那是因為「資料庫」是一個很重要的主題,許多重要的資料都需要永續化保存,一不小心操作錯誤會使得這些寶貴的資料全部消失,這將會造成公司嚴重的損失。

我們學習了如何安裝 MariaDB、安裝 NetBeans IDE,也知道與資料庫連線需要有對應的驅動程式(mariadb-java-client-*.jar)才能溝通,另外我們使用 NetBeans IDE 與資料庫連接,可以查看資料庫的狀況。至於要如何使用 Java 與資料庫溝通,我們將在下一篇文章中說明。





沒有留言:

張貼留言