• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src/router/db-4.8.30/examples_cxx/getting_started/
1/*-
2 * See the file LICENSE for redistribution information.
3 *
4 * Copyright (c) 2004-2009 Oracle.  All rights reserved.
5 *
6 * $Id$
7 */
8
9#include "MyDb.hpp"
10
11// File: MyDb.cpp
12
13// Class constructor. Requires a path to the location
14// where the database is located, and a database name
15MyDb::MyDb(std::string &path, std::string &dbName,
16           bool isSecondary)
17    : db_(NULL, 0),               // Instantiate Db object
18      dbFileName_(path + dbName), // Database file name
19      cFlags_(DB_CREATE)          // If the database doesn't yet exist,
20                                  // allow it to be created.
21{
22    try
23    {
24        // Redirect debugging information to std::cerr
25        db_.set_error_stream(&std::cerr);
26
27        // If this is a secondary database, support
28        // sorted duplicates
29        if (isSecondary)
30            db_.set_flags(DB_DUPSORT);
31
32        // Open the database
33        db_.open(NULL, dbFileName_.c_str(), NULL, DB_BTREE, cFlags_, 0);
34    }
35    // DbException is not a subclass of std::exception, so we
36    // need to catch them both.
37    catch(DbException &e)
38    {
39        std::cerr << "Error opening database: " << dbFileName_ << "\n";
40        std::cerr << e.what() << std::endl;
41    }
42    catch(std::exception &e)
43    {
44        std::cerr << "Error opening database: " << dbFileName_ << "\n";
45        std::cerr << e.what() << std::endl;
46    }
47}
48
49// Private member used to close a database. Called from the class
50// destructor.
51void
52MyDb::close()
53{
54    // Close the db
55    try
56    {
57        db_.close(0);
58        std::cout << "Database " << dbFileName_
59                  << " is closed." << std::endl;
60    }
61    catch(DbException &e)
62    {
63            std::cerr << "Error closing database: " << dbFileName_ << "\n";
64            std::cerr << e.what() << std::endl;
65    }
66    catch(std::exception &e)
67    {
68        std::cerr << "Error closing database: " << dbFileName_ << "\n";
69        std::cerr << e.what() << std::endl;
70    }
71}
72