2014年4月28日 星期一

Derby 資料庫執行 SQL 批次檔與備份

測試完 Derby 資料庫後, 發現還有兩個重要功能還沒試, 一是 Derby 提供執行 SQL 批次檔功能 (使用 ij 介面的 run), 二是反過來將資料內容 dump 為 SQL 指令檔. 參考 :

# Step 2: ij Basics

首先準備一個 users.sql 批次檔放在當前目錄下, 內容如下 :

CREATE TABLE users(name VARCHAR(20),gender CHAR(1),age SMALLINT,height FLOAT);
INSERT INTO users(name,gender,age,height) VALUES ('愛咪','女',12,157);
INSERT INTO users(name,gender,age,height) VALUES ('彼得','男',14,171);
INSERT INTO users(name,gender,age,height) VALUES ('凱莉','女',16,165);

進入 ij 介面, 連線 testdb 資料庫, 執行 run 'users.sql'; 即可 :

H:\Java\JT>ij
ij 版本 10.8
ij> connect 'jdbc:derby:testdb;create=true';
警告 01J01:未建立資料庫 'testdb',會改成建立現有資料庫的連線。
ij> run 'users.sql';
ij> CREATE TABLE users(name VARCHAR(20),gender CHAR(1),age SMALLINT,height FLOAT
);
已插入/更新/刪除 0 列
ij> INSERT INTO users(name,gender,age,height) VALUES ('愛咪','女',12,157);
已插入/更新/刪除 1 列
ij> INSERT INTO users(name,gender,age,height) VALUES ('彼得','男',14,171);
已插入/更新/刪除 1 列
ij> INSERT INTO users(name,gender,age,height) VALUES ('凱莉','女',16,165);
已插入/更新/刪除 1 列
ij> select * from users;
NAME                |GEN&|AGE   |HEIGHT
-------------------------------------------------------
愛咪                  |女   |12    |157.0
彼得                  |男   |14    |171.0
凱莉                  |女   |16    |165.0

已選取 3 列

可見三筆紀錄已經成功寫入.

其次是備份資料庫, 這要跳出 ij 介面, 直接使用 Derby 的 dblook 指令. 參考 :

dblook examples

要在任何目錄使用這指令, 必須將 JDK 安裝目錄下的 db\bin 加入環境變數 path 之中, 以我的電腦為例是在 :

C:\Program Files (x86)\Java\jdk1.7.0_55\db\bin

如果是在 Derby 資料庫所在位置 (即資料庫目錄的上一層), 例如我的資料庫位於 H:\java\JT\testdb 下, 則可以在 H:\java\JT 直接下 :

H:\java\JT>dblook -d jdbc:derby:testdb -o testdb.sql

這樣就會在 H:\java\JT 目錄下產生 testdb.sql 備份檔, 其內容如下 :

-- ============================

-- 此檔案以 Derby 的 dblook 公用程式建立。
-- 時間戳記:2014-04-28 12:49:23.967
-- 原始檔資料庫為:testdb
-- 連線 URL 為:jdbc:derby:testdb
-- appendLogs: false

-- ----------------------------------------------
-- DDL 表格陳述式
-- ----------------------------------------------

CREATE TABLE "APP"."USERS" ("NAME" VARCHAR(20), "GENDER" CHAR(1), "AGE" SMALLINT, "HEIGHT" DOUBLE);

CREATE TABLE "APP"."BOOKS" ("ID" INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), "GENDER" CHAR(1), "NAME" VARCHAR(50));

-- ----------------------------------------------
-- DDL 鍵值陳述式
-- ----------------------------------------------

-- 主要/唯一
ALTER TABLE "APP"."BOOKS" ADD CONSTRAINT "BOOKS_KEY" PRIMARY KEY ("ID");

可見, 資料庫 testdb 裡面的全部資料表都會 dump 出來.

沒有留言 :