This is a sample of C++ access Oracle Berkeley DB 12cR1 (12.1.6.1.26)
1. Download BDB
http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
2. Build
$ tar -zxvf db-6.1.26.gz
$ cd db-6.1.26/build_unix
$ ../dist/configure --prefix=/root/to/install/path --enable-cxx
$ make
$ make install
3. Prepare program execution environment
$ export BDB_HOME=/root/to/install/path
$ export LD_LIBRARY_PATH=${BDB_HOME}/lib:${LD_LIBRARY_PATH}
4. Source file
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <iomanip>
#include <string>
#include "db_cxx.h"
#define COUNT 3
int main() {
std::string names[COUNT] = { "John", "Jim", "Bob" };
std::string states[COUNT] = { "Massachusetts", "Washington, D.C.", "New York" };
try {
Db * pdb;
pdb = new Db(NULL, 0);
pdb->open(NULL, "data/people.db", NULL, DB_BTREE, DB_CREATE | DB_TRUNCATE, 0);
// insert
{
for (int i = 0; i < COUNT; i++) {
Dbt key(const_cast<char*>(names[i].data()), names[i].size());
Dbt value(const_cast<char*>(states[i].data()), states[i].size()+1);
pdb->put(NULL, &key, &value, 0);
}
}
// query key
{
Dbt key(const_cast<char*>(names[1].data()), names[1].size());
char buffer[1024];
Dbt data;
data.set_data(buffer);
data.set_ulen(1024);
data.set_flags(DB_DBT_USERMEM);
if (pdb->get(NULL, &key, &data, 0) == DB_NOTFOUND) {
std::cerr << "Not found" << std::endl;
return -1;
} else {
std::cout << "Found: [" << buffer << "]" << std::endl;
}
}
// delete key
{
std::string toDelete = "Jim";
Dbt key(const_cast<char *>(toDelete.data()), toDelete.size());
if (pdb->del(NULL, &key, 0) != 0) {
std::cerr << "Not found" << std::endl;
return -1;
}
else {
std::cout << "Delete success: " << toDelete << std::endl;
}
}
//traverse
{
Dbc *dbc = NULL;
Dbt key, data;
char bufferkey[1024] = { '\0' };
char bufferdata[1024] = { '\0' };
key.set_data(bufferkey);
key.set_ulen(1024);
key.set_flags(DB_DBT_USERMEM);
data.set_data(bufferdata);
data.set_ulen(1024);
data.set_flags(DB_DBT_USERMEM);
pdb->cursor(NULL, &dbc, 0);
while (dbc->get(&key, &data, DB_NEXT) == 0) {
std::cout << "key[" << (char *)key.get_data() << "]=[" << (char *)data.get_data() << "]" << std::endl;
}
dbc->close();
}
// delete database
{
pdb->close(0); // DB->remove: method not permitted after handle's open method
delete pdb;
pdb = new Db(NULL, 0);
pdb->remove("data/people.db", NULL, 0);
delete pdb;
}
} catch (DbException& e) {
std::cerr << "DbException: " << e.what() << std::endl;
return -1;
} catch (std::exception& e) {
std::cerr << e.what() << std::endl;
return -1;
}
return 0;
}
5. Compile Source File
$ g++ -o main -I${BDB_HOME}/include main.cpp -L${BDB_HOME}/lib -ldb_cxx
6. Run Program
$ ./main
Found: [Washington, D.C.]
Delete success: Jim
key[Bob]=[New York]
key[John]=[Massachusetts]
$
7. Thank You.
这篇博客提供了一个使用C++访问Oracle Berkeley DB 12cR1 (12.1.6.1.26)的示例。包括下载BDB,构建过程,设置环境变量,源代码编译以及运行程序的步骤。
435

被折叠的 条评论
为什么被折叠?



