有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

persistence Berkeley DB(Java版)在应用程序运行之间不是持久的

我正在使用伯克利数据库为我正在构建的网络爬虫存储信息。但是,我的数据库信息在会话之间没有保存

启动应用程序时,每个数据库上的count()返回0。在会话结束时,在退出之前,我为每个DB打印count(),它已适当更改,但当我再次运行程序时,它是“重置”的。。。为什么会这样

此外,我选择不使用事务,因为我是单用户,并且不会在多线程环境中运行该程序


共 (2) 个答案

  1. # 1 楼答案

    也许这会有帮助:

    EnvironmentConfig environmentConfig = new EnvironmentConfig();
    environmentConfig.setAllowCreate(true);
    File file = new File("<Path_to_Database>");
    Environment environment = new Environment(file, environmentConfig);
    
    DatabaseConfig databaseConfig = new DatabaseConfig();
    databaseConfig.setAllowCreate(true);
    databaseConfig.setDeferredWrite(true);
    
    Database testDatabase = environment.openDatabase(null, "testDB", databaseConfig);
    
    DatabaseEntry keyEntry = new DatabaseEntry();
    DatabaseEntry valueEntry = new DatabaseEntry();
    DatabaseEntry fetchedEntry = new DatabaseEntry();
    
    IntegerBinding.intToEntry(1, keyEntry);
    StringBinding.stringToEntry("Kwakkel", valueEntry);
    
    testDatabase.put(null, keyEntry, valueEntry);
    
    
    testDatabase.get(null, keyEntry, fetchedEntry, null);
    String fetched = StringBinding.entryToString(fetchedEntry);
    
    System.out.println("Fetched value: " + fetched);
    
    testDatabase.sync();
    testDatabase.close();
    

    我认为你必须将“延迟写入”设置为“真”。然后可以在数据库上使用“sync()”并将数据持久化。运行它,然后用“put(…)”删除该行-命令应该还能用。好吧,至少它对我有用……:)

    致意

    亚历山大·谢尔

  2. # 2 楼答案

    我在伯克利DB工作了两周。我也被同一个问题弄糊涂了,我的结论是:如果你在应用程序停止运行之前关闭了环境和数据库,那么数据会存储到一个文件中,你可以在打开数据库时指定它的位置。当程序成功终止时,可以实现关闭操作。但是,如果出现故障或程序崩溃,并且在正常情况下无法结束应用程序,我还无法找到运行关闭操作的位置