免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1264 | 回复: 0
打印 上一主题 下一主题

在嵌入式Linux上实现BerkeleyDB数据库 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-16 21:14 |只看该作者 |倒序浏览

v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}

  Normal
  0
  
  7.8 磅
  0
  2
  
  false
  false
  false
  
   
   
   
   
   
   
   
   
   
   
   
   
  
  MicrosoftInternetExplorer4



st1\:*{behavior:url(#ieooui) }
/* Style Definitions */
table.MsoNormalTable
        {mso-style-name:普通表格;
        mso-tstyle-rowband-size:0;
        mso-tstyle-colband-size:0;
        mso-style-noshow:yes;
        mso-style-parent:"";
        mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
        mso-para-margin:0cm;
        mso-para-margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        font-size:10.0pt;
        font-family:"Times New Roman";
        mso-ansi-language:#0400;
        mso-fareast-language:#0400;
        mso-bidi-language:#0400;}
在嵌入式Linux上实现BerkeleyDB数据库
Author:
misty(qibing83@yahoo.com.cn)
Berkeley DB原是Sleepycat软件公司的产品,现被Oracle收购。Berkeley DB使用简单的接口来完成所有数据库的操作,而不是使用SQL语言。
1.1      
下载及安装
到Oracle网站上下载版本db-4.4.20.NC.tar.gz,解压后,到目录build-unix下,运行
#../dist/configure –prefix=/home/qibing/opt
#make
#make install
则库文件和头文件安装在目录/home/qibing/opt下,要完全删除运行 #make realclean即可。
1.2      
实现及验证
建立文件berkeley.c,并使用下面命令编译
#gcc –I/home/qibing/opt/inclue –L/home/qibing/opt/lib
–o Berkeley Berkeley.c –ldb-4.4

Berkeley.c
#include
#include
#include
#include
//only this head should
include for use bdb.
#include   
#define DATABASE
"demo.db"

int main()
{
    DB_ENV *myEnv;
    DB *dbp;
    DBT key, data;
    int ret,t_ret;
    u_int32_t env_flags;
    //........... Create an environment object
and initialize it for error reporting
    ret = db_env_create(&myEnv, 0);
    if (ret != 0)
    {
          fprintf(stderr, "Error creating
env handle: %s\n", db_strerror(ret));
          return -1;
    }
    //........If the environment does not exist
create it. Initialize the in-memory cache.
    env_flags = DB_CREATE | DB_INIT_MPOOL;
    //........Open the environment.
    ret =
myEnv->open(myEnv,"/home/yangbin1/yangjian/my/db/testevn",env_flags,0);
    if (ret != 0)
    {
          fprintf(stderr, "Environment
open failed: %s", db_strerror(ret));
          return -1;
    }

    if ((ret = db_create(&dbp, myEnv, 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");
/*
    //......put data
    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");
    }
*/

    //........put data 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");

    //.......get data
    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");

    //......del data
    if((ret = dbp->del(dbp, NULL, &key, 0)) == 0)
    printf("db: %s: key was
deleted.\n", (char *)key.data);
    else
    dbp->err(dbp, ret, "DB->del");

    //.........close, only when the db
successful closed,the data can real write to the disk.
    //if ((t_ret = dbp->close(dbp, 0)) != 0
&& ret == 0)
    //ret = t_ret;
    //exit(ret);
    if (dbp != NULL)
    dbp->close(dbp, 0);
    //.........close evn
    //........When you are done with an
environment, you must close it.
    //........Before you close an environment,
make sure you close any opened databases
    if (myEnv != NULL)
    myEnv->close(myEnv, 0);

    return 0;
}
End of Berkeley.c
编译好后,运行./berkeley即可。 附件为本文中的代码(这个代码我未具体验证)


  
  
  
  
  
  
  
  
  
  
  
  





       
        文件:berkeley.rar
        大小:1KB
        下载:
下载
       
参考:http://www.cnblogs.com/huqingyu/archive/2006/10/06/522251.html
在嵌入式上实现时,用交叉编译gcc编译并把库放在目标板上。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/70351/showart_1003349.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP