2018年5月29日星期二

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

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

prepare_1

續上回,用手動方式輸入資料,建好資料庫了嗎?
還沒做好的話,請把文字複製貼上,可以參考上一回怎樣做。

先教 Backup 及 restore 資料庫,學會後,玩爛了也不用怕。之後教 SQL ,最後才到寫程式。


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

備份資料庫︰


有好幾種備份方法,這裡只介紹 Offline backups 及 Online backup。

Offline backups︰


offline_backup

備份前一定要斷開資料庫連接,然後複製一份。

Offline backups
https://db.apache.org/derby/docs/10.14/adminguide/cadminhubbkup12677.html

———————————提示 ( start )————————————

忘記資料庫位置?


 offline_backup_2

不能 Disconnect?


 offline_backup_3

———————————提示 ( end )————————————

Online backup︰


online_backup_1

在連接資料庫狀態下,用 Derby 提供的工具做備份。執行【ReadOnlyModeBackup.sql】就好。

Online backup
https://db.apache.org/derby/docs/10.14/adminguide/cadminhubbkup01.html

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

還原資料庫︰


restore_1

第一種方法,斷開資料庫連接,把備份資料夾蓋過現在的資料夾就好。都手動……覺不覺很煩?可以用 【Batch File Command】配【工作排程器】,不過……有需要經常還原嗎?

Online_Backup_2

第二種方法,跟據【RestoreDatabase.txt】,用 Connection URL 還原。每次連接資料庫時,會自動還原,做開發及測試最方便。

例如︰
restoreFrom=A:\javatoybox\test_data\DerbyBackup\1900-01-01\FirstDB

Restoring a database from a backup copy
https://db.apache.org/derby/docs/10.14/adminguide/tadminhubbkup44.html

Setting attributes for the database connection URL
http://db.apache.org/derby/docs/10.14/ref/rrefattrib24612.html

———————————提示 ( start )————————————

JDBC Driver 設定︰



設定 Connection 時,可以在 Data Management 修改。
在【Preferences】搜尋【Driver Definitions】。

———————————提示 ( end )————————————

Derby SQL︰


Prepare_2

都學會 Backup 及 Restore 嗎?建議先備份一次,再用 Connection URL做一個連線後自動還原。

Drop Schema 及 Drop Table︰


DropSchema

執行 【DropSchema.sql】失敗,因為 Schema 入面還有 Table。Derby 的 Drop schema SQL,建議後面加 RESTRICT,防止錯誤刪除。

DROP SCHEMA statement
https://db.apache.org/derby/docs/10.4/ref/rrefsqlj31648.html

DropTable

Derby SQL 格式 DROP TABLE [Schema].[Table]。先 Drop Table,再執行 Drop Schema 試試。

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

使用 BLOB Cell Editor 導出檔案︰


ExtractBLOB_1

拿個 BLOB 試試,就用【MEDIA_1】吧。這 Column 只儲存 hexadecimal 沒有其他資訊,知道那是甚麼檔嗎?音樂?圖片?就算知道是甚麼類型,那是小蘿莉還是爆鱗龍?檔案名稱也是很重要……

Table 設計參考 ( 本機 Demo 文件 )︰
file:///%DERBY_HOME%/demo/programs/toursdb/toursdb_readme.html#MAPS

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

Add, Redefine, Drop 及 Rename Column︰


ADD  ︰


AddColumn_1

不需要把 Table Drop 掉再定義過,SQL 有修改 Table 方法。綜合檔名 + 類型,用一個 Column 代表,看圖片,執行【TableAddColumn.sql】前,先設定【Connection profile】再按【Execute SQL Files】,不知道怎做,請回去 PART 1 温習。

———————————提示 ( start )————————————

Eclipse GUI 需要手動 Refresh︰


AddColumn_2

對 Table 作出改動都需要關掉 Editor --> Refresh --> 再開啟……這樣做才可以見到更變。

———————————提示 ( end )————————————

Redefine︰


Redefine_1

【MEDIA_2_FILENAME】成功輸入資料,但在【MEDIA_1_FILENAME】更新資料失敗,為甚麼?去數一下檔名 + 副檔名有多少個字節,再看一下【VARCHAR】定義……慘了,檔名太長,怎麼辦?

redefine_2

很簡單,調整定義。

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

DROP︰


DropColumn

假如不小心開多個 Column 怎麼辦?把 Column Drop 掉。

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

RENAME ︰


RenameColumn

手殘,打錯字又怎樣做?看圖示。

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

導出資料︰


SELECT FROM︰


Read_SQL

SQL 最簡單、最基本方法……
  • SELECT [COLUMN_NAME] FROM [TABLE]

用 SQL 導出 BLOB 檔案及其他資料︰



解決 SQL 亂碼問題,在【ExtractColumnsBLOB.sql】中,有中文檔名,可以在【Preferences】設定成 UTF-8。或在【ExtractColumnsBLOB.sql】右鍵選【Properties】修改文檔編碼。

ExtractBLOB_2

首先,建立資料夾,以圖示為例,在【A:\javatoybox】裡面,建立一個名為【test_data】資料夾。


導出檔案結果如圖示。如何導出多過一個 BLOB檔?我也不知道,但用程式碼的話,可以做得到,下次 PART 3 會有範例。

SYSCS_UTIL.SYSCS_EXPORT_QUERY_LOBS_TO_EXTFILE system procedure
https://db.apache.org/derby/docs/10.14/ref/rrefexportselectionproclobs.html

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

使用 ij ︰


Eclipse 有 GUI 用,當然 Derby 會有內建 command mode 用,簡單練習 SQL 用法,不需要寫任何程式碼。

ij_Basic.png

最簡單 command 如下︰

  • connect 'jdbc:derby:A:\javatoybox\Database\FirstDB';
  • SELECT id, actor, product FROM acg_character.profile;
  • disconnect;
  • exit;

ij Basics
http://db.apache.org/derby/papers/DerbyTut/ij_intro.html

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

總結︰


SQL 部份大約這樣,如果要學更多,請參考 w3schools,我說參考的意思是每個 Database SQL 用法差不多,大同小異,還需要看 Derby 文檔作修正。

雖然是【小異】,但足夠左右寫出來的 SQL 能否正確執行,如果寫程式的話,最好把 SQL 部份分離,集中在一處作管理,在轉換 Database 時 ( 避免 Vendor lock-in,考慮換更好性能 Database 之類 ),不需要四處找 SQL 修改及測試。

看 Derby 文檔時,要注意使用【Built-in】的 SQL,避免使用不是 SQL Standard 的 Built-in function。

w3schools
https://www.w3schools.com/sql/

Derby SQL language reference

沒有留言:

發佈留言

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