检查Berkeley DB C+中是否存在密钥+;美国石油学会 这听起来像是个愚蠢的问题,但是我已经查阅了伯克利DB C++ API的大部分官方文档,似乎无法找到答案。如何检查数据库中是否存在密钥?下面是一些示例代码 // Database created. Dbt key(&some_string, some_size); Dbt data(&some_struct, some_other_size); database.put(nullptr, &key, &data, 0); // Now my &some_string key is definitely in the database, and I can easily get it. // However if I create an identical string to search for the key, I get DB_NOTFOUND Dbt search_key(&the_same_string, the_same_size); int ret = database.exists(nullptr, &search_key, 0); // This returns DB_NOTFOUND.

检查Berkeley DB C+中是否存在密钥+;美国石油学会 这听起来像是个愚蠢的问题,但是我已经查阅了伯克利DB C++ API的大部分官方文档,似乎无法找到答案。如何检查数据库中是否存在密钥?下面是一些示例代码 // Database created. Dbt key(&some_string, some_size); Dbt data(&some_struct, some_other_size); database.put(nullptr, &key, &data, 0); // Now my &some_string key is definitely in the database, and I can easily get it. // However if I create an identical string to search for the key, I get DB_NOTFOUND Dbt search_key(&the_same_string, the_same_size); int ret = database.exists(nullptr, &search_key, 0); // This returns DB_NOTFOUND.,c++,berkeley-db,C++,Berkeley Db,如果我传递原始key Dbt对象,当然ret是0。但是,如果您还没有与该确切记录相关联的Dbt对象,是否无法检查密钥是否存在 如果我设置了DB_FIRST标志,我还尝试使用游标和Dbc::get()查找键。但它会自动写入我传递的任何数据Dbt对象 我所要做的就是检查是否存在具有特定键的Dbt对象,不多不少。实例化Dbt的第二个参数只是一个整数大小,而不是指针。例如,您的产品线: Dbt key(&some_string, &some_size); 应成为: Dbt key(&a

如果我传递原始key Dbt对象,当然ret是0。但是,如果您还没有与该确切记录相关联的Dbt对象,是否无法检查密钥是否存在

如果我设置了DB_FIRST标志,我还尝试使用游标和Dbc::get()查找键。但它会自动写入我传递的任何数据Dbt对象


我所要做的就是检查是否存在具有特定键的Dbt对象,不多不少。

实例化
Dbt
的第二个参数只是一个整数大小,而不是指针。例如,您的产品线:

Dbt key(&some_string, &some_size);
应成为:

Dbt key(&some_string, some_size);

此外,如果您的
some_string
std::string
,则必须将其转换为普通C字符数组。考虑在写入数据库的字符串中包含<代码> NUL< /COD>终止符。您不必这样做,但这通常会使调试更容易。

谢谢您的回答。大小的指针符号在这里只是一个疏忽。我的代码中没有这个。有什么理由我必须把它转换成普通的C吗?我的意思是,文档说明Dbt对象几乎可以是任何东西。如果你需要更多的帮助,请提供一个最小的,可验证的例子。我们可以编译和运行的东西。