【问题标题】:berkeley db save into diskberkeley db 保存到磁盘
【发布时间】: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 时,我才会存储到真实文件中,对吗?非常感谢您的宝贵时间。

【问题讨论】:

    标签: c berkeley-db


    【解决方案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 函数中看到一个错误,它会告诉你 至少 它不起作用,并且可能有引导你先打开数据库。
    猜你喜欢
    • 2013-02-10
    • 2012-10-01
    • 2012-11-02
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多