1
我使用的是mysql c++ connector。我想連接到我的數據庫,並保持連接並重新連接,如果連接消失。mysql C++連接器,如何保持連接活動並重新連接,如果連接中斷?
這裏是一個代碼連接:
driver = sql::mysql::get_driver_instance();
connection = driver->connect(Server, UserID, Password);
here它說,該方法連接 - > isValid()的和重新連接()是知道的連接是否還活着,並重新連接,如果它不。所以我這個洞:
bool MySqlCommunicator::Connect()
{
try
{
bool connected = connection != NULL && (connection->isValid() || connection->reconnect());
if (!connected)
{
connection = driver->connect(Server, UserID, Password);
connected = connection->isValid();
}
if (connected)
{
statement = connection->createStatement();
char str[255];
sprintf(str, "USE %s", Database);
statement->execute(str);
return true;
}
return false;
}
catch (sql::SQLException &e)
{
delete connection;
connection = NULL;
return false;
}
}
的話,我想執行一個查詢我調用Connect每次(),以確保連接已準備就緒。如果連接不活動,我假設Connect()方法將重新連接。
但在到達該線的時候,程序崩潰:
bool connected = connection != NULL && (connection->isValid() || connection->reconnect());
它不能執行isValid()方法,該程序與消息段故障退出。
好,我改變了代碼如下:
bool MySqlCommunicator::Connect()
{
try
{
bool connected = connection != NULL; //connection != NULL && (connection->isValid() || connection->reconnect());
if (!connected)
{
connection = driver->connect(Server, UserID, Password);
//connected = connection->isValid();
connected = true;
}
if (connected)
{
statement = connection->createStatement();
char str[255];
sprintf(str, "USE %s", Database);
statement->execute(str);
return true;
}
return false;
}
catch (sql::SQLException &e)
{
delete connection;
connection = NULL;
return false;
}
}
現在的作品!如果發生任何錯誤,它將重新連接,使其正確。但這不是一個解決方案!我想要一個適當的解決方案。
- 爲什麼我的第一個代碼在上述行中崩潰?
- 其他方法像connection-> setReadOnly()也會使程序崩潰!它的原因是什麼?
- 確保連接有效的最佳方法是什麼?
- 如果發生錯誤,重新連接到遠程數據庫的最佳做法是什麼?
(提前等待有人來回答!謝謝)