Chinaunix首页 | 论坛 | 认证专区 | 博客 登录 | 注册

Tiger

心外无物

  • 博客访问: 791559
  • 博文数量: 82
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2608
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(82)

文章存档

2017年(2)

2016年(2)

2015年(7)

2014年(16)

2013年(16)

2012年(21)

2011年(2)

2010年(16)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题
Berkeley DB简单使用 2017-07-24 17:18:18

分类: C/C++


最近要使用一个嵌入式key value的数据库,最初选择是level db。不过在windows下编译非常麻烦,所以另外选择了Berkeley DB。使用也非常简单,可以从源码编译,也可以安装官方的安装版,然后copy出.h,.lib和.dll集成到自己程序中使用。本文使用的版本是5.3,使用到的文件如下:
libdb53.lib
libdb_sql53.lib
libdb_stl53.lib
libdb53.dll
还有include目录整个拿来。
目前简单测试了两个功能:key value的读写, 二进制的读写。
其实这两种用法很接近:

int CDBMgr::putString(const char* key, const char* value)
{
Dbt dbKey((char*)key, strlen(key)+1);
Dbt dbValue((char*)value, strlen(value)+1);
int ret = m_pDB->put(0, &dbKey, &dbValue, DB_NOOVERWRITE);
if (ret == DB_KEYEXIST)
{
return 1;
}
return 0;
}


int CDBMgr::putBlob(const char* key, const unsigned char* data, int len)
{

Dbt dbKey((char*)key, strlen(key)+1);
Dbt dbValue((unsigned char*)data, len);
int ret = m_pDB->put(0, &dbKey, &dbValue, DB_NOOVERWRITE);
if (ret == DB_KEYEXIST)
{
return 1;
}
m_pDB->sync(0);

return 0;
}

主要区别应该就是二进制多了个长度吧。
简单做了封装,代码在:https://github.com/sxcong/test_BerkeleyDB
VC2010工程,把代码放到vc2008或以上版本应该都可以。
可能会碰到一个问题,提示某个宏已经定义,我这边的方案是修改系统文件的宏,不要改bdb .h的,除非自己重编译。
阅读(317) | 评论(0) | 转发(0) |
0

上一篇: 围棋开源软件DarkForestGo学习

下一篇:没有了

给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册