#include <mariadb/conncpp.hpp>
|
#include <iostream>
|
#include <thread>
|
#include <string>
|
|
sql::Driver* driver = sql::mariadb::get_driver_instance();
|
sql::SQLString connectionUrl = "jdbc:mariadb://localhost:3306/the_database_name";
|
sql::Properties properties = {{"user", "the_username"}, {"password", "the_password"}};
|
|
int main()
|
{
|
// simulate 2 concurrent connections each making 500 requests
|
std::vector<std::function<void()>> t1cbs;
|
std::vector<std::function<void()>> t2cbs;
|
for(int i = 0; i < 500; i++) // if does not fail for you at 500 up the number until it does
|
{
|
t1cbs.push_back([&]{
|
std::unique_ptr<sql::Connection> conn(driver->connect(connectionUrl, properties));
|
std::cout << "t1:" << conn->getHostname().c_str() << std::endl;
|
});
|
|
// comment out this block to keep the second thread from executing, and you will see
|
// that no errors occur
|
t2cbs.push_back([&]{
|
std::unique_ptr<sql::Connection> conn(driver->connect(connectionUrl, properties));
|
std::cout << "t2:" << conn->getHostname().c_str() << std::endl;
|
});
|
}
|
|
std::thread t1([&]{
|
for(auto& cb : t1cbs)
|
cb();
|
});
|
|
std::thread t2([&]{
|
for(auto& cb : t2cbs)
|
cb();
|
});
|
|
t1.join();
|
t2.join();
|
|
return 0;
|
}
|