3

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

db.commit()
db.close()  

提交是为了当我修改数据库中的数据时,好的。但是每次我在方法中实例化这种对象时(即每次我需要访问数据库时):

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.access$201(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。

4

1 回答 1

2

0.9.7 有错误,请更新到新版本。

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

于 2018-02-08T10:36:17.833 回答