我不明白当我使用MapDB时,我必须在什么地方、什么时候放置这两条指令:
db.commit()
db.close() 提交是指当我修改数据库中的数据时,好的。但是每次我在方法中实例化这类对象(也就是说,每次我需要访问db时):
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。
发布于 2018-02-08 10:36:17
0.9.7有错误,请更新到更新版本。
如果创建新集合,则需要提交,否则更改将不会保留。
https://stackoverflow.com/questions/48607972
复制相似问题