Berkeley DB的基本使用

來源:互聯網
上載者:User

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這個東東,感覺上真的是像一個表。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.