📄 dbcxx.cpp~
字号:
//g++ -o dbcxx -ggdb -I/usr/local/BerkeleyDB.4.6/include/ -L/usr/local/BerkeleyDB.4.6/lib/ -ldb -lpthread#include <db_cxx.h> #include <stdio.h>#include <stdlib.h>#include <pthread.h>#define DATABASE "phonebook.db"// DB的函数执行完成后,返回0代表成功,否则失败void print_error(int ret){ if(ret != 0) printf("ERROR: %s\n",db_strerror(ret));}//数据结构DBT在使用前,应首先初始化,否则编译可通过但运行时报参数错误 void init_DBT(DBT * key, DBT * data){ memset(key, 0, sizeof(DBT)); memset(data, 0, sizeof(DBT));}int main(void){ DB *dbp; DBT key, data; u_int32_t flags; int ret; typedef struct customer { int c_id; char name[10]; char address[20]; int age; } CUSTOMER; CUSTOMER cust; int key_cust_c_id = 1; //初始化结构体 cust.c_id = 1; strncpy(cust.name, "promise", 9); strncpy(cust.address, "chengdu", 19); cust.age = 32; //首先创建数据库句柄 if ((ret = db_create(&dbp, NULL, 0)) != 0) { fprintf(stderr, "db_create: %s\n", db_strerror(ret)); exit (1); } //设置数据库参数 flags = DB_CREATE; // 创建一个数据库,使用HASH访问算法,本段代码演示对复杂数据结构的处理 if ((ret = dbp->open(dbp, NULL, "DATABASE", NULL, DB_HASH, flags, 0664)) != 0) { dbp->err(dbp, ret, "%s", DATABASE); exit (1); } //insert data init_DBT(&key, &data); key.size = sizeof(int); key.data = &(cust.c_id); data.size = sizeof(CUSTOMER); data.data = &cust; if(ret = dbp->put(dbp, NULL, &key, &data,DB_NOOVERWRITE)==0) { printf("db: %s: key stored.\n", (char *)key.data); } else dbp->err(dbp, ret, "DB->put"); //select data memset(&cust, 0, sizeof(CUSTOMER)); key.size = sizeof(int); key.data = &key_cust_c_id; data.data = &cust; data.ulen = sizeof(CUSTOMER); data.flags = DB_DBT_USERMEM; if(dbp->get(dbp, NULL, &key, &data, 0)==0) { printf("db: %s: key retrieved: data was %s.\n", (char *)key.data, (char *)data.data); } else dbp->err(dbp, ret, "DB->get"); printf("c_id = %d name = %s address = %s age = %d\n", cust.c_id, cust.name, cust.address, cust.age); if(dbp != NULL) dbp->close(dbp, 0); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -