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