オブジェクト指向データベースの復権(後編)

ObjectStoreとCachéでOODBへ踏み出そう Page 2

2004/10/1
山田祥寛

[5]データベースを生成する

 データを格納するためのオブジェクトの準備ができたところで、新規にデータベースを作成し、オブジェクトを格納してみることにしよう。以下のようなJavaアプリケーションを用意する。

import wings.*;
import com.odi.*;

public class CreateDb {
  public static void main(String[] args) {
    // セッションの確立
    Session session = Session.create(null, null);
    session.join();
    // データベースの作成
    Database db=Database.create("sample.odb",
                                ObjectStore.OWNER_WRITE);
    // トランザクションの開始(更新)
    Transaction objTrn=Transaction.begin(ObjectStore.UPDATE);
    Book objBok=new Book();
    objBok.setIsbn("4-7980-0839-7");
    objBok.setTitle(
        "今日からつかえる JSP&サーブレット サンプル集");
    objBok.setPublish("秀和システム");
    objBok.setPrice(2940);
    // ルートオブジェクトの追加
    db.createRoot("Book", objBok);
    objTrn.commit();
    // データベースの切断
    db.close();
  }
}
リスト4 CreateDb.java(データベースを作成し、オブジェクトを格納するJavaアプリケーション)

 PSE Proにオブジェクトを登録する基本的な流れは、以下のとおりだ。

  1. セッションの確立
  2. データベースの生成(接続)
  3. トランザクションの開始
  4. オブジェクトの生成
  5. ルート・オブジェクトの追加
  6. トランザクションのコミット

 なお、本サンプルを2回目以降に実行する場合には、すでにデータベースが存在するため、例外が発生するので注意すること。既存のデータベースに対して接続するには、Database#openメソッドを利用する必要がある。

Database db=Database.open("sample.odb",ObjectStore.UPDATE);

 PSE Proのデータベースには、必ず1つ以上のルート・オブジェクトが存在しなければならない。PSE Proの世界では、このルート・オブジェクトの単位にオブジェクト(オブジェクト・ツリー)が格納されていくというわけだ。

 ルート・オブジェクトの名前は常にユニークでなければならないので、2回目以降にサンプルを実行する場合には、Database#createRootメソッドの第1引数(オブジェクト名)をあらかじめ変更しておく必要がある。ルート・オブジェクト自体を更新したい場合には、createRootメソッドの代わりにsetRootメソッドを使用する。また、既存のルート・オブジェクトを破棄する場合には、以下のようにObjectStore#destoryメソッドを使用する。

Object objBok=db.getRoot("Book");   ←オブジェクトの取得
ObjectStore.destroy(objBok);        ←オブジェクトの破棄

[6]データベースからデータを取得する

 次に、PSE Pro上に格納されたオブジェクト・データを取得する方法を見てみよう。すでに手順[4]を理解されている方にとっては、もはや理解は容易であるはずだ。

import wings.*;
import com.odi.*;

public class ReadDb {
  public static void main(String[] args) {
    // セッションの確立
    Session session = Session.create(null, null);
    session.join();
    // データベースへの接続
    Database db=Database.open("sample.odb",
                              ObjectStore.READONLY);
    // トランザクションの開始(読み取り専用)
    Transaction objTrn=Transaction.begin(ObjectStore.READONLY);
    // ルート・オブジェクト"Book"の取得
    Book objBok=(Book)db.getRoot("Book");
    // Bookオブジェクトの内容を出力
    System.out.println("    ISBN:" + objBok.getIsbn());
    System.out.println("タイトル:" + objBok.getTitle());
    System.out.println("    価格:" + objBok.getPrice());
    System.out.println("  出版社:" + objBok.getPublish());
    objTrn.commit();
    // データベースの切断
    db.close();
  }
}
リスト5 ReadDb.java(格納されたオブジェクトのデータを取得するJavaアプリケーション)

 以上のコードをコンパイルの後、実行すると、以下のような結果が得られるはずだ。

> java ReadDb
    ISBN:4-7980-0839-7
タイトル:今日からつかえる JSP&サーブレット サンプル集
    価格:2940
  出版社:秀和システム
リスト6 実行結果

 以上、ごく基本的なPSE Proでのデータの出し入れを見てきたが、もちろん、これがPSE Proのすべてではない。より詳細な情報を知りたい方は、PSE Proをインストールしたディレクトリ配下の「/doc/apiug/index.htm」にユーザーガイド(英語)が格納されているので、併せて参照してみるとよいだろう。(次ページへ続く)

2/4

 Index
連載:オブジェクト指向データベースの復権(後編)
ObjectStoreとCachéでOODBへ踏み出そう
  Page 1
ObjectStoreのサンプルアプリケーション構築

 ・サンプル動作の前提条件
 ・[1]PSE Proをインストールする
 ・[2]環境変数を設定する
 ・[3]PSE Proに格納するための永続化クラス「Book」を用意する
 ・[4]ポストプロセス処理を行う
Page 2
 ・[5]データベースを生成する
 ・[6]データベースからデータを取得する
  Page 3
Cachéのサンプルアプリケーション構築
 ・サンプル動作の前提条件
 ・[1]Cachéをインストールする
 ・[2]環境変数を設定する
 ・[3]Cachéに格納するための永続化クラス「Book」を用意する
  Page 4
 ・[4]データベースにオブジェクトを登録する
 ・[5]データベースからデータを取得する
Cachéへのさまざまなアクセス方法


オブジェクト指向データベースの復権



Database Expert フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Database Expert 記事ランキング

本日月間