SQLを使わずにテーブルにデータを挿入する
DdlUtilsは、DynaBean
クラスに基づいてテーブル内のデータを変更します。一般的なbeanには固定のプロパティと、それらのプロパティに対するsetter
メソッドとgetter
メソッドがあります。DynaBean
では、その名の通り、beanのプロパティを動的に作成することができます。DynaBean
は、値だけでなく、名前とデータ型も動的に変更可能なプロパティをサポートするJavaオブジェクトです。今回のサンプルでは、基になるテーブルの列の名前と列の値をプロパティとします。
次のコードでは、テーブル内のデータを表すJavaオブジェクトが作成され、Platform
クラスを使ってそのデータがテーブルに挿入されます。
//insert data into table without SQL insert statement DynaBean userData = database.createDynaBeanFor("userData", false); userData.set("userName", "tiger"); userData.set("password", "singh"); platform.insert(conn, database, userData);
このコードテクニックにより、java.sql.Statement
とjava.sql.ResultSet
を作成する煩雑さがなくなります。さらに重要なことに、カーソルがクローズしているかどうかを確認する必要がなくなります(これ以外の方法を使う場合は、最大オープンカーソル数の超過によるアプリケーションの異常終了を防ぐために、すべてのカーソルがクローズしているかどうかを確認する必要があります)。
PlatformクラスとDatabaseクラス
「derby.jar」の中でも特に重要なのがPlatform
クラスとDatabase
クラスです。
Platform
インターフェイスは、クエリや操作などDMLステートメントを処理するためのデータベース関連の機能を提供します。また、特定のプラットフォームに固有のSQLビルダも入っています。DdlUtilsには、データベースプラットフォームごとに個別の実装クラスが用意されています。例えば、サンプルアプリケーションで使用したプラットフォームは「Derby」です。
Database
クラスはDatabaseモデル(つまりデータベース内のテーブル)を表します。また、テーブルに格納されているオブジェクトのDynaBeans
を作成するための対応する動的クラスも入っています。Table
クラスは、その名の通り、データベーステーブルのJavaオブジェクトを表します。DDLステートメントはすべて、Database
クラスとTable
クラスを使って処理することができます。
アプリケーションを実行する
DdlUtilsはまだ開発中であり、本稿の執筆時点ではバイナリ版がリリースされていないので、リポジトリからコードを取得してビルドを実行するか(方法2)、サンプルファイル内の「extjars」フォルダにあるjarsを使用してください(方法1)。
次に、この2つの方法の手順を紹介します。
方法1:
- サンプルファイルをCドライブまたはDドライブにインストールします。
- 「cp.bat_txt」を「cp.bat」という名前に変更します。
- 「cp.bat」を編集し、インストールディレクトリを書き換えます。
- コマンドプロンプトウィンドウを開き、「cp.bat」を実行します。
- 「<インストールディレクトリ>\demo」ディレクトリに移動します。
- コンパイルを実行します。
$> javac MySimpleApp.java
- アプリケーションを実行します。
$> java MySimpleApp DBSchema.xml
方法2:
- developers.sun.comからJava DBをダウンロードします。
- http://db.apache.orgからDdlUtilsをダウンロードします。
- 現時点ではDdlUtilsのバイナリディストリビューションはないので、jakarta.apache.org/commonsから次のすべてのJakarta Commonsパッケージをダウンロードする必要があります。
- commons-beanutils.jar
- commons-betwixt-0.7.jar
- commons-collections-3.1.jar
- commons-digester-1.7.jar
- commons-lang-2.1.jar
- commons-logging.jar
- すべてのパッケージをクラスパスに指定し、サンプルファイル内の「MySimpleApp.java」をコンパイルして実行します。
アプリケーションが起動すると、データベースのインスタンスが作成されます。そして、XMLファイルからデータベーススキーマが読み取られてスキーマが作成されます。2人のユーザーに関連するデータはDynaBeansを使って挿入されます。アプリケーションには、ユーザーからユーザー名とパスワードを集めるためのユーザーインターフェイスがあり、組み込みデータベースに格納されているパスワードとの照合が行われます(図1を参照)。
ログインに成功すると、次の画面では、左側に利用可能な有名なゴルフ場、右側にユーザーがプレイしたことのあるゴルフ場の一覧が表示されます(図2を参照)。
アプリケーションは、図2の画面を呼び出している間に、ユーザーがプレイしたゴルフ場の一覧をデータベースから読み取ります。データベースは組み込みモードで使われているので、アプリケーションが終了されると終了します。
可能性を考える
組み込みのJavaデータベースで何が実現できるかは、ソフトウェアアーキテクトと開発者の想像力次第です。数年後には、Java DBを使ったダウンタイムのないインタラクティブなアプリケーションをたくさん目にすることになるでしょう。現時点では、Java DBを、Microsoft OfficeやOpenOfficeのオフィス文書用のリポジトリとして使用したり、新しいタイプのさまざまなのAJAXアプリケーションで使用したりする計画が進行中です。さらに重要なことに、Java DBは、モバイルアプリケーションのさまざまな機能的問題(データレプリケーションなど)の解決策にもなります。