/** * Create a connection to the database. */ void MySqlDataProvider::connect() { if (mIsConnected) return; // retrieve configuration from config file const std::string hostname = Configuration::getValue(CFGPARAM_MYSQL_HOST, CFGPARAM_MYSQL_HOST_DEF); const std::string dbName = Configuration::getValue(CFGPARAM_MYSQL_DB, CFGPARAM_MYSQL_DB_DEF); const std::string username = Configuration::getValue(CFGPARAM_MYSQL_USER, CFGPARAM_MYSQL_USER_DEF); std::string password = Configuration::getValue(CFGPARAM_MYSQL_PWD, CFGPARAM_MYSQL_PWD_DEF); const unsigned tcpPort = Configuration::getValue(CFGPARAM_MYSQL_PORT, CFGPARAM_MYSQL_PORT_DEF); // allocate and initialize a new MySQL object suitable // for mysql_real_connect(). mDb = mysql_init(nullptr); if (!mDb) { throw DbConnectionFailure( "unable to initialize the MySQL library: no memory"); } LOG_INFO("Trying to connect with mySQL database server '" << hostname << ":" << tcpPort << "' using '" << username << "' as user, and '" << dbName << "' as database."); password = "******"; // actually establish the connection. if (!mysql_real_connect(mDb, // handle to the connection hostname.c_str(), // hostname username.c_str(), // username password.c_str(), // password dbName.c_str(), // database name tcpPort, // tcp port nullptr, // socket, currently not used CLIENT_FOUND_ROWS)) // client flags { std::string msg(mysql_error(mDb)); mysql_close(mDb); throw DbConnectionFailure(msg); } // Save the Db Name. mDbName = dbName; // Initialize statement structure mStmt = mysql_stmt_init(mDb); mIsConnected = true; LOG_INFO("Connection to mySQL was sucessfull."); }
/** * Create a connection to the database. */ void SqLiteDataProvider::connect() { // get configuration parameter for sqlite const std::string dbName = Configuration::getValue(CFGPARAM_SQLITE_DB, CFGPARAM_SQLITE_DB_DEF); LOG_INFO("Trying to connect with SQLite database file '" << dbName << "'"); // sqlite3_open creates the database file if it does not exist // as a side-effect. if (sqlite3_open(dbName.c_str(), &mDb) != SQLITE_OK) { // save the error message thrown by sqlite3_open() // as we may lose it when sqlite3_close() runs. std::string msg(sqlite3_errmsg(mDb)); // the SQLite3 documentation suggests that we try to close // the database after an unsuccessful call to sqlite3_open(). sqlite3_close(mDb); // FIXME // 21-Jun-2005: although we did invoke sqlite3_close(), there // seems to be still a leak of 136 bytes here. throw DbConnectionFailure(msg); } // Wait up to one second when the database is busy. This should make sure // transaction failures due to locked databases are very rare. sqlite3_busy_timeout(mDb, 1000); // Save the Db Name. mDbName = dbName; mIsConnected = true; LOG_INFO("Connection to database successful."); }