我开始使用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
转储数据库将获取数据库。它已创建,但数据库中仍然没有值。
有什么想法吗?
答案 0 :(得分:2)
如果您在退出程序之前没有关闭数据库,可能需要这样做,例如,在Put()
函数结束时:
if(dbp->close(dbp, 0)) != 0)
{
printf("Close failed\n");
}
可能是您放入数据库的数据只会添加到缓存中而不会写入磁盘。在这种情况下,需要调用函数close()
以将数据刷新到磁盘:
描述
DB->close
函数将任何缓存的数据库信息刷新到磁盘,关闭所有打开的游标,释放任何已分配的资源,并关闭所有基础文件。由于密钥/数据对缓存在内存中,因此无法使用DB->close
或DB->sync
函数同步文件可能会导致信息不一致或丢失。