2018年5月17日星期四

Eclipse 上使用 Java DB ( Apache Derby ) (PART 1 / 3 )

上一回【Eclipse 介紹及預定技術整合

Apache Derby

為何不用常見的 MySql?


由 JDK 6 開始已經包含 Database,而且小巧輕盈。
處理少量資料,只用到 CRUD ( Create, Retrieve, Update and Delete),這是一個不錯的選擇。

Java DB
http://www.oracle.com/technetwork/java/javadb/overview/index.html

註︰避免用好用滿 oracle JDK 後,被背後插一刀,快點習慣 OpenJDK + derby 吧,而且各個版本 Linux 都是選用 OpenJDK。


———————————資料補充 ( start )————————————

DBMS ( DataBase Management System )︰


Apache Derby 是一種【Relational DBMS】,除【Relational DBMS】外,還有其他種類,例如常說的「大數據」、「機器學習」等,他們用到的 database 技術都不一樣 ( 如 Hadoop、Neo4j 等等)。

這裡不會詳解 Relational Database,只會說怎樣用 Apache Derby,遇到不明白的地方,或許是我寫得爛,另一個可能是根基不足而無法理解。

不熟識 Relational Database,並非不能用,但最小限度要知道 Schema、Table、Primary key、Server/Client 及 SQL。

Relational Database
https://en.wikipedia.org/wiki/Relational_database

Database model
https://en.wikipedia.org/wiki/Database_model

Database 排名
https://db-engines.com/en/ranking

———————————資料補充 ( end )————————————

Check list︰


Step by step 記好步驟,假如忘記怎做,可快速查出做漏甚麼。
  1. 設定 system environment variable
  2. 設定 JDBC Driver
Derby SQL Check list
  1. Create Schema and table
  2. insert data to table

———————————簡易的分隔線————————————

事前準備及設定︰


Eclipse_oxgen3

安裝 Eclipse
https://javatoybox.blogspot.hk/2017/06/eclipsetutorial.html

derby_download

下載 Apache Derby
https://db.apache.org/derby/derby_downloads.html

extract_derby

解壓 Apache Derby。


設定 system environment variable︰


derby_sysenv

  • JAVA_HOME
  • C:\Program Files\ojdkbuild\java-1.10.0-openjdk-1.10.0.1-1

  • DERBY_HOME
  • A:\javatoybox\db-derby-10.14.1.0-bin

  • DERBY_OPTS
  • -Dderby.system.home=A:\javatoybox\Database

Setting the environment variables
https://db.apache.org/derby/docs/10.4/getstart/tgssetupjavaenvir.html 
 

下載程式碼︰


Download_derby_example

會用 git 就 clone,不會 git 請用下連結
https://github.com/IntegrityKnight/JavaDB-Derby-Example/archive/master.zip

註︰ GitHub 教學在此,頗長……

———————————爛程式 ( start )————————————

這範例只有一個字 ——【爛】


Derby_example_error

別以為是即食品,範例只包含資料,還沒建立資料庫,要跟著做,動腦筋改一改,才可以運作。別天真,用學生時代,那套思維學程式,是永遠學不會研究及自學。


官方版 Demo 在 %DERBY_HOME%demo 當中,但很複雜,這裡無視了很多 Error Checking 及設計等等,才可簡化到 300 行程式碼左右。

本文重點放在使用 SQL、用程式 CRUD、處理 BLOB ( 圖片、音樂檔之類 )、連接 Embedded mode 及 Server mode。

———————————爛程式 ( end )————————————

Derby Architecture︰



首先要說 Embedded Derby 是甚麼,跟 Server / Client Derby 有甚麼分別,在這地方攪混了,之後就不用學。

  • JVM ( Java Virtual Machine ) 管理著 Object 存取,程式在同一個 JVM 的 Derby Driver ( derby.jar )下,不會有資料不一致情況,Derby 會替開發者解決 Concurrency、Transaction 等問題,這是 Embedded Derby。

  • 如果不是同一個 JVM 呢? Derby Network Client 會跟 Derby Network Server 協調,最後經 Derby Network Server 連接 Derby Driver ( derbyclient.jar )到真正的 database files。

  • Embedded Server,本文沒有例子,有興趣的話,看參考資料「Derby Network Server」網頁的最後介紹。

Embedded Derby
https://db.apache.org/derby/papers/DerbyTut/embedded_intro.html

Derby Network Server
https://db.apache.org/derby/papers/DerbyTut/ns_intro.html

———————————簡易的分隔線————————————

設定 JDBC Driver︰


Eclipse_Derby_setting_1

用 Java EE perspective,在 Data Source Explorer 新增 Database connection。


這次用 Embedded mode。 Server/ Client 都是這樣選,下一步再微調。


要選對 JDBC Driver 存放位置,按藍色三角 icon 設定。


Default 應該是【derby.jar】,現在改做 DERBY_HOME 裡面 lib 的【derby.jar】,如圖示。


Embedded mode 不用 User name 及 password,為了日後設定 Server mode 方便,還是設定吧。

現在應該沒有 Database,所以 Create database ( if required ) 那一欄要打勾,在建立連線時會自動建立 Database。


測試 Database 連線,在測試同時,也會建立剛剛設定好的 Database。


JDBC 設定完成!在檔案總管中,會發現指定位置有資料夾建立,那個就是 Database,Derby 沒有 drop Database 的 SQL,所以直接把資料夾刪除就是  drop Database。

Creating, dropping, and backing up databases
https://db.apache.org/derby/docs/10.4/devguide/cdevdvlp42173.html

———————————簡易的分隔線————————————

建立 Schemas 及 Table ︰


建立 SQL 檔案︰



在 SQL 資料夾右鍵 --> New --> SQL File。


在連接 Database 的狀態下 才有選項,如果沒有的話,直接按 Finish 跳過,之後可以再設定。


在 SQL 資料夾下多了一個 TestSQL.sql,可以在檔案右鍵選 【Delete 】刪除。

執行 SQL file︰



執行 SQL 前,當然要確認是否已連接資料庫。


假如之前有設定過 User name 及 password。這裡輸入密碼連線。


因為範例 SQL 已經寫好,現在只需要開啟【CreateSchemaTable.sql】設定 Connection profile,然後【Ctrl + s】儲存檔案,再選【Execute SQL Files】執行。

註︰不建立 Schema 及 Table,無法繼續之後步驟!


執行結果如圖示。

SQL Statements ( CREATE table )
https://db.apache.org/derby/docs/10.14/ref/

———————————簡易的分隔線————————————

輸入資料︰


BLOB Type 資料輸入︰



執行 SQL,建立好 Schema 及 Table 後,要右鍵 Refresh view 才可看到。


跟圖示按【Edit】。


如何輸入圖片、音樂進資料庫呢?SQL 99 標準中,有一項叫 BLOB 可以儲存 binary 檔案。會把 binary 檔案變成 hexadecimal 存進資料庫。


BLOB 儲存格會變成這樣。

Derby and standards

一般資料輸入︰



其他資料可以在 DB_data 資料夾,開啟入面的 reference.txt 複製貼上。因為要試 UTF-8 是否可行,試輸入一點日文、韓文之類吧,做法同上。


參考圖片,甚麼欄位該貼上甚麼資料。

ID 那一欄不用填,Derby 會自動給一個編號,在【CreateSchemaTable.sql】已經定義好,最好回去研究一下那個 SQL 寫了甚麼, Google 是你的好幫手。

更新 Database︰



最重要一步,要 save!輸入甚麼都是假,不更新 Database,之前努力會白費!不需要每入一項都 save,入完所有資料按【Ctrl + S】 做 save 就可以。


Save 這個動作其實是執行 insert, update, delete 等 SQL 指令,所以會有 SQL Results。

———————————簡易的分隔線————————————

總結︰


用 Eclipse 這個 GUI 做這種事,不是一個好方案,用程式碼實現 insert, update, delete 等動作才是重點。用程式碼實現之前,先做 SQL 指令練習比較好,因為程式碼也要用到 SQL,不會 SQL 是不能寫編碼。

範例有程式碼,在 src 資料夾內,好奇的話,可以去看看,沒騙你。


沒有留言:

發佈留言

設有留言驗證及審查,檢閱後,才會顯示留言。
本人惰性很高,留言或許會石沉大海。