如何从mapDB数据库中检索数据,而不是每次都覆盖它?

时间:2014-07-12 18:20:59

标签: java gwt mapdb

我正在开发一个非常类似于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中提取数据,每次只返回一条记录。

如果有人可以提供帮助,那将非常感激。感谢

2 个答案:

答案 0 :(得分:1)

有时调用db.commit()。 Mapdb有事务和未提交的数据被丢弃。

答案 1 :(得分:0)

您的问题是,当您执行

时删除存储在数据库中的数据
map.clear()

此功能删除或地图中的记录。你不应该调用这个函数。