Selamlar, mysql bağlayıcısı C++ ile otomatik yeniden bağlanma seçeneğini nasıl ayarlayabilirim? (mysql c api ile değil http://dev.mysql.com/doc/refman/5.0/en/mysql-options.html)mysql bağlayıcısı ile autoreconnect seçeneği nasıl ayarlanır C++
cevap
Bu kütüphanenin bir kullanıcısı değilim, bu yüzden bu konudaki bilgim sadece son 10 dakikadır, yani lütfen doğrulayın.
Genel bir kural olarak, bir kütüphanenin çeşitli ayrıntılarının kullanımıyla ilgili bu tür bilgilerin en iyi kaynağı ünite testlerine bakmaktır. OSS hakkında en iyi şey.
Kaynak ağacında bulunan MySQL Connector/C++ birim testlerine bakarsanız, aşağıdaki özü göreceksiniz.
sql::ConnectOptionsMap connection_properties;
...
connection_properties["OPT_RECONNECT"]=true;
try
{
con.reset(driver->connect(connection_properties));
}
catch (sql::SQLException &e)
{
std::cerr << e.what();
}
Daha fazla bilgi için, lütfen aşağıdan bakın, böylece kendinize bir göz atabilirsiniz.
~/tmp$ bzr branch lp:~mysql/mysql-connector-cpp/trunk mysql-connector-cpp
~/tmp$ vi mysql-connector-cpp/test/unit/classes/connection.cpp +170
~/tmp$ vi mysql-connector-cpp/test/unit/classes/connection.h
, vb yepyeni bağlantısı olarak bir yeniden bağlantı tedavisi için mysql seçenek, herhangi bir oturum değişkenleri sıfırlamak zorunda olacak gibi çok dikkatli kullanılmalıdır olacak yeniden bağlamak tüm bu having. Bu, üzerinde çalıştığınız MySQL'in belirli sürümünün belgelendirilmesiyle doğrulanmalıdır.
Teşekkür ederim @CodeMedic, benim kütüphanem sürümü con.reset yöntemi yok, ben en son sürümü ile deneyeceğim. Ve ayrıca hiçbir şans olmadan con-> setClientOption ("OPT_RECONNECT", "true") denedim :( – xdebug
Boolean değerini başvuruyla iletmeniz gerekir. Benim kodum:
bool myTrue = true;
con->setClientOption("OPT_RECONNECT", &myTrue);
Ve bu benim için çalıştı.
daha tam bir örnek
başlık
#include <boost/thread.hpp>
#include <boost/shared_ptr.hpp>
#include <mysql_connection.h>
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>
std::string host_name = "localhost";
std::string user_name = "user1234";
std::string password = "pw1234";
std::string database_name = "TestingDB";
bool reconnect_state = true;
sql::ConnectOptionsMap connection_properties;
sql::Driver *driver;
boost::shared_ptr <sql::Connection> con;
boost::shared_ptr <sql::Statement> stmt;
boost::shared_ptr <sql::ResultSet> res;
boost::shared_ptr <sql::PreparedStatement> pstmt;
bağlamak
driver = get_driver_instance(); // protected
con.reset(driver->connect (host_name, user_name, password)); // connect to mysql
con->setClientOption("OPT_RECONNECT", &reconnect_state);
con->setSchema(database_name);
iplik
std::vector <std::string> database::string_from_sql (std::string query, std::string column_name)
{
std::cout << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") | started" << std::endl;
std::vector <std::string> svec;
try
{
driver->threadInit(); // prevents multiple open connections
if (con.get() == NULL)
{
std::cerr << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") | connection is not open" << std::endl;
throw -2;
}
stmt.reset (con->createStatement());
res.reset (stmt->executeQuery (query));
while (res->next())
{
svec.push_back(res->getString (column_name));
}
driver->threadEnd();
}
catch (sql::SQLException &e)
{
std::cerr << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") | e.what(): " << e.what() << " (MySQL error code: " << e.getErrorCode() << ", SQLState: " << e.getSQLState() << ")" << std::endl;
throw -1;
}
if (svec.empty())
{
std::cerr << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") | return vector size is 0 (Empty set)" << std::endl;
throw -3;
}
std::cout << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") | ended" << std::endl;
return svec;
}
C API'sinde, bir sorgu başarısız olursa, veritabanına ping atmak ve sorguyu yeniden denemek yaygın bir uygulamadır. – chrisaycock
Sorgulama başarısız olursa yeniden bağlayabilirim (Mysql sunucusu kayboldu, Bağlantı sırasında bağlantı kesildi vb) ancak http://dev.mysql.com/doc/refman/5.0/en/connector-j adresinde belirtildiği gibi autoReconnect'i ayarlamak istiyorum -reference-configuration-properties.html – xdebug