dbm数据库操作
来源:互联网 发布:上海嘉桥数据咨询公司 编辑:程序博客网 时间:2024/05/17 09:05
//dbm数据库的使用#include<unistd.h>#include<stdlib.h>#include<stdio.h>#include<fcntl.h>#include<gdbm-ndbm.h>//包含dbm数据库操作函数//#include<ndbm.h>#include<string.h>//宏定义#define TEST_DB_FILE "/home/ndj/dbm/dbm_test"#define ITEMS_USED 3//定义一个结构体,存储在数据库中的数据struct test_data{ char misc_chars[15] ; int any_integar; char more_chars[21];};int main(){ //定义两个结构体 struct test_data items_to_store[ITEMS_USED]; struct test_data item_retrieved; char key_to_use[20]; int i, result; datum key_datum;//关键字 datum data_datum;//存储的数据 DBM *dbm_ptr; //打开数据库进行读写 dbm_ptr = dbm_open(TEST_DB_FILE, O_RDWR | O_CREAT, 0666);//可读可写的方式打开 if(!dbm_ptr) { fprintf(stderr, "Failed to open database\n"); exit(EXIT_FAILURE); } for(key_datum=dbm_firstkey(dbm_ptr); key_datum.dptr; key_datum=dbm_nextkey(dbm_ptr)) { dbm_delete(dbm_ptr, key_datum); printf("SUCCESS\n"); } //添加数据到items_to_store中 memset(items_to_store, '\0', sizeof(items_to_store));//对个类数组进行按字节进行初始化 strcpy(items_to_store[0].misc_chars, "First!"); items_to_store[0].any_integar = 4; strcpy(items_to_store[0].more_chars, "foo"); strcpy(items_to_store[1].misc_chars, "bar"); items_to_store[1].any_integar = 13; strcpy(items_to_store[1].more_chars, "unlucky"); strcpy(items_to_store[2].misc_chars, "Third"); items_to_store[2].any_integar = 3; strcpy(items_to_store[2].more_chars, "baz"); //为每个数据项建立供以后使用的关键字,它被设为每个字符串的头一个字母加上整数 for(i=0; i<ITEMS_USED; i++) { //把格式化数据写入某个字符串 sprintf(key_to_use, "%c%c%d", items_to_store[i].misc_chars[0], items_to_store[i].more_chars[0], items_to_store[i].any_integar); key_datum.dptr = (void*)key_to_use; key_datum.dsize = strlen(key_to_use); data_datum.dptr = (void*)&items_to_store[i]; data_datum.dsize = sizeof(struct test_data); result = dbm_store(dbm_ptr, key_datum, data_datum, DBM_REPLACE);//向数据库中存储数据 if(result != 0) { fprintf(stderr, "dbm_store failed on key %s\n", key_to_use); exit(2); } } ////接下来查看是否可以检索这个新存入的数据, 最狗关闭数据库 //sprintf(key_to_use, "Tb%d", 3); //key_datum.dptr = (void*)key_to_use; //key_datum.dsize = strlen(key_to_use); // //data_datum = dbm_fetch(dbm_ptr, key_datum);//返回datum类型的结构,结构中仅仅包含一个指向数据的指针,它实际的数据仍然保存在dbm库的本地存储空间中 //if(data_datum.dptr)//如果检索到数据 //{ // printf("Data retrieved:\n"); // memcpy(&item_retrieved, data_datum.dptr, data_datum.dsize); // printf("Retrieved item - %s %d %s\n", item_retrieved.misc_chars, item_retrieved.any_integar, item_retrieved.more_chars); //} //else //{ // printf("No data found for key %s\n", key_to_use); //} //在数据库中删除数据 sprintf(key_to_use, "Tb%d", 3);//被删除数据项的关键字 key_datum.dptr = key_to_use; key_datum.dsize = strlen(key_to_use); if(dbm_delete(dbm_ptr, key_to_use) == 0) { printf("Data with key %s deleted\n", key_to_use); } else { printf("Nothing deleted for key %s\n", key_to_use); } data_datum = dbm_fetch(dbm_ptr, key_datum);//检索数据,查看有没有被删除 if(data_datum.dptr)//如果检索到数据 { printf("Failed\n"); } else { printf("Delete success\n"); } //使用dbm_firstkey和dbm_nextkey对所有的关键字进行扫描 for(key_datum=dbm_firstkey(dbm_ptr); key_datum.dptr; key_datum=dbm_nextkey(dbm_ptr))//对所有关键字进行扫描 { data_datum = dbm_fetch(dbm_ptr, key_datum); if(data_datum.dptr) { memcpy(&item_retrieved, data_datum.dptr, data_datum.dsize); printf("Retireved item - %s %d %s\n", item_retrieved.misc_chars, item_retrieved.any_integar, item_retrieved.more_chars); } else { printf("No data found for key %s\n", key_to_use); } } dbm_close(dbm_ptr); exit(EXIT_SUCCESS);}
阅读全文
0 0
- dbm数据库操作
- DBM数据库
- dbm数据库
- dbm数据库源代码分析(15):dbm部分
- dbm数据库学习笔记
- linux dbm数据库
- 一个简单的dbm数据库的实验-----dbm打开 存储 检索 删除 扫描操作的C代码
- perl dbm文件操作总结
- perl dbm文件操作总结
- dBm
- dBm
- dbm
- DBM
- dbm数据库源代码分析(1):概述
- dbm数据库源代码分析(6):bucket.c
- dbm数据库源代码分析(7):falloc.c
- dbm数据库源代码分析(13):ndbm部分
- 数据库管理软件DBM简介及选用
- C json实战引擎 一 , 实现解析部分,json实战
- 常用HTTP状态码
- Android程序员看世界--人工智能AI(1)
- Java中异常处理示例
- 在struts2中获取请求action名称或参数
- dbm数据库操作
- Python 边做边学 8.1 工具类--HTTP工具
- php
- Queue Reconstruction by Height(根据高度重组队列)
- codeforces 797B Odd sum
- python中的模块
- 微信小程序入门篇(一)
- cookie的使用方法和注意事项
- linux下如何查看网卡的流量