LINUX.ORG.RU

How to use the SleepyCat BerkleyDB?


0

0

Этот простейший пример, сделаный мной в попытке 
разобраться с сабжем - не работает :( Как заставить?
Проблема ИМХО в том, что я неправильно считываю данные из БД,
однако этот пример практически содран из букваря, 
и я не знаю что можно предпринять :( 
Утилиты показывают, после любого количества выполнений
 этой проги в бд есть 1 запись, но считать её не получается :(
Вывод программы:

put returns 0
get returns 0
result is: 0
result size is: 0

сам исходник:

#include <db4/db_cxx.h>

int main (int argc, char * argv []) {
    try {
        Db vDb (NULL, 0);
        Dbt key, data;

        vDb.open (
            NULL,
            "test.db",
            NULL,
            DB_HASH,
            DB_CREATE,
            0
        );
// writing here
        key.set_flags (DB_DBT_USERMEM);
        data.set_flags (DB_DBT_USERMEM);

        key.set_data ((void *) "TESTKEY");
        key.set_ulen (8);

        data.set_data ((void *) "TESTDATA");
        data.set_ulen (9);
        std::cout << "put returns " << vDb.put (NULL, &key, &data, 0) << "\n";

        vDb.close (0);
// reading here
        Db vb (NULL, 0);
        vb.open (
            NULL,
            "test.db",
            NULL,
            DB_HASH,
            DB_CREATE,
            0
        );
        Dbt rdata, rkey;
        rkey.set_flags (DB_DBT_USERMEM);
        rkey.set_data ((void *) "TESTKEY");
        rkey.set_ulen (8);
        std::cout << "get returns " << vb.get (NULL, &rkey, &rdata, 0) << "\n";
        std::cout << "result is: " << rdata.get_data () << "\n";
        std::cout << "result size is: " << rdata.get_ulen () << "\n";
        vb.close (0);
    } catch (DbException &dbe) {
        std::cout << "exception caught: " << dbe.what() << "\n";
        std::cerr << "exception caught: " << dbe.what() << "\n";
    }
    return 0;
}
★★★★☆
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.