一个Secondary Database例子 Berkeley DB zz
上一篇 / 下一篇 2008-07-24 19:04:40 / 个人分类:C
#include <db.h>木铎校园 BBS 社区gk@F*MA%r0F
#include <stdio.h>木铎校园 BBS 社区){!{)m RQe/}vL
#include <stdlib.h>木铎校园 BBS 社区Jgd,S9v^ Hq
#include <string.h>
bl*R V1H6S7D1T0木铎校园 BBS 社区6KM8w-e.mHZ'tv
typedef struct people {
o2pvFA.U0 int age;
NtMnbA/O\/r0 char company_name[20];
.p"NY4]O'Rv4L0} PEOPLE;木铎校园 BBS 社区h.M WD u
木铎校园 BBS 社区 [g7K3mz X
int get_people_key(DB *sdbp, const DBT *pkey, const DBT *pdata, DBT *skey);木铎校园 BBS 社区s`.IqWpT t7_
int main(int argc, char *argv[])木铎校园 BBS 社区d|aYBw`s
{木铎校园 BBS 社区CyGl1VJ+h
DB *dbp, *sdbp;
;W,T`H'F:J#Cb%tQ0 DBC *cur, *scur;
*_g{;T5sPb0 DBT key, data;
.ip;e9BDWKf|0 PEOPLE chunjian,yipeng,chaoyang;
Wo4z9G)brh*e8m0 int ret;木铎校园 BBS 社区Rl~A_0p|T
O4]ZL#Uf:i0 chunjian.age = 25;木铎校园 BBS 社区0Vi}(t-Dd(X+o
strcpy(chunjian.company_name, "sina");木铎校园 BBS 社区-ny,x#`(t
yipeng.age = 26;木铎校园 BBS 社区ZFBw M$^IW~Z
strcpy(yipeng.company_name, "sina");木铎校园 BBS 社区|w+Q#P7F$ePaPF
chaoyang.age = 32;
9BhP;U._n,M0G7R0 strcpy(chaoyang.company_name, "sohu");
{$Ke)fc6KI;F0
L)M!hq-\qv7y0 db_create(&dbp, NULL, 0);
:TIux4drd0 db_create(&sdbp, NULL, 0);木铎校园 BBS 社区K5?5ddm]$pYl
q yI~1Jj-@N.m){0 sdbp->set_flags(sdbp, DB_DUPSORT);木铎校园 BBS 社区 r nhH-nj+N?1w
F:V8Yh0K5QxL0 dbp->open(dbp, NULL, "primary.db", NULL, DB_BTREE, DB_CREATE, 0);
"ItF+xH(z0 sdbp->open(sdbp, NULL, "secondary.db", NULL, DB_BTREE, DB_CREATE, 0);木铎校园 BBS 社区RAhv@X
-]i `Z?Z8j |0 dbp->associate(dbp, NULL, sdbp, get_people_key, 0);木铎校园 BBS 社区:}*w[ dQ3C |G3|
木铎校园 BBS 社区QW/\yEh
memset(&key, 0, sizeof(DBT));
3NX,z@;l0 memset(&data, 0, sizeof(DBT));
&r8Kb0S$G\9E8p@0 key.data = (void *)("chunjian");
!Y7Q$r3[Y'[0 key.size = strlen("chunjian")+1;木铎校园 BBS 社区0\Sh0^&~V
data.data = &chunjian;木铎校园 BBS 社区~/sk4@ r\ml5_
data.size = sizeof(PEOPLE);木铎校园 BBS 社区5i&A%z T3D r
ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);木铎校园 BBS 社区 tE2cY,?w1\{$_
if (ret != 0)
:ZIvztZ8q#h0 printf("error: %s\n",db_strerror(ret));木铎校园 BBS 社区y/~KI"Gbv
3|+JA6X;f J3d)K0 memset(&key, 0, sizeof(DBT));木铎校园 BBS 社区}}1I8vkr
memset(&data, 0, sizeof(DBT));木铎校园 BBS 社区#~#tU&}~wd
key.data = (void *)("yipeng");
Z3R3jrLK0 key.size = strlen("yipeng")+1;木铎校园 BBS 社区m+o3twd
data.data = &yipeng;木铎校园 BBS 社区6qF/~*V(a%p9n
data.size = sizeof(PEOPLE);
w:F{$Q*jZ6O*dM0 ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);
2G_af L3t+f0 if (ret != 0)木铎校园 BBS 社区*dw$u'[$_tV
printf("error: %s\n",db_strerror(ret));木铎校园 BBS 社区}4EP4fJ$G S+N
P'fmb8^q L$j*I0 memset(&key, 0, sizeof(DBT));
8Vg7y rgPD0 memset(&data, 0, sizeof(DBT));木铎校园 BBS 社区:JK(S-e/a0eu
key.data = (void *)("chaoyang");
{w y4QZ#z?9pp0 key.size = strlen("chaoyang")+1;木铎校园 BBS 社区z1`.@eoC&D)Ul(F
data.data = &chaoyang;木铎校园 BBS 社区|u8p;@ h%YS0cL
data.size = sizeof(PEOPLE);
U!u$F4B `lr5\8W0 ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);
3v ~-yBi1f)Y5Y0 if (ret != 0)木铎校园 BBS 社区(OopY1@O#}
printf("error: %s\n",db_strerror(ret));木铎校园 BBS 社区8A1[!NRl]8z
uly(s_6d!`3WG&l3K0 dbp->sync(dbp, 0);
(ZT6JN(tF2j6}E0 sdbp->sync(sdbp, 0);木铎校园 BBS 社区#UIopYhk
1xEg^$_M ut0 dbp->cursor(dbp, NULL, &cur, 0);
q+l} U%m2_-fA,J)n0 memset(&key, 0, sizeof(DBT));木铎校园 BBS 社区,C"? n9],t2RO e&f8QF1a
memset(&data, 0, sizeof(DBT));木铎校园 BBS 社区$e0{$ra3W*}W[gX
while((ret = cur->c_get(cur, &key, &data, DB_NEXT)) == 0)木铎校园 BBS 社区i1m,A%~fSA \c~
printf("%s\tage=%d\tcompany=%s\n", key.data, ((PEOPLE *)(data.data))->age, ((PEOPLE *)(data.data))->company_name);
OS C$W6Z6L U5P2}0 cur->c_close(cur);木铎校园 BBS 社区NXz$im2J
木铎校园 BBS 社区6~G;^.\ L+|#c @
sdbp->cursor(sdbp, NULL, &scur, 0);木铎校园 BBS 社区+D*W,V6w!rA4mW~
memset(&key, 0, sizeof(DBT));
5MK| u+hZ,F%KYk0 memset(&data, 0, sizeof(DBT));
*m4@1o2|wu&g!p0 key.data = (void *)("sina");
t}R ^ e6t"Fc5O0 key.size = strlen("sina") + 1;木铎校园 BBS 社区ZWD/yVfG
ret = scur->c_get(scur, &key, &data, DB_SET);
S$e1F0E*E+{7N&a4Q0 while (ret == 0)木铎校园 BBS 社区8eG"^g"lj
{木铎校园 BBS 社区4\;i#~G [#_FxD
printf("%s\tage=%d\tcompany=%s\n", key.data, ((PEOPLE *)(data.data))->age, ((PEOPLE *)(data.data))->company_name);
jC+Q.~n0 ret = scur->c_get(scur, &key, &data, DB_NEXT_DUP);木铎校园 BBS 社区3{?TF(SBd#z
}
DRc8j.x| hm6P0 scur->c_close(scur);
-n,_qo.a'j0a0木铎校园 BBS 社区GUHzHYO
sdbp->close(sdbp, 0);木铎校园 BBS 社区0E`u w3Y(a p6r,A
dbp->close(dbp, 0);
HW|o2u Z LdO0 return 0;
9x:v3tL7m8U0}木铎校园 BBS 社区fl rOk
;`X,eS[i,Wd|0int get_people_key(DB *sdbp, const DBT *pkey, const DBT *pdata, DBT *skey)
vA(W8| H S0{
fW7F P(Q.m:`/P+SV0 PEOPLE *people;
UBa3^ `/\0 people = (PEOPLE *)(pdata->data);
j2bB/v#mb0 memset(skey, 0, sizeof(DBT));木铎校园 BBS 社区Xu_rB2oO gz-jk
skey->data = people->company_name;
}-JE'ifAY;L0 skey->size = strlen(people->company_name)+1;
'B \)H"_W0 return 0;木铎校园 BBS 社区2xx8G:SG;@B)B
}
#include <stdio.h>木铎校园 BBS 社区){!{)m RQe/}vL
#include <stdlib.h>木铎校园 BBS 社区Jgd,S9v^ Hq
#include <string.h>
bl*R V1H6S7D1T0木铎校园 BBS 社区6KM8w-e.mHZ'tv
typedef struct people {
o2pvFA.U0 int age;
NtMnbA/O\/r0 char company_name[20];
.p"NY4]O'Rv4L0} PEOPLE;木铎校园 BBS 社区h.M WD u
木铎校园 BBS 社区 [g7K3mz X
int get_people_key(DB *sdbp, const DBT *pkey, const DBT *pdata, DBT *skey);木铎校园 BBS 社区s`.IqWpT t7_
int main(int argc, char *argv[])木铎校园 BBS 社区d|aYBw`s
{木铎校园 BBS 社区CyGl1VJ+h
DB *dbp, *sdbp;
;W,T`H'F:J#Cb%tQ0 DBC *cur, *scur;
*_g{;T5sPb0 DBT key, data;
.ip;e9BDWKf|0 PEOPLE chunjian,yipeng,chaoyang;
Wo4z9G)brh*e8m0 int ret;木铎校园 BBS 社区Rl~A_0p|T
O4]ZL#Uf:i0 chunjian.age = 25;木铎校园 BBS 社区0Vi}(t-Dd(X+o
strcpy(chunjian.company_name, "sina");木铎校园 BBS 社区-ny,x#`(t
yipeng.age = 26;木铎校园 BBS 社区ZFBw M$^IW~Z
strcpy(yipeng.company_name, "sina");木铎校园 BBS 社区|w+Q#P7F$ePaPF
chaoyang.age = 32;
9BhP;U._n,M0G7R0 strcpy(chaoyang.company_name, "sohu");
{$Ke)fc6KI;F0
L)M!hq-\qv7y0 db_create(&dbp, NULL, 0);
:TIux4drd0 db_create(&sdbp, NULL, 0);木铎校园 BBS 社区K5?5ddm]$pYl
q yI~1Jj-@N.m){0 sdbp->set_flags(sdbp, DB_DUPSORT);木铎校园 BBS 社区 r nhH-nj+N?1w
F:V8Yh0K5QxL0 dbp->open(dbp, NULL, "primary.db", NULL, DB_BTREE, DB_CREATE, 0);
"ItF+xH(z0 sdbp->open(sdbp, NULL, "secondary.db", NULL, DB_BTREE, DB_CREATE, 0);木铎校园 BBS 社区RAhv@X
-]i `Z?Z8j |0 dbp->associate(dbp, NULL, sdbp, get_people_key, 0);木铎校园 BBS 社区:}*w[ dQ3C |G3|
木铎校园 BBS 社区QW/\yEh
memset(&key, 0, sizeof(DBT));
3NX,z@;l0 memset(&data, 0, sizeof(DBT));
&r8Kb0S$G\9E8p@0 key.data = (void *)("chunjian");
!Y7Q$r3[Y'[0 key.size = strlen("chunjian")+1;木铎校园 BBS 社区0\Sh0^&~V
data.data = &chunjian;木铎校园 BBS 社区~/sk4@ r\ml5_
data.size = sizeof(PEOPLE);木铎校园 BBS 社区5i&A%z T3D r
ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);木铎校园 BBS 社区 tE2cY,?w1\{$_
if (ret != 0)
:ZIvztZ8q#h0 printf("error: %s\n",db_strerror(ret));木铎校园 BBS 社区y/~KI"Gbv
3|+JA6X;f J3d)K0 memset(&key, 0, sizeof(DBT));木铎校园 BBS 社区}}1I8vkr
memset(&data, 0, sizeof(DBT));木铎校园 BBS 社区#~#tU&}~wd
key.data = (void *)("yipeng");
Z3R3jrLK0 key.size = strlen("yipeng")+1;木铎校园 BBS 社区m+o3twd
data.data = &yipeng;木铎校园 BBS 社区6qF/~*V(a%p9n
data.size = sizeof(PEOPLE);
w:F{$Q*jZ6O*dM0 ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);
2G_af L3t+f0 if (ret != 0)木铎校园 BBS 社区*dw$u'[$_tV
printf("error: %s\n",db_strerror(ret));木铎校园 BBS 社区}4EP4fJ$G S+N
P'fmb8^q L$j*I0 memset(&key, 0, sizeof(DBT));
8Vg7y rgPD0 memset(&data, 0, sizeof(DBT));木铎校园 BBS 社区:JK(S-e/a0eu
key.data = (void *)("chaoyang");
{w y4QZ#z?9pp0 key.size = strlen("chaoyang")+1;木铎校园 BBS 社区z1`.@eoC&D)Ul(F
data.data = &chaoyang;木铎校园 BBS 社区|u8p;@ h%YS0cL
data.size = sizeof(PEOPLE);
U!u$F4B `lr5\8W0 ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);
3v ~-yBi1f)Y5Y0 if (ret != 0)木铎校园 BBS 社区(OopY1@O#}
printf("error: %s\n",db_strerror(ret));木铎校园 BBS 社区8A1[!NRl]8z
uly(s_6d!`3WG&l3K0 dbp->sync(dbp, 0);
(ZT6JN(tF2j6}E0 sdbp->sync(sdbp, 0);木铎校园 BBS 社区#UIopYhk
1xEg^$_M ut0 dbp->cursor(dbp, NULL, &cur, 0);
q+l} U%m2_-fA,J)n0 memset(&key, 0, sizeof(DBT));木铎校园 BBS 社区,C"? n9],t2RO e&f8QF1a
memset(&data, 0, sizeof(DBT));木铎校园 BBS 社区$e0{$ra3W*}W[gX
while((ret = cur->c_get(cur, &key, &data, DB_NEXT)) == 0)木铎校园 BBS 社区i1m,A%~fSA \c~
printf("%s\tage=%d\tcompany=%s\n", key.data, ((PEOPLE *)(data.data))->age, ((PEOPLE *)(data.data))->company_name);
OS C$W6Z6L U5P2}0 cur->c_close(cur);木铎校园 BBS 社区NXz$im2J
木铎校园 BBS 社区6~G;^.\ L+|#c @
sdbp->cursor(sdbp, NULL, &scur, 0);木铎校园 BBS 社区+D*W,V6w!rA4mW~
memset(&key, 0, sizeof(DBT));
5MK| u+hZ,F%KYk0 memset(&data, 0, sizeof(DBT));
*m4@1o2|wu&g!p0 key.data = (void *)("sina");
t}R ^ e6t"Fc5O0 key.size = strlen("sina") + 1;木铎校园 BBS 社区ZWD/yVfG
ret = scur->c_get(scur, &key, &data, DB_SET);
S$e1F0E*E+{7N&a4Q0 while (ret == 0)木铎校园 BBS 社区8eG"^g"lj
{木铎校园 BBS 社区4\;i#~G [#_FxD
printf("%s\tage=%d\tcompany=%s\n", key.data, ((PEOPLE *)(data.data))->age, ((PEOPLE *)(data.data))->company_name);
jC+Q.~n0 ret = scur->c_get(scur, &key, &data, DB_NEXT_DUP);木铎校园 BBS 社区3{?TF(SBd#z
}
DRc8j.x| hm6P0 scur->c_close(scur);
-n,_qo.a'j0a0木铎校园 BBS 社区GUHzHYO
sdbp->close(sdbp, 0);木铎校园 BBS 社区0E`u w3Y(a p6r,A
dbp->close(dbp, 0);
HW|o2u Z LdO0 return 0;
9x:v3tL7m8U0}木铎校园 BBS 社区fl rOk
;`X,eS[i,Wd|0int get_people_key(DB *sdbp, const DBT *pkey, const DBT *pdata, DBT *skey)
vA(W8| H S0{
fW7F P(Q.m:`/P+SV0 PEOPLE *people;
UBa3^ `/\0 people = (PEOPLE *)(pdata->data);
j2bB/v#mb0 memset(skey, 0, sizeof(DBT));木铎校园 BBS 社区Xu_rB2oO gz-jk
skey->data = people->company_name;
}-JE'ifAY;L0 skey->size = strlen(people->company_name)+1;
'B \)H"_W0 return 0;木铎校园 BBS 社区2xx8G:SG;@B)B
}
相关阅读:
- How to backup and import a MySQL InnoDB database (平凡的香草, 2007-7-26)
TAG: database Database Berkeley Secondary 例子



