一个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 R Q e/}vL
#include <stdlib.h>木铎校园 BBS 社区Jgd,S9v^ Hq
#include <string.h>
bl*R V1H6S7D1T0木铎校园 BBS 社区6K M8w-e.mH Z'tv
typedef struct people {
o2pv FA.U0    int age;
N tMnbA/O\/r0    char company_name[20];
.p"NY4]O'Rv4L0} PEOPLE;木铎校园 BBS 社区h.M WD u
木铎校园 BBS 社区 [g7K3m z X
int get_people_key(DB *sdbp, const DBT *pkey, const DBT *pdata, DBT *skey);木铎校园 BBS 社区s`.IqWpTt7_
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 社区R l~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!h q-\qv7y0    db_create(&dbp, NULL, 0);
:TIux4drd0    db_create(&sdbp, NULL, 0);木铎校园 BBS 社区K5?5d dm]$pY l

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);
"I tF+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;fJ3d)K0    memset(&key, 0, sizeof(DBT));木铎校园 BBS 社区}}1I8vkr
    memset(&data, 0, sizeof(DBT));木铎校园 BBS 社区#~#tU&}~wd
    key.data = (void *)("yipeng");
Z3R3jrL K0    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'[$_t V
          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 社区#UIo pYhk

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{$r a3W*}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$W6Z6LU5P2}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+h Z,F%KYk0    memset(&data, 0, sizeof(DBT));
*m4@1o2|w u&g!p0    key.data = (void *)("sina");
t}R ^e6t"Fc5O0    key.size = strlen("sina") + 1;木铎校园 BBS 社区ZWD/y VfG
    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(SB d#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|o2uZ LdO0    return 0;
9x:v3tL7m8U0}木铎校园 BBS 社区fl r Ok

;`X,eS[i,Wd|0int get_people_key(DB *sdbp, const DBT *pkey, const DBT *pdata, DBT *skey)
vA(W8|H S0{
fW7FP(Q.m:`/P+SV0    PEOPLE *people;
UBa3^ `/\0    people = (PEOPLE *)(pdata->data);
j2bB/v#mb0    memset(skey, 0, sizeof(DBT));木铎校园 BBS 社区Xu_rB2oO g z-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
}

TAG: database Database Berkeley Secondary 例子

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

关于作者