zoukankan      html  css  js  c++  java
  • 数据管理(七)

    其他的dbm函数

    现在我们已经看到基本的dbm函数,我们可以简要的介绍一下dbm所使用的其他的函数:

    int dbm_delete(DBM *database_descriptor, datum key);
    int dbm_error(DBM *database_descriptor);
    int dbm_clearerr(DBM *database_descriptor);
    datum dbm_firstkey(DBM *database_descriptor);
    datum dbm_nextkey(DBM *database_descriptor);

    dbm_delete

    dbm_delete函数用于由数据库中删除记录。与dbm_fetch类似,他也需要一个datum参数,所不同的是他并不是读取数据,而是删除数据。如果成功,则会返回0。

    dbm_error

    dbm_error函数只是简单的测试在数据库中是否发生了错误,如果没有错误则会返回0。

    dbm_clearerr

    dbm_clearerr函数清除在数据库中所设置的错误条件标记。

    dbm_firstkey与dbm_nextkey

    这两个函数用作一个函数对用于在数据库中的所有项目的键值中进行搜索。所需要循环结构如下:

    DBM *db_ptr;
    datum key;
    for(key = dbm_firstkey(db_ptr); key.dptr; key = dbm_nextkey(db_ptr));

    试验--读取与删除数据

    现在我们使用这些新函数来修改dbm1.c程序,得到dbm2.c程序:

    1 复制dbm1.c文件,进行编辑。编辑#define TEST_DB_FILE行:

    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <fcntl.h>
    #include <ndbm.h>
    #include <string.h>
    #define TEST_DB_FILE “/tmp/dbm2_test”
    #define ITEMS_USED 3

    2 然后我们需要改变的只是读取部分:

        /* now try to delete some data */
    sprintf(key_to_use, “bu%d”, 13);
    key_datum.dptr = key_to_use;
    key_datum.dsize = strlen(key_to_use);
    if (dbm_delete(dbm_ptr, key_datum) == 0) {
        printf(“Data with key %s deleted/n”, key_to_use);
    }
    else {
        printf(“Nothing deleted for key %s/n”, key_to_use);
    }
    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) {
            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_integer,
                   item_retrieved.more_chars);
        }
        else {
            printf(“No data found for key %s/n”, key_to_use);
        }
    }

    其输出结果如下:

    $ ./dbm2
    Data with key bu13 deleted
    Data retrieved
    Retrieved item - Third 3 baz
    Data retrieved
    Retrieved item - First! 47 foo

    工作原理

    这个程序的前面部分与前面的例子相同,只是简单的在数据库中存储数据。然后我们构建一个键值来匹配第二个项目,并且将其由数据库中删除。

    程序然后使用dbm_firstkey与dbm_nextkey按顺序访问数据库中的每一个键值,读取数据。注意,数据并不是按顺序读取的:不存在按键值顺序实现的检索顺序;他只是遍历所有记录的一个简单方法。


  • 相关阅读:
    构建单页面应用
    chrome进入控制台时自动进入断点模式的解决方法
    git安装--linux下的安装
    express响应前端ajax请求
    nodejs链接mongodb数据库
    Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
    Nginx中如何限制某个IP同一时间段的访问次数
    nodejs && apidoc
    apidoc
    android sdk
  • 原文地址:https://www.cnblogs.com/dyllove98/p/2461968.html
Copyright © 2011-2022 走看看