1

私の Java コードでは、ツリー内のノードのタイプが Node であるツリーを作成しましたノードには、タイプNodeの名前、属性、および子があります。ツリーを保存するためにdb4oを使用しています。ツリーのルート ノードを格納するだけでそれを実行しています。しかし、db4o はオブジェクト ノードのすべての子ノードを格納していないことがわかりました。データベースからルートを取得してツリーをトラバースする場合、ツリーの 3 レベルまでしかトラバースできません。下位レベルの子ノードが失われているようです。ノードを失わないように、誰かが私を助けることができますか? ありがとうございました。

以下は私のコードです:

Node node1= new Node("root","this is the root",new ArrayList<Node>());
Node node2= new Node("zaid","123",new ArrayList<Node>());
Node node3= new Node("saad","999",new ArrayList<Node>());        
Node node4= new Node("safia","555",new ArrayList<Node>());
Node node5= new Node("ahmad","000",new ArrayList<Node>());

node1.getChildren().add(node2);
node2.getChildren().add(node3);
node3.getChildren().add(node4);
node4.getChildren().add(node5);

ObjectContainer db= Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(),"db");
db.store(node1);

Node node= new Node("root",null,null);
List<Node> result= db.queryByExample(node);
node= result.get(0);
System.out.println(node.getName()
        +","+node.getChildren().get(0).getName()
        +","+node.getChildren().get(0).getChildren().get(0).getName()
        +","+node.getChildren().get(0).getChildren().get(0).getChildren().get(0).getName());

コードの最後の行で、次のような例外が発生します。

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
4

1 に答える 1

0

私にとってはうまくいくので、完全な動作例を示しています。

import java.util.*;

class Node
{
  String _name;
  public String getName() {return _name;}
  public void setName(final String name) { _name = name;}

  String _value;
  public String getValue() {return _value;}
  public void setValue(final String value) { _value = value;}

  List<Node> _children;
  public List<Node> getChildren() {return _children;}
  public void setChildren(final List<Node> children) { _children = children;}

  Node(final String name, final String value, final List<Node> children)
  {
    setName(name);
    setValue(value);
    setChildren(children);
  }
}

次に、メイン クラスを定義します。

import java.util.*;
import com.db4o.*;
import com.db4o.query.*;
import com.db4o.ta.Activatable;

class test
{
  public static void main(String[] argv)
  {
Node node1= new Node("root","this is the root",new ArrayList<Node>());
Node node2= new Node("zaid","123",new ArrayList<Node>());
Node node3= new Node("saad","999",new ArrayList<Node>());        
Node node4= new Node("safia","555",new ArrayList<Node>());
Node node5= new Node("ahmad","000",new ArrayList<Node>());

node1.getChildren().add(node2);
node2.getChildren().add(node3);
node3.getChildren().add(node4);
node4.getChildren().add(node5);

ObjectContainer db= Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(),"db");
db.store(node1);

Node node= new Node("root",null,null);
List<Node> result= db.queryByExample(node);
node= result.get(0);
System.out.println(
             node.getName()
        +","+node.getChildren().get(0).getName()
        +","+node.getChildren().get(0).getChildren().get(0).getName()
        +","+node.getChildren().get(0).getChildren().get(0).getChildren().get(0).getName());
  }

}

そして、ビルド/実行は次のように行うことができます:

javac -classpath "db4o-8.0.249.16098-all-java5.jar:." *.java
java -classpath "db4o-8.0.249.16098-all-java5.jar:." test

db4o -> ドキュメント -> チュートリアル 8.0 に関する詳細情報を入手できます。8.1 がリリースされましたが、特別なチュートリアルはありません。

于 2013-07-03T13:05:12.730 に答える