berkeley db 保存到磁盘
Posted
技术标签:
【中文标题】berkeley db 保存到磁盘【英文标题】:berkeley db save into disk 【发布时间】:2016-04-29 20:57:47 【问题描述】:我是berkeley db的新手,当我以这种方式创建数据库时:
DB *dbp;
db_create(&dbp, NULL, 0);
dbp->put(dbp, NULL, &key, &data, 0);
我是否将数据存储到磁盘中?如果是这样,数据库文件在哪里?据我所知,只有当我使用DB_ENV->open()
创建数据库环境并指定参数char *db_home
时,我才会存储到真实文件中,对吗?非常感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:来自伯克利数据库规范;
要打开数据库,您必须首先使用 db_create() 函数来初始化数据库句柄。一旦初始化了数据库句柄,就可以使用它的 open() 方法打开数据库。 请注意默认情况下,如果数据库尚不存在,DB 不会创建它们。要覆盖此行为,请在 open() 上指定 DB_CREATE 标志强>方法。
#include <db.h>
//...
DB *dbp; /* DB structure handle */
u_int32_t flags; /* database open flags */
int ret; /* function return value */
/* Initialize the structure. This
* database is not opened in an environment,
* so the environment pointer is NULL. */
ret = db_create(&dbp, NULL, 0);
if (ret != 0)
/* Error handling goes here */
/* Database open flags */
flags = DB_CREATE; /* If the database does not exist,
* create it.*/
/* open the database */
ret = dbp->open(dbp, /* DB structure pointer */
NULL, /* Transaction pointer */
"my_db.db", /* On-disk file that holds the database. */
NULL, /* Optional logical database name */
DB_BTREE, /* Database access method */
flags, /* Open flags */
0); /* File mode (using defaults) */
if (ret != 0)
/* Error handling goes here */
https://docs.oracle.com/cd/E17076_05/html/gsg/C/databases.html#DBOpen
【讨论】:
我要补充一点,打桩的答案说明了一个重要概念:它捕获返回码并处理错误。 @HuangJie,如果你这样做了,你会从 put 函数中看到一个错误,它会告诉你 至少 它不起作用,并且可能有引导你先打开数据库。以上是关于berkeley db 保存到磁盘的主要内容,如果未能解决你的问题,请参考以下文章
berkeley db java edition怎样存储数据库?