一个Secondary Database例子 Berkeley DB zz
上一篇 / 下一篇 2008-07-24 19:04:40 / 个人分类:C
#include <db.h>木铎校园 BBS 社区nrek;U'Gt
#include <stdio.h>木铎校园 BBS 社区d M8q:{#JL+T7}u5}s%t
#include <stdlib.h>
g-X)_8N y:_s0#include <string.h>木铎校园 BBS 社区Jm?@m(a&c
木铎校园 BBS 社区t)p5h0wZr
typedef struct people {
9c9W,o1PG(vr0 int age;
dwA,\&Eh? p0 char company_name[20];
MOJ$B6C%g@0} PEOPLE;
B*r_Q8F'iu(oS0
$X|h0mS}#~0int get_people_key(DB *sdbp, const DBT *pkey, const DBT *pdata, DBT *skey);
XQ aE1q0int main(int argc, char *argv[])
:K!Un ^H$`l1T0{
ex@W!E)G`0 DB *dbp, *sdbp;木铎校园 BBS 社区~tdq+xZ/v!\
DBC *cur, *scur;
f.pXa `*xFt0 DBT key, data;
V-t\;pN$S0 PEOPLE chunjian,yipeng,chaoyang;
;@V-Fhp1^3_0 int ret;
S/[,@ z3I!G/mZ%~Scr9K0木铎校园 BBS 社区{kGe1u4HQq)^
chunjian.age = 25;
2Gu'M@ec0 strcpy(chunjian.company_name, "sina");
P6T La |zJe+\/]0 yipeng.age = 26;木铎校园 BBS 社区'qnZP I5N
strcpy(yipeng.company_name, "sina");
y0f.]'U4gZ*Y,j#g.y&QP0 chaoyang.age = 32;
d2Y/J$c8pfY[.{0 strcpy(chaoyang.company_name, "sohu");木铎校园 BBS 社区4ka{)~a
u/MfE/` N0r0 db_create(&dbp, NULL, 0);木铎校园 BBS 社区Tp2Ld)Dw$]*s
db_create(&sdbp, NULL, 0);木铎校园 BBS 社区N1eIiz
lA Ad7S0 sdbp->set_flags(sdbp, DB_DUPSORT);
w"t/d(X7G6UO,}`h0
]2?haE0 dbp->open(dbp, NULL, "primary.db", NULL, DB_BTREE, DB_CREATE, 0);
k*Gs/UWf0 sdbp->open(sdbp, NULL, "secondary.db", NULL, DB_BTREE, DB_CREATE, 0);
!kK2PNn-H v0木铎校园 BBS 社区'r!NQ*bR0JK n
dbp->associate(dbp, NULL, sdbp, get_people_key, 0);
7rRm [Z:Xb!t$s1p0木铎校园 BBS 社区8i7Ye0R9Z[
memset(&key, 0, sizeof(DBT));
7IrEOez,\h)c0 memset(&data, 0, sizeof(DBT));木铎校园 BBS 社区/P0H)gl t0x-oH
key.data = (void *)("chunjian");
"Y+`L B.PMCM'n~o0 key.size = strlen("chunjian")+1;木铎校园 BBS 社区 F x5p5u5Q:?N/s ~
data.data = &chunjian;木铎校园 BBS 社区^@b1Op'XRY!j
data.size = sizeof(PEOPLE);
w1AF+o u!sP(t0 ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);木铎校园 BBS 社区2[3J6j9qGk
if (ret != 0)木铎校园 BBS 社区r(?Epo
printf("error: %s\n",db_strerror(ret));木铎校园 BBS 社区F W1le/g&m4U!N6b!lV
木铎校园 BBS 社区{6Y,g ~Fbx&mSi
memset(&key, 0, sizeof(DBT));
W}(w+K%Y"S`])In0 memset(&data, 0, sizeof(DBT));木铎校园 BBS 社区[Sgsnhm;]`
key.data = (void *)("yipeng");木铎校园 BBS 社区q]#ES#d1MhL?
key.size = strlen("yipeng")+1;
o%eq2S-Gh4W0 data.data = &yipeng;
\~*a-c9ktTz0 data.size = sizeof(PEOPLE);
/b1K0s o7dw0 ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);木铎校园 BBS 社区 co7S2eO5r
if (ret != 0)
EJ4mB)|FV6YA0 printf("error: %s\n",db_strerror(ret));
~ Z3RF$kg$u[0木铎校园 BBS 社区/lhS[g9L
memset(&key, 0, sizeof(DBT));
(e+mJ$zi]LY0 memset(&data, 0, sizeof(DBT));
]"mW+bPz(t&v0 key.data = (void *)("chaoyang");
5J vm^z"vC{9\2Ci0 key.size = strlen("chaoyang")+1;
N R2O.h2U XknA0 data.data = &chaoyang;木铎校园 BBS 社区~T bk` a3U"fN
data.size = sizeof(PEOPLE);
1JJr,j!r!E1`+mxR0 ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);木铎校园 BBS 社区/}+`*SJV
if (ret != 0)木铎校园 BBS 社区O!rn;NYe
printf("error: %s\n",db_strerror(ret));木铎校园 BBS 社区'\Vv.Rx9n$H8w$B/Z
T$h0q+a!r+c!E_0 dbp->sync(dbp, 0);
H0I ik3t5d*u {4S0 sdbp->sync(sdbp, 0);木铎校园 BBS 社区0c)E[,|5Re
木铎校园 BBS 社区k;@c$['AG/W\,{
dbp->cursor(dbp, NULL, &cur, 0);
0M Z1qp#p#KGBs0 memset(&key, 0, sizeof(DBT));
"s(Rxr uc0 memset(&data, 0, sizeof(DBT));
e!?8Zu/~ [0 while((ret = cur->c_get(cur, &key, &data, DB_NEXT)) == 0)木铎校园 BBS 社区druK5`u7s4AqV4~
printf("%s\tage=%d\tcompany=%s\n", key.data, ((PEOPLE *)(data.data))->age, ((PEOPLE *)(data.data))->company_name);
y:a7\q*{0 cur->c_close(cur);
tV)W q0b9I4Q+q{v0
v8YlR6U2Q3i,H0 sdbp->cursor(sdbp, NULL, &scur, 0);
!yjfm8Q^L0 memset(&key, 0, sizeof(DBT));
#include <stdio.h>木铎校园 BBS 社区d M8q:{#JL+T7}u5}s%t
#include <stdlib.h>
g-X)_8N y:_s0#include <string.h>木铎校园 BBS 社区Jm?@m(a&c
木铎校园 BBS 社区t)p5h0wZr
typedef struct people {
9c9W,o1PG(vr0 int age;
dwA,\&Eh? p0 char company_name[20];
MOJ$B6C%g@0} PEOPLE;
B*r_Q8F'iu(oS0
$X|h0mS}#~0int get_people_key(DB *sdbp, const DBT *pkey, const DBT *pdata, DBT *skey);
XQ aE1q0int main(int argc, char *argv[])
:K!Un ^H$`l1T0{
ex@W!E)G`0 DB *dbp, *sdbp;木铎校园 BBS 社区~tdq+xZ/v!\
DBC *cur, *scur;
f.pXa `*xFt0 DBT key, data;
V-t\;pN$S0 PEOPLE chunjian,yipeng,chaoyang;
;@V-Fhp1^3_0 int ret;
S/[,@ z3I!G/mZ%~Scr9K0木铎校园 BBS 社区{kGe1u4HQq)^
chunjian.age = 25;
2Gu'M@ec0 strcpy(chunjian.company_name, "sina");
P6T La |zJe+\/]0 yipeng.age = 26;木铎校园 BBS 社区'qnZP I5N
strcpy(yipeng.company_name, "sina");
y0f.]'U4gZ*Y,j#g.y&QP0 chaoyang.age = 32;
d2Y/J$c8pfY[.{0 strcpy(chaoyang.company_name, "sohu");木铎校园 BBS 社区4ka{)~a
u/MfE/` N0r0 db_create(&dbp, NULL, 0);木铎校园 BBS 社区Tp2Ld)Dw$]*s
db_create(&sdbp, NULL, 0);木铎校园 BBS 社区N1eIiz
lA Ad7S0 sdbp->set_flags(sdbp, DB_DUPSORT);
w"t/d(X7G6UO,}`h0
]2?haE0 dbp->open(dbp, NULL, "primary.db", NULL, DB_BTREE, DB_CREATE, 0);
k*Gs/UWf0 sdbp->open(sdbp, NULL, "secondary.db", NULL, DB_BTREE, DB_CREATE, 0);
!kK2PNn-H v0木铎校园 BBS 社区'r!NQ*bR0JK n
dbp->associate(dbp, NULL, sdbp, get_people_key, 0);
7rRm [Z:Xb!t$s1p0木铎校园 BBS 社区8i7Ye0R9Z[
memset(&key, 0, sizeof(DBT));
7IrEOez,\h)c0 memset(&data, 0, sizeof(DBT));木铎校园 BBS 社区/P0H)gl t0x-oH
key.data = (void *)("chunjian");
"Y+`L B.PMCM'n~o0 key.size = strlen("chunjian")+1;木铎校园 BBS 社区 F x5p5u5Q:?N/s ~
data.data = &chunjian;木铎校园 BBS 社区^@b1Op'XRY!j
data.size = sizeof(PEOPLE);
w1AF+o u!sP(t0 ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);木铎校园 BBS 社区2[3J6j9qGk
if (ret != 0)木铎校园 BBS 社区r(?Epo
printf("error: %s\n",db_strerror(ret));木铎校园 BBS 社区F W1le/g&m4U!N6b!lV
木铎校园 BBS 社区{6Y,g ~Fbx&mSi
memset(&key, 0, sizeof(DBT));
W}(w+K%Y"S`])In0 memset(&data, 0, sizeof(DBT));木铎校园 BBS 社区[Sgsnhm;]`
key.data = (void *)("yipeng");木铎校园 BBS 社区q]#ES#d1MhL?
key.size = strlen("yipeng")+1;
o%eq2S-Gh4W0 data.data = &yipeng;
\~*a-c9ktTz0 data.size = sizeof(PEOPLE);
/b1K0s o7dw0 ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);木铎校园 BBS 社区 co7S2eO5r
if (ret != 0)
EJ4mB)|FV6YA0 printf("error: %s\n",db_strerror(ret));
~ Z3RF$kg$u[0木铎校园 BBS 社区/lhS[g9L
memset(&key, 0, sizeof(DBT));
(e+mJ$zi]LY0 memset(&data, 0, sizeof(DBT));
]"mW+bPz(t&v0 key.data = (void *)("chaoyang");
5J vm^z"vC{9\2Ci0 key.size = strlen("chaoyang")+1;
N R2O.h2U XknA0 data.data = &chaoyang;木铎校园 BBS 社区~T bk` a3U"fN
data.size = sizeof(PEOPLE);
1JJr,j!r!E1`+mxR0 ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);木铎校园 BBS 社区/}+`*SJV
if (ret != 0)木铎校园 BBS 社区O!rn;NYe
printf("error: %s\n",db_strerror(ret));木铎校园 BBS 社区'\Vv.Rx9n$H8w$B/Z
T$h0q+a!r+c!E_0 dbp->sync(dbp, 0);
H0I ik3t5d*u {4S0 sdbp->sync(sdbp, 0);木铎校园 BBS 社区0c)E[,|5Re
木铎校园 BBS 社区k;@c$['AG/W\,{
dbp->cursor(dbp, NULL, &cur, 0);
0M Z1qp#p#KGBs0 memset(&key, 0, sizeof(DBT));
"s(Rxr uc0 memset(&data, 0, sizeof(DBT));
e!?8Zu/~ [0 while((ret = cur->c_get(cur, &key, &data, DB_NEXT)) == 0)木铎校园 BBS 社区druK5`u7s4AqV4~
printf("%s\tage=%d\tcompany=%s\n", key.data, ((PEOPLE *)(data.data))->age, ((PEOPLE *)(data.data))->company_name);
y:a7\q*{0 cur->c_close(cur);
tV)W q0b9I4Q+q{v0
v8YlR6U2Q3i,H0 sdbp->cursor(sdbp, NULL, &scur, 0);
!yjfm8Q^L0 memset(&key, 0, sizeof(DBT));
