2014-01-14 48 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

回答