Lời chào, làm thế nào tôi có thể đặt tùy chọn tự động kết nối với kết nối mysql C++? (không phải với mysql c api http://dev.mysql.com/doc/refman/5.0/en/mysql-options.html)Cách đặt tùy chọn tự động kết nối với đầu nối mysql C++
Trả lời
Tôi không phải là người dùng thư viện này, vì vậy kiến thức của tôi về nó chỉ có giá trị 10 phút cuối cùng, vì vậy vui lòng xác minh.
Theo nguyên tắc chung, tài nguyên tốt nhất của thông tin đó về việc sử dụng các chi tiết cụ thể khác nhau của thư viện là xem xét các bài kiểm tra đơn vị của nó. Điều tốt nhất về PMNM.
Vì vậy, nếu bạn xem xét các trình kiểm tra đơn vị kết nối MySQL/C++ có thể tìm thấy trên cây nguồn của chúng, bạn sẽ thấy phần trích xuất bên dưới.
sql::ConnectOptionsMap connection_properties;
...
connection_properties["OPT_RECONNECT"]=true;
try
{
con.reset(driver->connect(connection_properties));
}
catch (sql::SQLException &e)
{
std::cerr << e.what();
}
Để biết thêm thông tin, vui lòng thực hiện bên dưới để bạn có thể tự xem.
~/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
Có nói tất cả những gì, kết nối lại tùy chọn trong mysql phải được sử dụng rất cẩn thận, vì bạn sẽ phải thiết lập lại bất kỳ biến phiên giao dịch, vv Bạn sẽ phải đối xử với một kết nối kết nối lại như một kết nối hoàn toàn mới. Điều này phải được xác minh bằng tài liệu về phiên bản MySQL cụ thể mà bạn đang làm việc.
Cảm ơn bạn @CodeMedic, phiên bản thư viện của tôi không có phương thức con.reset, tôi sẽ dùng thử phiên bản mới nhất. Và tôi cũng đã thử con-> setClientOption ("OPT_RECONNECT", "true") không có may mắn: ( – xdebug
Bạn cần chuyển giá trị boolean theo tham chiếu. Mã của tôi có:
bool myTrue = true;
con->setClientOption("OPT_RECONNECT", &myTrue);
Và điều đó hiệu quả với tôi.
Một hoàn chỉnh hơn ví dụ
tiêu đề
#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;
kết nối
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);
chủ đề
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;
}
- 1. kết nối với mysql bằng C++
- 2. Cách kết nối với mysql bằng cách sử dụng kết nối mysql qua C# mà không thực sự cài đặt trình kết nối
- 3. Mac: tự động kết nối với IOBluetoothDevice
- 4. Cách tự động kết nối lại hồ bơi kết nối Oracle sau khi ngắt kết nối?
- 5. Tự động kết nối lại với Internet
- 6. Kết nối MySQL với MATLAB?
- 7. Tắt tự động kết nối lại trong máy khách MySQL
- 8. Kết nối C# với Oracle
- 9. Tự động kết nối lại của MySQL trong django
- 10. Cách xóa kết nối MySQL
- 11. cách kết nối java và mysql bằng cách sử dụng kết nối mysql java 5.1.12
- 12. MySQL - kết nối liên tục vs kết nối tổng hợp
- 13. Thực hành kết nối mysql C#
- 14. C++ kết nối luồng đầu ra với luồng đầu vào
- 15. Kết nối MySql SSL với Zend-Framework
- 16. Kết nối Mysql không đồng bộ
- 17. kết nối với mysql từ cygwin
- 18. Bắt đầu cơ bản với Visual Studio C# và SQL Compact (kết nối, chọn, chèn)?
- 19. Không thể kết nối với MySQL với JDBC - Thời gian chờ kết nối - Ubuntu 9.04
- 20. Làm thế nào để cho phép máy khách MySQL tự động kết nối lại với MySQLdb?
- 21. SockJS Client tự động kết nối lại?
- 22. Làm thế nào để kết nối Django với một cơ sở dữ liệu mysql qua kết nối ssl?
- 23. Làm cách nào để có cấu trúc kết nối C API gốc từ Trình kết nối MySQL/C++?
- 24. Kết nối Perl Kết nối
- 25. Tự động kết nối lại với máy chủ TCP
- 26. Kết nối MySQL C++ 1.1.3 không chứa libmysql.lib
- 27. Cách tắt tự động kết nối WIFI trong Android
- 28. Kết nối với MySQL thông qua Cygwin
- 29. cập nhật với kết nối mysql?
- 30. cách kết nối F # với cơ sở dữ liệu MySQL?
Thực tiễn phổ biến trong API C là nếu truy vấn không thành công, hãy ping cơ sở dữ liệu và thử lại truy vấn. – chrisaycock
tôi có thể kết nối lại nếu truy vấn thất bại (máy chủ Mysql đã biến mất, Mất kết nối trong khi truy vấn v.v.) nhưng tôi muốn đặt autoReconnect như được đề cập tại http://dev.mysql.com/doc/refman/5.0/en/connector-j -reference-configuration-properties.html – xdebug