一个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];
M OJ$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

lAAd7S0    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/U W f0    sdbp->open(sdbp, NULL, "secondary.db", NULL, DB_BTREE, DB_CREATE, 0);
!kK2PNn-Hv0木铎校园 BBS 社区'r!NQ*bR0JK n
    dbp->associate(dbp, NULL, sdbp, get_people_key, 0);
7rRm [Z:X b!t$s1p0木铎校园 BBS 社区8i7Ye0R9Z[
    memset(&key, 0, sizeof(DBT));
7IrE Oez,\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 社区 Fx5p5u5Q:? N/s ~
    data.data = &chunjian;木铎校园 BBS 社区^@b1Op'XRY!j
    data.size = sizeof(PEOPLE);
w1AF+o u!s P(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!l V
木铎校园 BBS 社区{6Y,g ~F bx&mS i
    memset(&key, 0, sizeof(DBT));
W}(w+K%Y"S` ])In0    memset(&data, 0, sizeof(DBT));木铎校园 BBS 社区[Sgsn hm;]`
    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 社区/lh S[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#K G Bs0    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 社区d ruK5`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);
t V)W q0b9I4Q+q{v0
v8YlR6U2Q3i,H0    sdbp->cursor(sdbp, NULL, &scur, 0);
!yjfm8Q^L0    memset(&key, 0, sizeof(DBT));
J8I Bg XG#R\eU0    memset(&data, 0, sizeof(DBT));木铎校园 BBS 社区'{:K J6@`E
    key.data = (void *)("sina");
0D)A|5q9Y;cqD0    key.size = strlen("sina") + 1;
4zS0Y&CN-d-v1T0    ret = scur->c_get(scur, &key, &data, DB_SET);
?pe({ t+X'[? @0    while (ret == 0)木铎校园 BBS 社区pq$^HI8w(r a
    {
Bp-Y;i7[Q-N0          printf("%s\tage=%d\tcompany=%s\n", key.data, ((PEOPLE *)(data.data))->age, ((PEOPLE *)(data.data))->company_name);
#G$RFt UO8me.Wc:y0          ret = scur->c_get(scur, &key, &data, DB_NEXT_DUP);木铎校园 BBS 社区ewo@ x+?
    }木铎校园 BBS 社区SCD }d*W['V
    scur->c_close(scur);木铎校园 BBS 社区,n^(U&["^!I*e;l:~&c(e(z
木铎校园 BBS 社区Q0D V#Mh*sA
    sdbp->close(sdbp, 0);木铎校园 BBS 社区x ROq?0ZG*pW
    dbp->close(dbp, 0);木铎校园 BBS 社区 Ve!P-u/bV ~1Eg.b
    return 0;
&]Z+I1Dj/]7ZOG A0}
1dr|yNu0木铎校园 BBS 社区%GpNd"E[ T
int get_people_key(DB *sdbp, const DBT *pkey, const DBT *pdata, DBT *skey)
"G+k\1X0ZM;k0{木铎校园 BBS 社区I|8iO0D
    PEOPLE *people;
/xnP]p_ X4e0    people = (PEOPLE *)(pdata->data);木铎校园 BBS 社区%oN9UM9^n g
    memset(skey, 0, sizeof(DBT));木铎校园 BBS 社区jL6r]W R
    skey->data = people->company_name;木铎校园 BBS 社区 a"W"C'V-d&i,c6r
    skey->size = strlen(people->company_name)+1;
V6}3~!y$aun%S+d3~0    return 0;
R(T;f7IA8N Js0}

TAG: database Database Berkeley Secondary 例子

 

评分:0

我来说两句

显示全部

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

关于作者