【问题标题】:How to retrieve data from mapDB database, without override it every time?如何从 mapDB 数据库中检索数据,而不是每次都覆盖它?
【发布时间】:2014-07-16 00:11:12
【问题描述】:

我正在开发一个与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

创建或打开存储在文件中的数据库。

但是每次都会创建一个新的数据库,我们看到这个使用一些断点并尝试从数据库中提取数据,每次只返回一条记录。

如果有人可以提供帮助,将不胜感激。谢谢

【问题讨论】:

  • 为什么要使用 map.clear()?

标签: java gwt mapdb


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的问题是您删除了存储在数据库中的数据

    map.clear()
    

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

    【讨论】:

      猜你喜欢
      • 2021-06-30
      • 2022-01-01
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      相关资源
      最近更新 更多