2

如何10 < key < 20从 Berkeley DB 中检索一系列数据?我通过搜索找不到任何东西。

4

2 回答 2

1

我快速浏览了一下http://pybsddb.sourceforge.net/bsddb3.html,下面的想法看起来很有希望:创建一个 DBCursor 对象,调用它的.set方法来查找 key 10,然后调用它的.next方法直到你到达20.

我不知道 C API 的细节,但我会尝试相同的想法:尝试创建一个游标,并在游标上调用名为set和的函数next

于 2013-09-09T22:11:34.507 回答
0

也许这段代码会对你有所帮助。它提取 key1<=key<=key2 的条目,但可以根据您的条件进行修改。我使用第一个 DB_SET_RANGE 标志来查找 key=>key1,然后使用 DB_NEXT 标志来获取下一个值并检查它们是否 <=key2。

void get(DB *dbp, int key1, int key2){
  DBC *curs;
  DBT k,v;
  int fl;

  // Get a cursor
  dbp->cursor(dbp, NULL, &curs, 0);
  if (!curs) _dberr("can't get a cursor");

  // Set DBT for 1st key and value
  memset(&v, 0, sizeof(DBT));
  memset(&k, 0, sizeof(DBT));
  k.data = &key1;
  k.size = sizeof(key1);

  fl = DB_SET_RANGE; // first key will be >=key1
  while (curs->c_get(curs, &k, &v, fl)==0 &&
         key2 >= *(int *)k.data){
    fl = DB_NEXT;
    // use v.data
  }
}
于 2016-05-05T16:52:40.337 回答