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

标签 java mapdb

我无法理解在使用 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.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.9.7 有错误,请更新到较新的版本。

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

关于java - MapDB db.commit() db.close() 用法和问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48607972/

相关文章:

java - ShEx 验证 - 结果形状图中的 Reason 和 appInfo 为空

java - 无论如何,我无法在 Hibernate 中批处理 MySQL INSERT 语句

java - 如何从 MapDB 3.x 中删除和重命名表?

database - mapdb如何持久化交叉重启

java - 在java中寻找一个崩溃安全队列

java - 使用jquery调用soap wsdl

java - 一旦对 Settable Future 对象调用 setException 方法,会发生什么?

java - 为什么这个分隔符没有发挥应有的作用?

java - Java 中自动装箱时的 NPE