【问题标题】:Only one connection to database and use functions, C++只有一个连接到数据库和使用函数,C++
【发布时间】:2014-01-14 15:54:36
【问题描述】:

我有一个类来连接 MySQL 数据库。这个类有4个方法。 (插入、getResults 等)我不想在每个方法中都创建数据库连接。所以当我们创建这个对象时我想要一个 init() 。连接池是我的问题的解决方案吗?我该如何解决?

有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;

}

【问题讨论】:

  • 你自己解决了这个问题。不清楚你在问什么,因为你甚至没有输入所有的方法,而且没有人可能知道你真正使用的是什么类。
  • 查看数据库驱动程序的文档。它可能会原生实现连接池,在这种情况下,您无需这样做。
  • 我在我的问题中添加了一个方法。我想删除“创建连接”字段和之前的字段。
  • 您不想通过连接?
  • 我想通过连接。所以我想在这个类的构造函数中创建连接,或者在一个初始化函数中,然后使用这个方法(插入,检索)而不创建连接。

标签: c++ mysql database connection pool


【解决方案1】:

您可以使用C++ Singleton design pattern,这样您的 init 在创建时只被调用一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 2011-11-12
    • 2012-04-27
    • 2011-08-22
    • 2016-12-09
    • 1970-01-01
    相关资源
    最近更新 更多