我无法理解在使用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。
答案 0 :(得分:2)
0.9.7有错误,请更新到更新版本。
如果您创建新集合,则需要进行提交,否则将不会保留更改。