2014-01-14 86 views
0

我有一個類來連接MySQL數據庫。這個類有4種方法。 (insert,getResults等)我不想在每個方法中創建數據庫連接。所以我想創建這個對象時需要一個init()。我的問題是連接池解決方案嗎?我該如何解決?只有一個連接數據庫和使用函數,C++

有4種方法類似:

bool DataAccessObject::getResults(short int data, std::vector<FaceRecord>* rec) 
{ 
// DataAccessObject *temp = new DataAccessObject(); 

    bool ret = false; 

    try{ 
     sql::Driver *driver; 
     sql::Connection *con; 
     sql::Statement *stmt; 
     sql::ResultSet *res; 
     sql::PreparedStatement *prepStmt; 

     /* Create a connection */ 
     driver = get_driver_instance(); 
     con = driver->connect("tcp://127.0.0.1:3306", "root", "root"); 

     /* Connect to the MySQL test database */ 
     con->setSchema("test"); 

     std::stringstream s; 
     s << "SELECT * FROM Amts WHERE "<< data <<" = "<< data <<""; 

     prepStmt = con->prepareStatement (s.str()); 
     res = prepStmt->executeQuery(); 

     while(res->next()){ 
      tempFR.uuId = res->getInt64("uuId"); 
      tempFR.cameraNo = res->getInt("cameraNo"); 
      tempFR.age = res->getInt("age"); 
      tempFR.gender = res->getInt("gender"); 
      tempFR.time = res->getString("time"); 
      tempFR.image = res->getString("image"); 
      rec->push_back(tempFR); 
     } 


     //return true; 
     ret = true; 
    } 

    catch (sql::SQLException &e) 
    { 

     std::cout << "# ERR: SQLException in " << __FILE__; 
     std::cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << std::endl; 
     std::cout << "# ERR: " << e.what(); 
     std::cout << " (MySQL error code: " << e.getErrorCode(); 
     std::cout << ", SQLState: " << e.getSQLState() << ")" << std::endl; 

    } 

    return ret; 

} 
+3

你剛剛自己解決了這個問題。目前還不清楚你在問什麼,因爲你甚至沒有輸入所有的方法,也沒有人可能知道你真的在使用什麼課程。 –

+0

檢查數據庫驅動程序的文檔。它可以本地實現連接池,在這種情況下,您不需要這樣做。 – Sean

+0

我已經爲我的問題添加了一個方法。我想刪除「創建連接」字段和之前。 – Duke

回答