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

时间:2018-02-04 12:19:43

标签: java mapdb

我无法理解在使用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。

1 个答案:

答案 0 :(得分:2)

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

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