2014-07-12 3 views
0

Я разрабатываю веб-приложение GWT, очень похожее на Doodle.comКак получить данные из базы данных mapDB, не переопределяя их каждый раз?

Мне нужно хранить в базе данных информацию о событиях и пользователях. Это проект для университетского экзамена, и мы должны использовать 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, только одна запись была возвращена каждый раз.

Если кто-то может помочь, это было бы очень признательно. Благодаря

+0

Почему вы делаете map.clear()? – Hunsu

ответ

0

Ваша проблема заключается в том, что вы удаляете данные, хранящуюся в БД, когда вы делаете

map.clear() 

Эта функция удаления или записи в карте. Вы не должны вызывать эту функцию.

+0

Да Он работает спасибо! –

1

call db.commit() иногда. Mapdb имеет транзакции, и незафиксированные данные отбрасываются.

+0

'eventsDB.commit();' –

Смежные вопросы