Berkeley DB的基本使用

Berkeley DB的基本使用


在下载安装这个数据库之后,来使用这样的数据库做一个例子。
1.创建一个数据库

 #include  < db_cxx.h >
#include  < iostream >
#include  < string >
 
 using   namespace  std;
 int  main( int  , char   * [])
  {
     try
       {
        Db db(NULL,NULL);
         //
         //  d://MyTest.db    数据文件目录
         //  DB_BTREE            使用的文件保存的结构
         //  DB_CREATE        创建方式的打开
         //  NULL                在windows里不使用此结构
         //
          if  ( 0   ==  db.open(NULL, " d://MyTest.db " , " MyFirstDB " ,DB_BTREE,DB_CREATE,NULL))
          {
            cout << " 创建数据库文件! " << endl;
        }
    }
     catch  (DbException  & e)
      {
        cout << " 创建数据库失败: " ;
        cout << e.what() << endl;
    }
   
     return   0 ;
}

2.向数据库里保存一个记录

 #include  < iostream >
#include  < db_cxx.h >
 using   namespace  std;

typedef unsigned  int  UINT32,  * PUINT32 ;
typedef unsigned  char  UINT8,  * PUINT8 ;

#pragma pack(push,  1 )
typedef  struct  _SMyUser
  {
    UINT32 userID;
     char  name[ 32 ];
} SMyUser;
#pragma pack(pop)

 void  main()
  {
     try
       {
        Db db(NULL,NULL);
         if  (db.open(NULL, " d://MyTest.db " , " MyFirstDB " ,DB_BTREE,DB_RDONLY,NULL)  ==   0 )
          {
            SMyUser resInst;
            memset( & resInst, 0 , sizeof (SMyUser));
            resInst.userID = 1 ;

            Dbt dbKey( & (resInst.userID), sizeof (resInst.userID));
            Dbt dbData;
            memset( & dbData, 0 , sizeof (dbData));
             // Dbt dbData(&resInst,sizeof(resInst));
              if  ( 0 == db. get (NULL, & dbKey, & dbData, 0 ))
              {
                cout << " 增加成功 " << endl;

                SMyUser  * pResInst = (SMyUser * )dbData.get_data();
                cout << " 内容: " << ( char * )pResInst -> name << endl;
            }
        }
    }
     catch  (DbException  & e)
      {
        cout << " 失败: " << e.what() << endl;
    }
    cout << " hello the world " << endl;
}


3.从数据库里检索出数据

 #include  < iostream >
#include  < db_cxx.h >
 using   namespace  std;

typedef unsigned  int  UINT32,  * PUINT32 ;
typedef unsigned  char  UINT8,  * PUINT8 ;

#pragma pack(push,  1 )
typedef  struct  _SMyUser
  {
    UINT32 userID;
     char  name[ 32 ];
} SMyUser;
#pragma pack(pop)

 void  main()
  {
     try
       {
        Db db(NULL,NULL);
         if  (db.open(NULL, " d://MyTest.db " , " MyFirstDB " ,DB_BTREE,DB_RDONLY,NULL)  ==   0 )
          {
            SMyUser resInst;
            memset( & resInst, 0 , sizeof (SMyUser));
            resInst.userID = 1 ;

            Dbt dbKey( & (resInst.userID), sizeof (resInst.userID));
            Dbt dbData;
            memset( & dbData, 0 , sizeof (dbData));
             // Dbt dbData(&resInst,sizeof(resInst));
              if  ( 0 == db. get (NULL, & dbKey, & dbData, 0 ))
              {
                cout << " 增加成功 " << endl;

                SMyUser  * pResInst = (SMyUser * )dbData.get_data();
                cout << " 内容: " << ( char * )pResInst -> name << endl;
            }
        }
    }
     catch  (DbException  & e)
      {
        cout << " 失败: " << e.what() << endl;
    }
    cout << " hello the world " << endl;
}
4.删除一条记录


 #include  < iostream >
#include  < db_cxx.h >
 
 using   namespace  std;

typedef unsigned  int  UINT32,  * PUINT32 ;
typedef unsigned  char  UINT8,  * PUINT8 ;

#pragma pack(push,  1 )
typedef  struct  _SMyUser
  {
    UINT32 userID;
     char  name[ 32 ];
} SMyUser;
#pragma pack(pop)

 int  main()
  {
     try
       {
        Db db(NULL,NULL);
         if  (db.open(NULL, " d://MyTest.db " , " MyFirstDB " ,DB_BTREE,NULL,NULL)  ==   0 )
          {
            SMyUser resInst;
            memset( & resInst, 0 , sizeof (SMyUser));
            resInst.userID = 1 ;

            Dbt dbKey( & (resInst.userID), sizeof (resInst.userID));
           
             if  ( 0 == db.del(NULL, & dbKey, 0 ))
              {
                cout << " 增加成功 " << endl;
            }
        }
    }
     catch  (DbException  & e)
      {
        cout << " 失败: " << e.what() << endl;
    }
     return   0 ;
}
这一些东西都是一些基本的操作。主要是想说明这个Berkeley DB是很强调一个这样的概念:key与Data。他们都是一个很原始buffer块。基于这一个数据库的基础,我们可自己做一些工作,其实有一些像自己去实现一数据库出来。这个上面的MyFirstDB这个东东,感觉上真的是像一个表。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值