BerkeleyDB不存储文件

时间:2015-07-16 14:44:45

标签: c put berkeley-db

我开始使用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转储数据库将获取数据库。它已创建,但数据库中仍然没有值。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

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

可能是您放入数据库的数据只会添加到缓存中而不会写入磁盘。在这种情况下,需要调用函数close()以将数据刷新到磁盘:

  

描述

     

DB->close函数将任何缓存的数据库信息刷新到磁盘,关闭所有打开的游标,释放任何已分配的资源,并关闭所有基础文件。由于密钥/数据对缓存在内存中,因此无法使用DB->closeDB->sync函数同步文件可能会导致信息不一致或丢失。