0

如果我使用 flag 将值插入到HamsterDB数据库中HAM_OVERWRITE,当键不存在时会产生什么影响?

我正在跟踪程序中的最高序列号并将其保存在 HamsterDB 数据库中:

if (serial > high_serial_) {
    high_serial_ = serial;
    ham::key key((void*)HIGH_SERIAL_KEY, strlen(HIGH_SERIAL_KEY));
    ham::record record((void*)&high_serial_, sizeof(high_serial_));

    db.insert(&key, &record, HAM_OVERWRITE);
}

再次启动应用程序时,high_serial_将使用存储在 DB 中的当前值进行初始化:

ham::key key((void*)HIGH_SERIAL_KEY, strlen(HIGH_SERIAL_KEY));
auto record = roll_file_db.find(&key);

但是这个电话是扔的HAM_KEY_NOT_FOUND文档指出,如果密钥不存在,它将简单地插入。这不是我正在经历的。

4

1 回答 1

0

如果密钥不存在并且您调用ham_db_insert(db, txn, key, record, HAM_OVERWRITE),则将插入密钥。

如果密钥不存在并且您调用,ham_db_find()那么您会得到HAM_KEY_NOT_FOUND.

ham_db_find 的文档将 HAM_KEY_NOT_FOUND 列为“如果密钥不存在”的返回值: http : //hamsterdb.com/public/scripts/html_www/group_ham_database.html#ga90dd239b79be2181461bbabc2eee1496

HTH 克里斯托夫

于 2013-08-07T19:54:23.573 回答