0

Doodle.comに非常によく似た GWT Web アプリケーションを開発しています。

イベントとユーザーに関する情報をデータベースに保存する必要があります。これは大学の試験用のプロジェクトであり、永続データには mapDB を使用する必要があります。問題は、メソッドが呼び出されるたびに、saveEventsToDB()以前に作成されたデータベースが新しいデータベースによって上書きされることです。

これはsaveEventsToDB()方法です:

public void saveEventsToDB(Event event) {
    DB eventsDB = DBMaker.newFileDB(new File("eventsDB")).closeOnJvmShutdown().make();
    Map<Integer, Event> map = eventsDB.getTreeMap("Events");
    map.clear();
    Set<Integer> keys = map.keySet();
    int id=0;
    for(int key : keys) {
        id++;
    }
    map.put(id+1, event);

    eventsDB.commit();
    eventsDB.close();
}

次のコード行が原因であると確信しています。

DB eventsDB = DBMaker.newFileDB(new File("eventsDB")).closeOnJvmShutdown().make();

しかし、これは私たちの教授がmapDBのために私たちに与えたサンプルコードにありました.

mapDB のドキュメントには、次のように書かれていnewFileDBます。

ファイルに保存されているデータベースを作成または開きます。

しかし、新しいデータベースは毎回作成されます。いくつかのブレークポイントを使用して、db からデータを抽出しようとすると、毎回 1 つのレコードしか返されませんでした。

誰かがそれを助けることができれば、それは非常にありがたいです. ありがとう

4

2 に答える 2

1

時々 db.commit() を呼び出します。Mapdb にはトランザクションがあり、コミットされていないデータは破棄されます。

于 2014-07-15T16:11:12.027 に答える