Berkeley DB for c

上传人:ali****an 文档编号:109903894 上传时间:2019-10-28 格式:DOC 页数:15 大小:79KB
返回 下载 相关 举报
Berkeley DB for c_第1页
第1页 / 共15页
Berkeley DB for c_第2页
第2页 / 共15页
Berkeley DB for c_第3页
第3页 / 共15页
Berkeley DB for c_第4页
第4页 / 共15页
Berkeley DB for c_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《Berkeley DB for c》由会员分享,可在线阅读,更多相关《Berkeley DB for c(15页珍藏版)》请在金锄头文库上搜索。

1、Berkeley DB for C简单介绍Brekeley DB打开databases在开打数据库前必须通过db_create()方法来初始化一个db句柄, 然后你可以通过他的open方法来打开一个数据库示例:#include /必要的包含文件.DB *dbp; /*数据库结构句柄*/u_int32_t flags; /*数据库打开标志*/int ret; /*用来接收通过db_create来创建的数据库是否成功*/*初始化结构体*因为数据库没有在环境中打开*所以环境指针为null. */ret = db_create(&dbp, NULL, 0);if (ret != 0) /*错误处理*/

2、*数据库打开标志*/flags = DB_CREATE; /*如果数据库不存在的化则创建一个新的*/*打开数据库*/ret = dbp-open(dbp, /*数据库结构指针*/NULL, /*事务处理指针*/my_db.db, /*数据库名*/NULL, /* Optional logical database name */DB_BTREE, /*数据库访问方式*/flags, /*打开标识*/0); /*文件模式(使用默认的) */if (ret != 0) /*错误处理*/关闭databases一旦你使用完毕某个数据库,你必须通过DB-close()来关闭他。除非你再次打开他否则关闭后

3、的数据库是不能在使用的。在关闭数据库之前请确保与之相关的游标先关闭,否则会有很多想不到的后果。关闭数据库后很多缓存在内存中的数据会被同步到你的硬盘中去,而且你也可以随时通过DB-sync()方法来随时同步数据库。使用示例:#include .DB *dbp; /*数据库句柄*/./*在这里进行一些数据库有关的操作*/./*当你不在使用他的时候关闭他. */if (dbp != NULL)dbp-close(dbp, 0);数据库打开表识(flags)如果在打开数据库的时候使用多个标识则可以通过按位或来添加多个标示示例:u_int32_t open_flags = DB_CREATE | DB_

4、EXCL;l标示说明:DB_CREATE:当数据不存在的时候创建一个新的DB_EXCL:创建专用数据库,如果数据库已经存在则将会打开失败,这个标识只能与DB_CREATE联合使用DB_RDONLY:以只读方式打开数据库,所有的写操作都被禁止。DB_TRUNCATE:打开数据库的同时清空数据库中原有的记录。下面这些方法可能会对你管理数据库有用lDB-get_open_flags():返回当前的数据库打开标识,如果在打开数据库前调用此方法会出错。使用示例:#include .DB *dbp;u_int32_t open_flags;/* Database open and subsequent o

5、perations omitted for clarity */dbp-get_open_flags(dbp, &open_flags);lDB-remove()如果一个数据库已经不再需要,则可以使用这个方法来删除。示例:#include .DB *dbp;/* Database open and subsequent operations omitted for clarity */dbp-remove(dbp, /*数据库句柄*/mydb.db, /*要移除的数据库*/NULL, /* Database to remove. This is* NULL so the entire file

6、 is* removed. */0); /* Flags. None used. */lDB-rename()给目标数据库改名,不要试图给一个已经打开了的数据库改名,那样会出错的。使用示例:#include .DB *dbp;/* Database open and subsequent operations omitted for clarity */dbp-rename(dbp, /* Database pointer */mydb.db, /*要被改名的数据库*/NULL, /* Database to rename. This is* NULL so the entire file i

7、s* renamed. */newdb.db, /*新的数据库名*/0);l与错误报告有关的几个函数set_errcall():设置出错的时候调用的函数set_errfile():设置出错的时候把错误信息写进去的文件指针(file *)set_errpfx():设置有数据库产生的错误类型err():产生一个错误,如果指定了错误的回调函数或文件指针则把错误发送给相应的处理方法或文件,否则发送到标准出错。errx():与err()雷同除此之外你可以通过db_strerror()来直接的返回错误代号。使用示例:/* Function called to handle any database err

8、or messages* issued by DB.*/voidmy_error_handler(const char *error_prefix, char *msg)/*相关的错误处理*/注册错误回调函数的方法如下#include #include .DB *dbp;int ret;/*为错误创建一个初始化的环境*/ret = db_create(&dbp, NULL, 0);if (ret != 0) fprintf(stderr, %s: %s/n, my_program,db_strerror(ret);/直接输出错误信息return(ret);/*设置回调函数*/dbp-set_e

9、rrcall(dbp, my_error_handler);dbp-set_errpfx(dbp, my_example_program);/设置回调前缀发出错误信息示例:ret = dbp-open(dbp,NULL,mydb.db,NULL,DB_BTREE,DB_CREATE,0);if (ret != 0) dbp-err(dbp, ret,Database open failed: %s, mydb.db);/发送错误信息return(ret);数据库环境管理要想设置数据库环境,首先你需要创建一个环境句柄并且打开他,在打开的时候你必须确保存在指定的目录,同样你页可以设置环境所使用的内

10、存cache.使用示例:#include .DB_ENV *myEnv; /* db环境结构句柄*/DB *dbp; /* db结构句柄*/u_int32_t db_flags; /*数据库打开标识*/u_int32_t env_flags; /*环境打开标识*/int ret; /*用来存储打开结果(成功还是失败)*/*创建一个数据库环境*/ret = db_env_create(&myEnv, 0);if (ret != 0) /错误处理return -1;/*打开环境. */env_flags = DB_CREATE | /*如果环境不存在则创建一个新的*/DB_INIT_MPOOL;

11、/*初始化内存大小. */ret = myEnv-open(myEnv, /*数据库环境指针*/export1/testEnv, /*环境目录*/env_flags, /*打开标识*/0); /* File mode (default) */if (ret != 0) fprintf(stderr, Environment open failed: %s, db_strerror(ret);/错误处理return -1;一但打开一个数据库环境后,你就可以通过他来打开数据库。通常情况下数据库默认存储在环境的根目录或其相对路径使用示例:/*创建数据库*/ret = db_create(&dbp,

12、myEnv, 0);if (ret != 0) /* Error handling goes here */*数据库打开标志*/db_flags = DB_CREATE; /* If the database does not exist,* create it.*/*打开数据库*/ret = dbp-open(dbp, /* db结构指针*/NULL, /*事务处理指针*/my_db.db, /*数据库名*/NULL, /* Optional logical database name */DB_BTREE, /*数据库访问方式*/db_flags, /*打开标识符*/0); /* File

13、 mode (using defaults) */if (ret != 0) /*错误处理*/当你使用完一个环境后必须关闭他,请确保在关闭一个数据库环境前先关闭所有数据库。使用示例:/*关闭数据库和环境*/if (dbp != NULL) dbp-close(dbp, 0);if (myEnv != NULL) myEnv-close(myEnv, 0);使用记录每条数据库记录是由两个DBT结构体所组成,一个代表键名(key),一个代表键值(value);为了存储数据我们只需要拿一个指针指向这段数据的首地址,并且标识出这段数据的长度就行了。具体使用示例如下:DBT key, data; /分别

14、定义key和valuefloat money = 122.45;char *description = Grocery bill.;/*开始使用DBT的时候给DBT清0 */memset(&key, 0, sizeof(DBT);memset(&data, 0, sizeof(DBT);key.data = &money;key.size = sizeof(float);data.data = description;data.size = strlen(description) + 1;为了能够得到这条记录,可以通过void指针指向DBT.某些系统的float和struct类型的内存对齐方式比较特殊,为了兼容性,应该使用Dbt的se

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 教育学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号