在下載安裝這個數據庫之后,來使用這樣的數據庫做一個例子。
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這個東東,感覺上真的是像一個表。
[Sword.Hell]
posted on 2006-12-14 11:14
Sword.Hell blog 閱讀(1590)
評論(1) 編輯 收藏 引用 所屬分類:
使用Berkeley DB