BerkeleyDB 不存储文件

BerkeleyDB doesn't store files

我开始使用 BerkeleyDB。我写了下面的方法来向数据库中插入值:

void Put(int key, int value){
    DB *dbp;
    int ret;

    if((ret=db_create(&dbp,NULL,0))!=0){
        fprintf(stderr,"db_create failed: %s\n",db_strerror(ret));
        exit(1);
    }
    ret=dbp->open(
        dbp,
        NULL,
        "berkeley.db",
        NULL,
        DB_BTREE,
        DB_CREATE,
        0
    );

    DBT bin_key, bin_value;
    memset(&bin_key,0,sizeof(DBT));
    memset(&bin_value,0,sizeof(DBT));

    bin_key.data=&key;
    bin_value.data=&value;

    bin_key.size=sizeof(int);
    bin_value.size=sizeof(int);

    if((ret=dbp->put(dbp, NULL, &bin_key, &bin_value, DB_NOOVERWRITE))!=0){
        printf("Put failed");
    };
    return;
}

调用 Put() 方法后,我没有收到任何错误。使用工具dump_db berkeley.db转储数据库得到数据库。已创建,但数据库中仍然没有值。

有什么想法吗?

如果您在退出程序之前没有关闭数据库,您可能想要这样做,例如,在您的 Put() 函数结束时:

if(dbp->close(dbp, 0)) != 0)
{
    printf("Close failed\n");
}

可能是你放入数据库的数据只是加入了缓存,并没有写入磁盘。在这种情况下,需要调用函数 close() 以将数据刷新到磁盘:

Description

The DB->close function flushes any cached database information to disk, closes any open cursors, frees any allocated resources, and closes any underlying files. Because key/data pairs are cached in memory, failing to sync the file with the DB->close or DB->sync function may result in inconsistent or lost information.