レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

BLOCKVROCKリファレンス目次はこちら

db4oを使ってみる 〜チョイアプリをJavaで作りたい欲求

オブジェクト指向DBのdb4oを使ってみる。

Hibernateの40倍早いそうで、面倒なマッピングなど一切いらない。

WicketGuicedb4oなら最強じゃない?」

とおもって試す。

日本語化されたドキュメントが非常にありがたい!!

日本語ポータル
日本語チュートリアル

動機

まぁ、ほとんどのSI案件は「既存RDB」があるが、

RoRにどうも馴染めない僕は、

チョイアプリを作る欲求をJavaで満たしたい!

ぶっちゃけ、Javaともうちょっと戯れたい!!

インストール

とりあえずダウンロード、

公式サイト(http://www.db4o.com/)から

db4o 7.2 for Java (31.4MB) 」

をダウンロードした。

Zipをあけると、libディレクトリがあって


その中の「db4o-7.2.44.10827-java5.jar」を使う。

僕は以下の場所で全ての作業をやることにする。

C:\java\db4o

そういうわけでそのディレクトリに、

db4o-7.2.44.10827-java5.jar

を配置した。

オブジェクトを登録するクラスを作ってみる。

以下のファイル1つで2つのクラスを定義してる。

  • 登録ロジックをRegisterクラスに記述。
  • DBに保存するPOJOとしてPersonを作成。

Register.java

package kronos;

import com.db4o.*;
import com.db4o.query.*;

public class Register{
	public static void main(String args[]){
		Person p =new Person("yamamoto",31);
		Person p2 =new Person("yoneda",27);
		
		ObjectContainer db=Db4o.openFile("db.db4o");
		try {
			db.set(p);
			System.out.println("Stored "+ p.toString());
			db.set(p2);
			System.out.println("Stored "+ p2.toString());
			
		}
		finally {
			db.close();
		}
	}
	
}


class Person{
	private String name;
	private int age;
	
	public Person(String paName ,int paAge){
		this.name = paName;
		this.age = paAge;
	}
	public String getName(){
		return this.name;
	}
	public void setName(String paName){
		this.name = paName;
	}
	
	public int getAge(){
		return this.age;
	}
	public void setAge(int paAge){
		this.age = paAge;
	}
}


上記、Registerクラスでは「db.db4o」という名前の

データベースファイルを作成して、DBとして利用するという記述となっている。
(↓の部分だ)

Db4o.openFile("db.db4o");

永続化の手順も簡単。

db.set(オブジェクト)

だけで永続化完了だ。

検索してみる

次に以下、検索のためのサンプル。

Personオブジェクトの、ageが31のものだけを引っ張ってくるようになってる。

Finder.java

package kronos;

import com.db4o.*;
import com.db4o.query.*;

public class Finder{
	public static void main(String args[]){
		ObjectContainer db=Db4o.openFile("db.db4o");
		try {
			Person q = new Person(null,31);
			ObjectSet result = db.get(q);
			listResult(result);
		}
		finally {
			db.close();
		}
	}
	
	public static void listResult(ObjectSet result) {
		System.out.println(result.size());
		while(result.hasNext()) {
			Person p = (Person)result.next();
			System.out.print("name=" + p.getName() + ";");
			System.out.print("age=" + p.getAge() + ";");
			System.out.print("toString=" + p.toString() + ";");
			System.out.println();
		}
	}
}

実行

では登録側(Register.java)から、コンパイルしよう

C:\java\db4o>javac -d . -cp .;.\db4o-7.2.44.10827-java5.jar *.java
注:一部の入力ファイルは推奨されない API を使用またはオーバーライドしています。
注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてくださ
い。

C:\java\db4o>java -cp .;db4o-7.2.44.10827-java5.jar kronos.Register
Stored kronos.Person@12d7a10
Stored kronos.Person@1cdeff

推奨されない API を使ってるけど、まあほっといてください。

とりあえず永続化できたようだ。

DBのファイル「db.db4o」も勝手にできて、容量が増えてる。


じゃあ次検索。

C:\java\db4o>javac -d . -cp .;.\db4o-7.2.44.10827-java5.jar *.java
注:一部の入力ファイルは推奨されない API を使用またはオーバーライドしています。
注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてくださ
い。

C:\java\db4o>java -cp .;db4o-7.2.44.10827-java5.jar kronos.Finder
1
name=yamamoto;age=31;toString=kronos.Person@17471e0;

31歳のyamamotoだけがとれました!!


らくちんだ!

もっと遊ぼう。