在下載安裝這個(gè)數(shù)據(jù)庫之后,來使用這樣的數(shù)據(jù)庫做一個(gè)例子。
1.創(chuàng)建一個(gè)數(shù)據(jù)庫
#include?
<
db_cxx.h
>
#include?
<
iostream
>
#include?
<
string
>
using
?
namespace
?std;
int
?main(
int
?,
char
?
*
[])

{
????
try
????
{
????????Db?db(NULL,NULL);
????????
//
????????
//
?d:\\MyTest.db????數(shù)據(jù)文件目錄
????????
//
?DB_BTREE????????????使用的文件保存的結(jié)構(gòu)
????????
//
?DB_CREATE????????創(chuàng)建方式的打開
????????
//
?NULL????????????????在windows里不使用此結(jié)構(gòu)
????????
//
????????
if
?(
0
?
==
?db.open(NULL,
"
d:\\MyTest.db
"
,
"
MyFirstDB
"
,DB_BTREE,DB_CREATE,NULL))

????????
{
????????????cout
<<
"
創(chuàng)建數(shù)據(jù)庫文件!
"
<<
endl;
????????}
????}
????
catch
?(DbException?
&
e)

????
{
????????cout
<<
"
創(chuàng)建數(shù)據(jù)庫失敗:
"
;
????????cout
<<
e.what()
<<
endl;
????}
????
????
return
?
0
;
}
2.向數(shù)據(jù)庫里保存一個(gè)記錄
#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
<<
"
內(nèi)容:
"
<<
(
char
*
)pResInst
->
name
<<
endl;
????????????}
????????}
????}
????
catch
?(DbException?
&
e)

????
{
????????cout
<<
"
失敗:
"
<<
e.what()
<<
endl;
????}
????cout
<<
"
hello?the?world
"
<<
endl;
}
3.從數(shù)據(jù)庫里檢索出數(shù)據(jù)
#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
<<
"
內(nèi)容:
"
<<
(
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
;
}
這一些東西都是一些基本的操作。主要是想說明這個(gè)Berkeley DB是很強(qiáng)調(diào)一個(gè)這樣的概念:key與Data。他們都是一個(gè)很原始buffer塊。基于這一個(gè)數(shù)據(jù)庫的基礎(chǔ),我們可自己做一些工作,其實(shí)有一些像自己去實(shí)現(xiàn)一數(shù)據(jù)庫出來。這個(gè)上面的MyFirstDB這個(gè)東東,感覺上真的是像一個(gè)表。
[Sword.Hell]
posted on 2006-12-14 11:14
Sword.Hell blog 閱讀(1591)
評論(1) 編輯 收藏 引用 所屬分類:
使用Berkeley DB