簡體   English   中英

MySQL C++ 連接器回路

[英]MySQL C++ connector loop

#include <iostream>
#include <sstream>
#include <string>

#include <mysql_connection.h>
#include <mysql_driver.h>
#include <mysql_error.h>

#include <cppconn/driver.h>
#include <cppconn/exception.h>

using namespace std;
using namespace sql;
using namespace mysql;
int main()
{
 Connection* con = nullptr;
 MySQL_Driver *driver = get_mysql_driver_instance();
 const SQLString server = "server.de";
 const SQLString user = "userName";
 const SQLString password = "password";

 while (1)
 {
  try {
   con = driver->connect(server, user, password);
  }
  catch (SQLException e) {
   printf("Fehler SQL Connect: %s \n", e.getSQLStateCStr());
   delete driver;
  }
  catch (...) {
   cerr << "Fehler SQL Connnect" << endl;
  }
  if (con)
  {
   con->close();
   delete con;
  }
  boost::detail::Sleep(5000);
 }
 return 0;
}

我編寫了這段代碼,並希望即使連接語句失敗,它也能在無限循環中運行。 發生的情況是:在第一次連接失敗后,它進入第一個 catch 語句並按照我的預期寫入“Fehler SQL Connect: HY000”。 下次連接失敗時,程序會中斷,在 VS2017 中我看到“te923021119.exe 已觸發斷點”為什么程序不嘗試無休止地連接? 數控車床

在您處理的異常中,您調用delete driver; 此調用會破壞驅動程序 object。 目前尚不清楚這是否正確 - 因為尚不清楚get_mysql_driver_instance()是否為您提供了動態分配的 object 和new的所有權。 但無論如何 - 在下一次迭代中,您的程序嘗試使用已被破壞的driver 所以-我認為不要調用delete driver; . 更好的是 - 使用智能指針清楚地傳達所有權語義。 std::unique_ptr 可能是一個不錯的選擇。

暫無
暫無

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

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