為何不用常見的 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 記好步驟,假如忘記怎做,可快速查出做漏甚麼。
Derby SQL Check list
———————————簡易的分隔線————————————
事前準備及設定︰
安裝 Eclipse
https://javatoybox.blogspot.hk/2017/06/eclipsetutorial.html
下載 Apache Derby
https://db.apache.org/derby/derby_downloads.html
解壓 Apache Derby。
設定 system environment variable︰
- 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
https://db.apache.org/derby/docs/10.4/getstart/tgssetupjavaenvir.html
下載程式碼︰
會用 git 就 clone,不會 git 請用下連結
https://github.com/IntegrityKnight/JavaDB-Derby-Example/archive/master.zip
註︰ GitHub 教學在此,頗長……
———————————爛程式 ( start )————————————
這範例只有一個字 ——【爛】
別以為是即食品,範例只包含資料,還沒建立資料庫,要跟著做,動腦筋改一改,才可以運作。別天真,用學生時代,那套思維學程式,是永遠學不會研究及自學。
官方版 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︰
用 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 資料夾內,好奇的話,可以去看看,沒騙你。
沒有留言:
發佈留言
設有留言驗證及審查,檢閱後,才會顯示留言。
本人惰性很高,留言或許會石沉大海。