• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

开源嵌入式数据库Berkeley DB

发布: 2008-4-28 10:32 | 作者: 不详 | 来源: csai | 查看: 215次 | 进入软件测试论坛讨论

领测软件测试网

 

下面这段代码示范了如何向数据库中添加新的数据:

int main()
{ DB *dbp;
 DBT key, data;
 int ret;
 if ((ret = db_create(&dbp, NULL, 0)) != 0) {
  fprintf(stderr, "db_create: %s\n", db_strerror(ret));
  exit (1);
 }
 if ((ret = dbp->open(dbp,
  NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
  dbp->err(dbp, ret, "%s", DATABASE);
  exit (1);
 }
 memset(&key, 0, sizeof(key));
 memset(&data, 0, sizeof(data));
 key.data = "sport";
 key.size = sizeof("sport");
 data.data = "football";
 data.size = sizeof("football");
 if ((ret = dbp->put(dbp, NULL, &key, &data, 0)) == 0)
  printf("db: %s: key stored.\n", (char *)key.data);
 else
  dbp->err(dbp, ret, "DB->put");
}
 
  代码首先声明了两个DBT结构变量,并分别用字符串“sport”和“football”进行填充。它们随后作为关键字和数据传递给用来添加数据的DB->put()函数。DBT结构几乎会在所有同数据访问相关的函数中被用到。

  在向数据库中添加数据时,如果给定的关键字已经存在,大多数应用会对于已经存在的数据采用覆盖原则。也就是说,如果数据库中已经保存了一个“sport/basketball”对,再次调用DB->put()函数添加一个“sport/football”对,那么先前保存的那些数据将会被覆盖。但Berkeley DB允许在调用DB->put()函数时指定参数“DB_NOOVERWRITE”,声明不对数据库中已经存在的数据进行覆盖,其代码如下:

if ((ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE)) == 0)
 printf("db: %s: key stored.\n", (char *)key.data);
else
 dbp->err(dbp, ret, "DB->put");
 
  一旦给出“DB_NOOVERWRITE”标记,如果DB->put()函数在执行过程中发现给出的关键字在数据库中已经存在了,就无法成功地把该Key/Data对添加到数据库中,于是将返回错误代号“DB_KEYEXIST”。

  7、检索数据

  从Berkeley DB数据库中检索数据可以通过调用DB->get()函数来完成,其原型如下所示:

int DB->get(DB *db, DB_TXN *txnid, DBT *key, DBT *data, u_int32_t flags);
 

  下面这段代码示范了如何从数据库中检索出所需的数据:

int main()
{ DB *dbp;
 DBT key, data;
 int ret;
 if ((ret = db_create(&dbp, NULL, 0)) != 0) {
  fprintf(stderr, "db_create: %s\n", db_strerror(ret));
  exit (1);
 }
 if ((ret = dbp->open(dbp,
  NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
  dbp->err(dbp, ret, "%s", DATABASE);
  exit (1);
 }
 memset(&key, 0, sizeof(key));
 memset(&data, 0, sizeof(data));
 key.data = "sport";
 key.size = sizeof("sport");
 if ((ret = dbp->get(dbp, NULL, &key, &data, 0)) == 0)
  printf("db: %s: key retrieved: data was %s.\n",
   (char *)key.data, (char *)data.data);
 else
  dbp->err(dbp, ret, "DB->get");
}
 

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

54/5<12345>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网