やってみよう! Apache Derby


はじめに

Apache DerbyはJavaで実装されたRDBMSです。お手軽に使えるので便利です。
今回は導入方法と、簡単な使い方をメモしておきます。
(簡単に設定・実行できますが、自分はijの起動でJAVA_HOMEのエラーが出てはまりました・・・)

環境:Mac OS 10.15.7

Derbyのダウンロード

以前はJDKの中に入っていましたが、最近のJDKでは入っていません。自分でダウンロードする必要があります。

  • Apatch Derbyをダウンロードします。
  • ダウンロードしたら適当なフォルダに解凍します。 (ここでは/Users/XXXX/derbyに解凍)

設定

インストールしたフォルダ配下のbinにPATHを通しておきます。
.zprofileに、/Users/XXXX/derby/binを追加します。

~/.zprofile
export PATH=/Users/XXXX/derby/bin:$PATH

ijの起動

ijはDerbyのデータベースの作成やコマンドの実行などを行うツールです。
terminalでijを実行します。成功すると以下のように表示されます。

ijバージョン10.15
ij> 



以下のように表示され起動できないこともあります。

Error: JAVA_HOME is not defined correctly.
We cannot execute /System/Library/Frameworks/JavaVM.framework/Home/bin/java

このときはJAVA_HOMEの設定がうまくいっていません。ijを修正して対応します。

ij
case "`uname`" in
  CYGWIN*) cygwin=true ;;
  Darwin*) darwin=true
           if [ -z "$JAVA_HOME" ] ; then
             # JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
             JAVA_HOME=$(/usr/libexec/java_home)
           fi
           ;;
esac

中段あたりのJAVA_HOMEの設定箇所を$(/usr/libexec/java_home) に変更します。
これで起動できるようになります。

データベースの作成

terminalでijを実行した状態で、以下のコマンドを実行します。

ij> connect 'jdbc:derby:/Users/XXXX/db/test.db;create=true';

/Users/XXXX/db/配下にtest.dbというファイル(データベース)を開こうとします。
create=trueをつけると、ファイルが存在しない場合は自動的に作成します。
これでデータベースが作成(接続)されます。

テーブルの作成

データベースに接続できたので、次はテーブルを作成します。

createTable.sql
CREATE TABLE USER_INFO (
    USER_ID VARCHAR(10) PRIMARY KEY NOT NULL,
    USER_NAME VARCHAR(20) NOT NULL,
    ADDRESS VARCHAR(200),
    POST_CODE VARCHAR(7),
    AGE INTEGER,
    BIRTHDAY DATE
);

これをコピーしてijに貼り付けるか、runコマンドで実行します。

ij> run 'createTable.sql'

これでテーブルが作成できました。

JDBC接続

アプリなどからJDBC接続でアクセスすることが多いと思います。 

JdbcDriver=org.apache.derby.jdbc.EmbeddedDriver
JdbcUrl=jdbc:derby:/Users/XXXX/db/test.db;      

jdbcDriverは、Derbyインストール先の/lib/derbytools.jarにあるのでクラスパスに追加します。

derby.jarの場合もあります。バージョンによって異なります。

コマンド

よく使う便利なコマンドを紹介します

テーブル一覧

ij> show tables;

テーブル構造の表示

ij> describe user_info;  

user_info はテーブル名

スクリプトファイルの実行

ij> run ファイル名;  

ファイル名はフルパスまたはijを起動したフォルダからの相対パス