MySQL C++ 连接器:SIGABRT 连接到数据库
MySQL C++ Connector: SIGABRT Connecting to Database
我很难克服这个错误。最近,从 Ubuntu 14.04 的 VM 更改为将 Ubuntu 15.10 作为我的主机 OS。现在我在这个项目上遇到了无数问题;这是最新的。我在执行调用此函数的代码时收到 SIGABRT 信号 DB_Interface::DB_Interface(int Preset)
。当从可执行文件调用此函数时,错误出现在第二个 try{}catch{}
块中。所以我不认为它特定于 SetSchema
。
我已尝试重新安装所有 mysql 库和工具 (HERE)。我已经检查过使用相同的凭据从命令提示符访问服务器没有问题。所以我倾向于 C++ 连接器与某些东西的不兼容性……百万美元的问题。所以我的问题是如何解决这个问题。更多信息如下:
系统信息:
- Ubuntu 15.10
- MySQL:版本 14.14 分发 5.6.27
代码摘录:
DB_Interface::DB_Interface(int Preset) {
try{
driver = sql::mysql::get_mysql_driver_instance();
flags[0] = 0;
}
catch(...)
{
flags[0] = 1;
printf("DB_Interface: Flag 0 has been set.");
throw Except;
}
try{
con = driver->connect("localhost:3306", "CANS_OPERATION", "SMOOTH_OPERATOR");
flags[1] = 0;
}
catch(...)
{
flags[1] = 1;
printf("DB_Interface: Flag 1 has been set.");
throw Except;
}
try{
con->setSchema("CANS_SQL"); //SIGABRT occurs in executing this line.
std::string Query = "UNLOCK TABLES";
sql::Statement *stmt;
stmt = con->createStatement();
stmt->execute(Query);
flags[4] = 0;
}
catch(sql::SQLException &e)
{
flags[4] = 1;
printf("DB_Interface: Flag 4 has been set");
throw Except;
}
编辑 1
也尝试了以下但没有成功。
sudo apt-get install cpp:i386 gcc:i386 g++-5:i386 gcc-5:i386 g++:i386 libboost-dev:i386 binutils:i386
随后重新安装 libmysqlcppconn-dev。
对于可能遇到相同问题的任何人,此问题已得到解决。当我迁移到 Ubuntu 15.10 时,我使用了与上次设置中相同的模式模型。在测试项目的完全独立模式上进行测试后,我没有发现任何问题。这让我预感在此版本的 MySQL 和 Ubuntu 中重新创建我的架构可能会缓解一些问题。令人惊讶,令人惊讶的是。之后我重新创建了用户 "CANS_OPERATION"。我上面的摘录然后起作用了。为了让 MATLAB 包装器也能使用它,我从推荐的 mex 函数的 g++-4.7 编译器更改为最新版本。希望这个能找到好人。
我很难克服这个错误。最近,从 Ubuntu 14.04 的 VM 更改为将 Ubuntu 15.10 作为我的主机 OS。现在我在这个项目上遇到了无数问题;这是最新的。我在执行调用此函数的代码时收到 SIGABRT 信号 DB_Interface::DB_Interface(int Preset)
。当从可执行文件调用此函数时,错误出现在第二个 try{}catch{}
块中。所以我不认为它特定于 SetSchema
。
我已尝试重新安装所有 mysql 库和工具 (HERE)。我已经检查过使用相同的凭据从命令提示符访问服务器没有问题。所以我倾向于 C++ 连接器与某些东西的不兼容性……百万美元的问题。所以我的问题是如何解决这个问题。更多信息如下:
系统信息:
- Ubuntu 15.10
- MySQL:版本 14.14 分发 5.6.27
代码摘录:
DB_Interface::DB_Interface(int Preset) {
try{
driver = sql::mysql::get_mysql_driver_instance();
flags[0] = 0;
}
catch(...)
{
flags[0] = 1;
printf("DB_Interface: Flag 0 has been set.");
throw Except;
}
try{
con = driver->connect("localhost:3306", "CANS_OPERATION", "SMOOTH_OPERATOR");
flags[1] = 0;
}
catch(...)
{
flags[1] = 1;
printf("DB_Interface: Flag 1 has been set.");
throw Except;
}
try{
con->setSchema("CANS_SQL"); //SIGABRT occurs in executing this line.
std::string Query = "UNLOCK TABLES";
sql::Statement *stmt;
stmt = con->createStatement();
stmt->execute(Query);
flags[4] = 0;
}
catch(sql::SQLException &e)
{
flags[4] = 1;
printf("DB_Interface: Flag 4 has been set");
throw Except;
}
编辑 1 也尝试了以下但没有成功。
sudo apt-get install cpp:i386 gcc:i386 g++-5:i386 gcc-5:i386 g++:i386 libboost-dev:i386 binutils:i386
随后重新安装 libmysqlcppconn-dev。
对于可能遇到相同问题的任何人,此问题已得到解决。当我迁移到 Ubuntu 15.10 时,我使用了与上次设置中相同的模式模型。在测试项目的完全独立模式上进行测试后,我没有发现任何问题。这让我预感在此版本的 MySQL 和 Ubuntu 中重新创建我的架构可能会缓解一些问题。令人惊讶,令人惊讶的是。之后我重新创建了用户 "CANS_OPERATION"。我上面的摘录然后起作用了。为了让 MATLAB 包装器也能使用它,我从推荐的 mex 函数的 g++-4.7 编译器更改为最新版本。希望这个能找到好人。