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

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

2004/10/1
山田祥寛

[4]データベースにオブジェクトを登録する

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

import wings.*;
import java.io.*;
import java.util.*;
import com.intersys.objects.*;

public class CreateDb {
  public static void main(String[] args){
    Database db=null;
    Book objBok=null;
    try {
      // データベースへの接続
      // ("_system"はデフォルトで用意されたユーザー)
      db=CacheDatabase.getDatabase(
          "jdbc:Cache://localhost:1972/USER","_system","sys");
      // 新規のBookオブジェクトを生成
      objBok=new Book(db);
      objBok.setIsbn("4-7981-0722-0");
      objBok.setTitle("XML辞典");
      objBok.setPrice(new Integer(2520));
      objBok.setPublish("翔泳社");
      // Bookオブジェクトを保存
      objBok._save();
      // データベースの切断
      db.close();
    } catch (Exception e) {
      e.printStackTrace(System.err);
    }
  }
}
リスト9 CreateDb.java(新規データを登録するJavaアプリケーション)

 CacheDatabase#getDatabaseメソッドには、第1引数から接続文字列、ユーザー名、パスワードを指定する。接続文字列の構文は以下のとおりだ。

jdbc:Cache://ホスト名:ポート番号/ネームスペース名

 オブジェクトを永続化するには、あらかじめ用意された_saveメソッドを利用するだけでよい。これで、BookオブジェクトがCachéデータベースに格納された。

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

 次に、手順[4]で格納されたオブジェクトを取得する方法を見てみよう。

import wings.*;
import java.io.*;
import java.util.*;
import com.intersys.objects.*;

public class ReadDb {
  public static void main(String[] args){
    Database db=null;
    Book objBok=null;
    try {
      db=CacheDatabase.getDatabase(
          "jdbc:Cache://localhost:1972/USER","_system","sys");
      // ID番号(1)をキーにBookオブジェクトを取得
      objBok=(Book)Book._open(db,new Id("1"));
      System.out.println("    ISBN:" + objBok.getIsbn());
      System.out.println("タイトル:" + objBok.getTitle());
      System.out.println("    価格:" + objBok.getPrice());
      System.out.println("  出版社:" + objBok.getPublish());
      // オブジェクトを解放
      db.closeObject(objBok.getOref());
      db.close();
    } catch (Exception e) {
      e.printStackTrace(System.err);
    }
  }
}
リスト10 ReadDb.java(格納されたオブジェクトのデータを取得するJavaアプリケーション)

 _openメソッドは、先述の_saveメソッド同様、永続化クラスにあらかじめ用意されたメソッドで、指定された接続先から指定されたIDをキーに、オブジェクトを取得するものだ。いったんデータを取得した後は、通常のオブジェクトを操作するのとまったく同じ要領でプロパティにアクセスすることができる。もちろん、取得したデータのプロパティ値を変更した後、_saveメソッドをコールすれば、更新処理も可能だ。

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

> java ReadDb
    ISBN:4-7981-0722-0
タイトル:XML辞典
    価格:2520
  出版社:翔泳社
リスト11 実行結果

 以上、ごく基本的なCachéでのデータの出し入れを見てきたが、もちろん、これがCachéのすべてではない。より詳細な情報を知りたい方は、Cachéスタジオのメニューバーから[ヘルプ]−[Cachéオンラインドキュメント]でチュートリアルを参照することができる。

Cachéへのさまざまなアクセス方法

 前編でも紹介したとおり、Cachéの特徴の1つは、データベースにアクセスするためのさまざまなインターフェイスを用意している点にある。例えば、Cachéに対して、JDBC(SQL)経由でアクセスするには、以下のようにすればよい。コードをご覧いただければ分かるように、これならばOODBであることを意識する必要はほとんどない。

import com.intersys.objects.*;
import java.sql.*;

public class JdbcCache {
  public static void main(String[] args){
    try {
      Class.forName("com.intersys.jdbc.CacheDriver");
      Connection db=DriverManager.getConnection(
          "jdbc:Cache://localhost:1972/USER","_system","sys");
      Statement objStt=db.createStatement();
      java.sql.ResultSet rs=objStt.executeQuery(
          "SELECT * FROM wings.Book");
      while(rs.next()){
        System.out.println(
            "    ISBN:" + rs.getString("Isbn"));
        System.out.println(
            "タイトル:" + rs.getString("Title"));
        System.out.println(
            "    価格:" + rs.getString("Price"));
        System.out.println(
            "  出版社:" + rs.getString("Publish"));
      }
      db.close();
    } catch (Exception e){
      e.printStackTrace(System.err);
    }
  }
}
リスト12 JdbcCache.java(JDBC経由でSQLアクセスするJavaアプリケーション)

 また、Cachéには、Webアプリケーションを簡単に作成するためのCSP(Caché Server Pages)が用意されているのも忘れてはならない。ごく基本的な登録/検索アプリケーションであれば、Cachéスタジオのウィザード画面を利用するだけで作成できてしまう。ここでは、簡単な登録/検索アプリケーションを作成してみよう。

 メニューバーの[ファイル]−[新規作成]から[新規作成]ダイアログを立ち上げ、[Caché Server Pages]を選択する。CSPファイルの骨組みが自動生成されるので、次いで、[挿入]−[フォームウィザード]を選択してみよう。[Caché Web Form Wizard]が起動したはずだ。後はウィザードに従って、対象となる永続化クラス、使用するプロパティ、ラベル名など、必要なパラメータを選択していけばよい。

図2 Caché Web Form Wizard(クリックで拡大します)

 ウィザードを完了したら、[表示]−[ブラウザで表示]で作成したフォームを確認できる。登録/更新/検索とひととおりの処理も実行可能な状態であるので、一度、試してみてほしい。

図3 ウィザードで作成した登録/検索画面(クリックで拡大します)

☆ ☆ ☆

 本稿を読んで、概念的にしか理解していなかったオブジェクト指向データベースの世界が、少しは身近な存在に感じられただろう。RDBと異なり、SQLもオブジェクト・マッピングも不要であることから、これまでRDBアプリケーションに慣れてきた読者にとっては、ある種の違和感を覚えたかもしれない。しかし、その違和感を乗り越えてしまえば、むしろオブジェクトをオブジェクトのままに扱えるOODBの世界の「自然さ」が実感できるに違いない。

 本稿で紹介した内容はOODBのごく基本的な部分にすぎないが、これを機会にどんどんOODBに触れてみてほしい。RDBを前提とした開発は、条件によっては決して唯一の解ではないことがきっと分かるはずだ。(連載完)

4/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 記事ランキング

本日月間