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.
我开始使用 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 theDB->close
orDB->sync
function may result in inconsistent or lost information.