我希望能够得到所有使用Ruby的绑定的 http://github.com/mattbauer/bdb/tree/master ,但我不知道如何着手。任何指针将不胜感激。

<强>更新

下面是一个小脚本,遍历键和打印它们。基于大同”回答:

require 'rubygems'
require 'bdb'

env = Bdb::Env.new(0)
env.open('foo', Bdb::DB_CREATE,0)

db = env.db
db.open(nil, 'db1.db', nil, Bdb::Db::BTREE, Bdb::DB_CREATE,0)

db.put(nil, 'key',  'value',  0)
db.put(nil, 'key1', 'value1', 0)
db.put(nil, 'key2', 'value2', 0)

dbc = db.cursor(nil,0)
key,val = dbc.get(nil,nil,Bdb::DB_FIRST)
while key
  p key,val
  key,val = dbc.get(nil,nil,Bdb::DB_NEXT)
end
dbc.close
db.close(0)
env.close
有帮助吗?

解决方案

您需要使用Berkeley DB的游标在整个键/值空间来运行。

在Berkeley DB的本身,可以创建一个光标然后与DB_FIRST标志接着用DB_NEXT标志多次调用,直到用完的键/值对使用它。你可以只用DB_NEXT因为简化代码,如果你这样做,以新创建的指针,它是与使用DB_FIRST

随着Ruby绑定,这似乎与完成(根据我的非常的红宝石的基础知识 - 你应该能够清理它):

dbc = db.cursor(nil,0)
key,val = dbc.get(nil,nil,Bdb::DB_FIRST)
while key != nil do
   # Process key and val as needed.
   key,val = dbc.get(nil,nil,Bdb::DB_NEXT)
   # or possibly .. (key,val,Bdb::DB_NEXT)
end
dbc.close()

其他提示

这个工作对我来说

require 'bdb'
db=BDB::Hash.open("test.db")
keyvalues=db.to_hash
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top