libdb/examples/cxx/getting_started/MyDb.cpp
2012-11-14 15:13:24 -05:00

71 lines
1.9 KiB
C++

/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2004, 2012 Oracle and/or its affiliates. All rights reserved.
*
* $Id$
*/
#include "MyDb.hpp"
// File: MyDb.cpp
// Class constructor. Requires a path to the location
// where the database is located, and a database name
MyDb::MyDb(std::string &path, std::string &dbName,
bool isSecondary)
: db_(NULL, 0), // Instantiate Db object
dbFileName_(path + dbName), // Database file name
cFlags_(DB_CREATE) // If the database doesn't yet exist,
// allow it to be created.
{
try
{
// Redirect debugging information to std::cerr
db_.set_error_stream(&std::cerr);
// If this is a secondary database, support
// sorted duplicates
if (isSecondary)
db_.set_flags(DB_DUPSORT);
// Open the database
db_.open(NULL, dbFileName_.c_str(), NULL, DB_BTREE, cFlags_, 0);
}
// DbException is not a subclass of std::exception, so we
// need to catch them both.
catch(DbException &e)
{
std::cerr << "Error opening database: " << dbFileName_ << "\n";
std::cerr << e.what() << std::endl;
}
catch(std::exception &e)
{
std::cerr << "Error opening database: " << dbFileName_ << "\n";
std::cerr << e.what() << std::endl;
}
}
// Private member used to close a database. Called from the class
// destructor.
void
MyDb::close()
{
// Close the db
try
{
db_.close(0);
std::cout << "Database " << dbFileName_
<< " is closed." << std::endl;
}
catch(DbException &e)
{
std::cerr << "Error closing database: " << dbFileName_ << "\n";
std::cerr << e.what() << std::endl;
}
catch(std::exception &e)
{
std::cerr << "Error closing database: " << dbFileName_ << "\n";
std::cerr << e.what() << std::endl;
}
}