berkeley db实践2-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 3976770
  • 博文数量: 536
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(536)

文章存档

2024年(3)

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(252)

2006年(73)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: 数据库开发技术

2008-03-15 18:08:25

自己仿照bdb实例来写的一个小实例, 简单的代码在后面.

db->put()用法注意的:
    当flags设置为0, 当有key相同的时候后面的值将会翻盖原来的值.
    将flags设置为db_nooverwrite, 当后面值同前面有相同的时候就会报错误:
[gan@localhost 2]$ bdb_per
[0]:: id.0 age.527315018 nm.nm3d7eba4b addr.addr1f6e304a
db->put error:db_keyexist: key/data pair already exists
   
还有好几个系统代码的实例没有看完, 好好体会, 继续能力!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "db.h"

typedef struct
{
  int id;
  int age;
  char nm[32];
  char addr[128];
} per;

typedef struct
{
  db *db;
  char *dbnm;
} per_db;
static per_db per_db[] = {null, "per.db"};

static int per_db_init(per_db *per)
{
  int ret;
  db *db;

  if ((ret = db_create(&db, null, 0)) != 0)
  {
    fprintf(stderr, "db_create error:%s\n", db_strerror(ret));
    return (-1);
  }
  per->db = db;

  ret = db->open(db, null, per->dbnm, null, db_btree, db_create, 0);
  if (ret != 0)
  {
    fprintf(stderr, "db->open error:%s\n", db_strerror(ret));
    return (-1);
  }

  return (0);
}

static void per_db_term(per_db *per)
{
  db *db = per->db;

  if (db)
    db->close(db, 0);
}

static void get_data(per *p)
{
  p->id = random();
  snprintf(p->nm, 32, "nm%x", p->id);
  p->age = random()/2;
  snprintf(p->addr, 128, "addr%x", p->age);
}

static int per_db_putdata(db *db)
{
  int i, ret;
  dbt key, v;
  per per;

  for (i = 0; i < 10; i)
  {
    memset(&key, 0x00, sizeof(dbt));
    memset(&v, 0x00, sizeof(dbt));
    get_data(&per);
    per.id = i;
    printf("[%d]:: id.%d age.%d nm.%s addr.%s\n"
        , i, per.id, per.age, per.nm, per.addr);

    key.data = &per.id;
    key.size = sizeof(int);

    v.data = &per;
    v.size = sizeof(per);

    ret = db->put(db, 0, &key, &v, db_nooverwrite);
    if (ret != 0)
    {
      fprintf(stderr, "db->put error:%s\n", db_strerror(ret));
      return (-1);
    }
  }

  return (0);
}

static int per_db_getdata(db *db)
{
  int ret, i;
  dbc *dbc;
  dbt key, v;
  per *per;

  i = 0;
  memset(&key, 0x00, sizeof(dbt));
  memset(&v, 0x00, sizeof(dbt));

  ret = db->cursor(db, null, &dbc, 0);
  if (ret != 0)
  {
    fprintf(stderr, "db->cursor error:%s\n", db_strerror(ret));
    return (-1);
  }

  printf("get data: \n");
  while ((ret = dbc->c_get(dbc, &key, &v, db_next)) == 0)
  {
    per = (per *)v.data;

    printf("[%d] id.%d age.%d nm.%s addr.%s \n"
        , i, per->id, per->age, per->nm, per->addr);
  }

  dbc->c_close(dbc);
  return (0);
}

/*
 * main function()
 */

int main(int argc, char **argv)
{
  per_db *per = per_db;
  srandom(time(null));

  /* create database */
  if (per_db_init(per) < 0)
    goto err_1;

  /* insert data */
  if (per_db_putdata(per->db) < 0)
  {
    per_db_term(per);
    goto err_1;
  }

  /* search data and print */
  if (per_db_getdata(per->db) < 0)
  {
    per_db_term(per);
    goto err_1;
  }

  /* close database */
  per_db_term(per);

  return (0);

err_1:
  return (-1);
}


阅读(2759) | 评论(0) | 转发(0) |
0

上一篇:berkeley db实践1

下一篇:学习几个单词!

给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图