MapDB db.commit() db.close() 用法和问题

MapDB db.commit() db.close() usage and problems

我不明白在使用 MapDB 时我必须在何时何地放置这两条指令:

db.commit()
db.close()  

commit是为了我修改db里面的数据的时候,ok。但是每次我在方法中实例化这种对象时(也就是说,每次我需要访问数据库时):

DB db = DBMaker.newFileDB(new File(FILE_NAME)).closeOnJvmShutdown().make();
ConcurrentNavigableMap<Integer, Offers> offerts= db.getTreeMap("offers");  

我是否必须将 db.close() 指令放在方法的末尾?那么 db.commit() 呢?只有我修改了数据?
我问这个是因为我遇到了这种错误:

java.lang.RuntimeException: Writer thread failed
Caused by: 
java.lang.ArrayIndexOutOfBoundsException: -1811939328
at org.mapdb.Volume$ByteBufferVol.tryAvailable(Volume.java:273)
at org.mapdb.Volume.ensureAvailable(Volume.java:58)
at org.mapdb.StoreWAL.replayLogFile(StoreWAL.java:621)
at org.mapdb.StoreWAL.commit(StoreWAL.java:579)
at org.mapdb.EngineWrapper.commit(EngineWrapper.java:95)
at org.mapdb.AsyncWriteEngine.access1(AsyncWriteEngine.java:72)
at org.mapdb.AsyncWriteEngine.runWriter(AsyncWriteEngine.java:230)
at org.mapdb.AsyncWriteEngine$WriterRunnable.run(AsyncWriteEngine.java:156)
at java.lang.Thread.run(Unknown Source)  

我的MapDB版本是0.9.7。

0.9.7有bug,请更新到新版本。

如果您创建新的集合,您需要进行提交,否则更改将不会被保留。