Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1245325
  • 博文数量: 76
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2689
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(76)

文章存档

2020年(4)

2019年(1)

2017年(2)

2016年(2)

2015年(7)

2014年(11)

2013年(13)

2012年(18)

2011年(2)

2010年(16)

分类: C/C++

2017-07-24 17:18:18


最近要使用一个嵌入式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;
}

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