簡體   English   中英

C ++-MySQL連接器

[英]C++ - Mysql connector

我正在使用c ++ mysql連接器在mysql數據庫中進行操作。

我的c ++程序是一個實時應用程序(rest api),始終在雲中運行,始終在等待用戶請求。

當我為第一種類型啟動程序時,我會自動創建與數據庫的連接(我從配置文件中加載連接器的字段)。 例:

conDataBase = new ConDatabase;
if (!conDataBase->Init()) return false;

conDataBase是所有類均可訪問的全局指針。 Init()函數:

bool conDatabase::Init()
{
  GetParameterStr("DATABASE", "HOST", "", hostname, 255);
  db_hostname = hostname;
  GetParameterStr("DATABASE", "USER", "", user, 255);
  db_user = user;
  GetParameterStr("DATABASE", "PASSWORD", "", password, 255);
  db_password = password;
  GetParameterStr("DATABASE", "SCHEMA", "", schema, 255);
  db_schema = schema;
  printf("DATABASE: Connecting to %s \n",db_hostname.c_str());
  printf("DATABASE: Connecting at %s with user %s \n",db_schema.c_str(), db_user.c_str());

  try
  {
    driver = get_driver_instance();
    con = driver->connect(db_hostname.c_str(), db_user.c_str(), db_password.c_str());
    con->setSchema(db_schema.c_str());
    stmt = con->createStatement();
    printf("DATABASE: Connected to database... OK \n");
    return 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 false;
  }
}

因此,當我收到一個請求,例如在userInfo請求類中列出userInfo時,我像這樣調用數據庫類的全局指針:

conDataBase->GetUserInfo(// the parameters);

GetUserInfo()內部,我像這樣構建查詢:

res = stmt->executeQuery(query);

它的工作原理,但我真正的疑問是:是否有必要從mysqlconnector中刪除指針( res, pstmt, con, etc )? 我擔心將來會發生內存泄漏。 我只是在程序退出時才刪除指針,但這是實時程序的原因,因此不能期望他完成操作。 如果我在每個查詢中刪除指針,則在下一次出現分段錯誤時插入等(如mysqlconnector示例一樣),因為在我第一次運行程序時,我會創建數據庫指針con, res, etc,因此我無法刪除這些指針指針在每個數據庫操作中,因為如果執行此操作,則下次刪除指針時,我將無法訪問他,從而導致分段錯誤。 在這種情況下,如何防止將來發生內存泄漏?

在這種情況下,您可以編寫connectionManager類。 它可以用來為以下對象提供api:

1-創建和維護連接池

2-getConnection api從池中獲取連接實例,

3-一個釋放連接API,用於將連接實例放回打開的連接池中,

4-您應該使用stl容器存儲打開的連接等

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM