最近在倒腾BDB,才发现自己确实在C++这一块能力很弱,看了一天的api文档,总算是把BDB的一些api之间的关系理清了,希望初学者要理清数据库基本知识中的环境,句柄,游标的基本概念,这样有助于你更好地理解BDB的程序理解理念吧。(此处要注意,BDB的Database相当于一般数据库的数据表,Environment相当于数据库。)

以下是berkerly db的各个文档的介绍:(这是C的,C++的一样)

  BDB_Installation.pdf: BDB的安装文档,涵盖了不同操作系统,不同的编译工具,不同编程语言等多方面的详细信息;

  BDB_Prog_Reference.pdf: 该文档是使用BDB的开发人员的参考手册,主要从BDB的各种功能和机制的原理进行阐述,供使用BDB作为存储引擎来编写程序的各类程序员(C、Java、C#、Perl)阅读;

  BDB-Porting-Guide.pdf: 该文档是给需要将BDB移植到一个新的平台开发人员准备的;

  InMemoryDBApplication.pdf: 基于内存的BDB应用的相关知识;

  BDB-C_APIReference.pdf: C API参考手册,跟BDB_Prog_Reference.pdf结合使用;

  BerkeleyDB-Core-C-GSG.pdf: 为C语言开发人员提供的BDB的入门手册;

  BerkeleyDB-Core-C-Txn.pdf: 为C语言开发人员提供的BDB事务方面的手册;

  Replication-C-GSG.pdf: 为C语言开发人员提供的BDB复制方面的手册;

具体的介绍我做完这个项目,会详细总结以下,现在先简单说说它的读写,可以节省一些不想看文档的人的时间吧。

  首先是C语言的读写,这一块我也是从网上找的,因为C语言的比较简单,自己也没有太多尝试,但是以下代码亲测可用。

  这个例子就是建立一个简单的数据库,打开数据库,写一个记录进去,然后读出记录,然后将写入的记录删除,然后关闭environment和数据库。

  

  1. #include <sys/types.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. //only this head should include for use bdb.
  6. #include <db.h>
  7. #define DATABASE "yangjian.db"
  8.  
  9. int main()
  10. {
  11. DB_ENV *myEnv;
  12. DB *dbp;
  13. DBT key, data;
  14. int ret,t_ret;
  15. u_int32_t env_flags;
  16. //........... Create an environment object and initialize it for error reporting
  17. ret = db_env_create(&myEnv, );
  18. if (ret != )
  19. {
  20. fprintf(stderr, "Error creating env handle: %s\n", db_strerror(ret));
  21. return -;
  22. }
  23. //........If the environment does not exist create it. Initialize the in-memory cache.
  24. env_flags = DB_CREATE | DB_INIT_MPOOL;
  25. //........Open the environment.
  26. ret = myEnv->open(myEnv,"/home/yangbin1/yangjian/my/db/testevn",env_flags,);
  27. if (ret != )
  28. {
  29. fprintf(stderr, "Environment open failed: %s", db_strerror(ret));
  30. return -;
  31. }
  32.  
  33. if ((ret = db_create(&dbp, myEnv, )) != )
  34. {
  35. fprintf(stderr, "db_create: %s\n", db_strerror(ret));
  36. exit ();
  37. }
  38.  
  39. if ((ret = dbp->open(dbp, NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, )) != )
  40. {
  41. dbp->err(dbp, ret, "%s", DATABASE);
  42. exit ();
  43. }
  44. memset(&key, , sizeof(key));
  45. memset(&data, , sizeof(data)); key.data = "sport";
  46. key.size = sizeof("sport");
  47. data.data = "football";
  48. data.size = sizeof("football");
  49. /*
  50. //......put data
  51. if ((ret = dbp->put(dbp, NULL, &key, &data, 0)) == 0)
  52. {
  53. printf("db: %s: key stored.\n", (char *)key.data);
  54. }
  55. else
  56. {
  57. dbp->err(dbp, ret, "DB->put");
  58. }
  59. */
  60.  
  61. //........put data NOOVERWRITE
  62. if ((ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE)) == )
  63. printf("db: %s: key stored.\n", (char *)key.data);
  64. else dbp->err(dbp, ret, "DB->put");
  65.  
  66. //.......get data
  67. if ((ret = dbp->get(dbp, NULL, &key, &data, )) == )
  68. printf("db: %s: key retrieved: data was %s.\n", (char *)key.data, (char *)data.data);
  69. else
  70. dbp->err(dbp, ret, "DB->get");
  71.  
  72. //......del data
  73. if((ret = dbp->del(dbp, NULL, &key, )) == )
  74. printf("db: %s: key was deleted.\n", (char *)key.data);
  75. else
  76. dbp->err(dbp, ret, "DB->del");
  77.  
  78. //.........close, only when the db successful closed,the data can real write to the disk.
  79. //if ((t_ret = dbp->close(dbp, 0)) != 0 && ret == 0)
  80. //ret = t_ret;
  81. //exit(ret);
  82. if (dbp != NULL)
  83. dbp->close(dbp, );
  84. //.........close evn
  85. //........When you are done with an environment, you must close it.
  86. //........Before you close an environment, make sure you close any opened databases
  87. if (myEnv != NULL)
  88. myEnv->close(myEnv, );
  89.  
  90. return ;
  91. }

注意ret的使用,在文档中会看到很多关于返回值的叙述,过一段时间我会 认真总结一下。

  然后是C++的编写,这里我分为初级版,中级版,以及我暂时还达不到的终极版。

  首先是初级版,就是排除了任何异常处理,几乎是最简单的读写操作,这也是我打算在我这个简单的小玩意里使用的。

  这一段是我在csdn上找的一个人写的,他总结的比我知道的要多的多:http://blog.csdn.net/mxzy55560593/article/details/7063965

  然后是中级版,中级版就是加了简单的异常处理,就是我上一篇博文里的那个简单示例:http://www.cnblogs.com/sexybear/p/3472501.html

  最后是终极版,终极版是进行了很复杂的考虑,但也几乎是最保险的了,是oracle的维护人员写的,能写出那样的代码也是我的目标:http://www.bdbchina.com/2009/02/berkeley-db%E7%A4%BA%E4%BE%8B%E7%A8%8B%E5%BA%8F%E8%AF%A6%E8%A7%A3-1/

这些几乎都是我收集来的,还没有我自己写的,是因为我自己能力还没超过这些示例,还是不要献丑了,不过等过一段时间闲下来还是会好好做一些关于BDB的自己的总结的。希望这些能对大家有用吧,谢谢了。

  

 

berkerly db 中简单的读写操作(有一些C的 还有一些C++的)的更多相关文章

  1. 使用Python对Excel表格进行简单的读写操作(xlrd/xlwt)

    算是一个小技巧吧,只是进行一些简单的读写操作.让人不爽的是xlrd和xlwt是相对独立的,两个模块的对象不能通用,读写无法连贯操作,只能单独读.单独写,尚不知道如何解决. #①xlrd(读) #cod ...

  2. kernel中文件的读写操作可以使用vfs_read()和vfs_write

    需要在Linux kernel--大多是在需要调试的驱动程序--中读写文件数据.在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有: filp_open() fil ...

  3. (六)kernel中文件的读写操作可以使用vfs_read()和vfs_write

    需要在Linux kernel--大多是在需要调试的驱动程序--中读写文件数据.在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有: filp_open() fil ...

  4. python中文本的读写操作

    文本的操作 函数的排序操作: def func(i): return i[2] list=[('曹操',101,'c'),('吕布',100,'d'),('刘备',200,'l'),('大乔',50, ...

  5. 『无为则无心』Python基础 — 41、Python中文件的读写操作(一)

    目录 1.文件操作步骤 2.文件的读写操作 (1)文件的打开 (2)打开文件模式 (3)获取一个文件对象 (4)关于文件路径 1.文件操作步骤 当我们要读取或者写入文件时,我们需要打开文件,在操作完毕 ...

  6. 在c#中IO流读写操作

    1.使用FileStream读写文件 文件头: using System;using System.Collections.Generic;using System.Text;using System ...

  7. Python中文件的读写操作的几种方法

    对文件的操作,步骤为:打开一个文件-->读取/写入内容-->保存文件 文件读写的3中模式 # 1.w 写模式,它是不能读的,如果用w模式打开一个已经存在的文件,会清空以前的文件内容,重新写 ...

  8. Python中文件的读写操作

    文件操作基本流程: 1. 介绍 计算机系统是由计算机硬件,操作系统,和应用程序三部分组成. 内存 存放不持久 硬盘 可以使数据持久化 文件操作  数据持久化的一种 全栈开发  框架类 2. 文件的操作 ...

  9. ThinkPHP中简单的CURD操作

    前言 我们通过一个简答例子来简述CURD的操作.首先看一下数据库的样子,其中id为自增行,其它是varchar 一.查询操作 首先,创建在Controller文件夹下创建一个User控制器,在该控制器 ...

随机推荐

  1. Jquery实现页面上所有的checkbox只能选中一个

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  2. Shell中的函数

    一.在脚本中定义函数 与变量一样,在使用函数之前应该对函数进行定义.与其他编程类语言相比,由于没有数据类型的概念,因此也不必定义函数的类型. (1)在脚本中可以使用以下方式定义函数: function ...

  3. Python面试题汇总

    原文:http://blog.csdn.net/jerry_1126/article/details/44023949 拿网络上关于Python的面试题汇总了,给出了自认为合理的答案,有些题目不错,可 ...

  4. 项目源码--JSP在线客服系统(SSH框架技术)源码

    下载源码 技术要点: 1.网站开发技术框架 2.SSH技术框架(Struct,Spring,Hibrnate) 3.JSP技术框架 4.MYSQL数据库数据存储 5.即时通讯技术 6.源码带详细的中文 ...

  5. Collections.sort(List<T> Comparator) 自定义排序

    Collections.sort(basicinfoList, new Comparator<MlisBasicinfo>() { @Override public int compare ...

  6. Mac上安装Tomcat服务器

    1.下载Tomcat安装包,下载地址:http://tomcat.apache.org/ 选择你想要的版本,在这里我选择下载Tomcat 8 ps:你也可以使用axel多线程下载命令下载 下载的速度很 ...

  7. EF——一个实体对应两张表,两个实体对应一张表 06 (转)

    本篇日记我们将详细探讨如何将表现领域的类映射到现有的数据库.现在的经济形势不是太好,很多公司都取消了开发新系统的预算.在这种情况下,通常的做法是把原有的几个系统修改一下做个集成,先凑合用着得了.如果要 ...

  8. Android Studio开发RecyclerView遇到的各种问题以及解决

    是大神总结的,我直接提供链接了,以便以后学习 大神链接: 问题一和解决:http://www.cnblogs.com/yunfang/p/5830953.html 问题二和解决:http://www. ...

  9. bootstrap表格多样式及代码

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  10. Android读取RAM,ROM,SD卡容量

    1)简介 一般人们在买手机的时候,在手机配置上都会出现"内存容量:512MB ROM+512MB RAM "等等类似这样的说明,可能很多人都知道RAM的意思就是运存的意思,但是对于 ...