C++ app MySQL odbc database connection error: terminate called after throwing an instance of 'otl_tmpl_exception<>
C++ app MySQL odbc database connection error: terminate called after throwing an instance of 'otl_tmpl_exception<>
我目前正在调试一个容器化的 C++ 应用程序,它似乎抛出异常并抱怨数据库连接,错误:
terminate called after throwing an instance of 'otl_tmpl_exception<odbc::otl_exc, odbc::otl_conn, odbc::otl_cur>'
Aborted
main()中的代码如下:
int main(int ac, char *av[])
{
auto otl_connect = std::make_unique<odbc::otl_connect>("Driver={/usr/local/lib/libmyodbc8a.so};server=xxx.x.x.x;port=xxxx;database=xxxx;user=xxx;password=xxx");
std::stringstream query;
query << "SELECT x FROM xxx.xxxs;";
odbc::otl_stream the_stream(1000, query.str().c_str(), *otl_connect);
std::string
int val;
while(!the_stream.eof())
{
the_stream >> xxx >> val;
std::cout << xxx << " " << val << "\n";
}
the_stream.close();
}
我是 C++ 的新手,谁能解释一下 main() 中的代码在做什么以及如何修复异常错误消息,我已经为此工作了一个下午,筋疲力尽... .help!!!!
我对 Oracle、ODBC 和 DB2-CLI 模板库不是很熟悉,但我在 Ubuntu Linux 上尝试将其与 MySql 数据库一起使用。
这就是我如何能够 运行 一个简单的查询。我认为下面的代码相当 self-explanatory.
如您所见,它与您的代码完全不同。 driver 是 mysql
。您必须将 ...
替换为您数据库的真实数据库名称、用户名和密码。您还必须先初始化 ODBC 环境并使用 rlogon()
.
连接到您的数据库
#include <iostream>
#define OTL_ODBC // Compile OTL 4.0/ODBC
#define OTL_ODBC_UNIX
#include "otlv4.h"
int main()
{
otl_connect db; // connect object
otl_connect::otl_initialize(); // initialize ODBC environment
try {
db.rlogon("DRIVER=mysql;DB=...;UID=...;PWD=..."); // connect to ODBC
otl_stream os(50, "SELECT id FROM task", db);
int id;
// SELECT automatically executes when all input variables are assigned
while (!os.eof())
{
os >> id;
std::cout << "id=" << id << std::endl;
}
}
catch(otl_exception& p) { // intercept OTL exceptions
std::cerr << p.msg << std::endl; // print out error message
std::cerr << p.stm_text << std::endl; // print out SQL that caused the error
std::cerr << p.sqlstate << std::endl; // print out SQLSTATE message
std::cerr << p.var_info << std::endl; // print out the variable that caused the error
}
return 0;
}
确保对于要从查询结果中读取的每个字段都有一个变量。您似乎无法将值提取到 std::string
变量中;您必须改用字符数组(例如 char name[20]
)。
希望这对您有所帮助。
我目前正在调试一个容器化的 C++ 应用程序,它似乎抛出异常并抱怨数据库连接,错误:
terminate called after throwing an instance of 'otl_tmpl_exception<odbc::otl_exc, odbc::otl_conn, odbc::otl_cur>'
Aborted
main()中的代码如下:
int main(int ac, char *av[])
{
auto otl_connect = std::make_unique<odbc::otl_connect>("Driver={/usr/local/lib/libmyodbc8a.so};server=xxx.x.x.x;port=xxxx;database=xxxx;user=xxx;password=xxx");
std::stringstream query;
query << "SELECT x FROM xxx.xxxs;";
odbc::otl_stream the_stream(1000, query.str().c_str(), *otl_connect);
std::string
int val;
while(!the_stream.eof())
{
the_stream >> xxx >> val;
std::cout << xxx << " " << val << "\n";
}
the_stream.close();
}
我是 C++ 的新手,谁能解释一下 main() 中的代码在做什么以及如何修复异常错误消息,我已经为此工作了一个下午,筋疲力尽... .help!!!!
我对 Oracle、ODBC 和 DB2-CLI 模板库不是很熟悉,但我在 Ubuntu Linux 上尝试将其与 MySql 数据库一起使用。
这就是我如何能够 运行 一个简单的查询。我认为下面的代码相当 self-explanatory.
如您所见,它与您的代码完全不同。 driver 是 mysql
。您必须将 ...
替换为您数据库的真实数据库名称、用户名和密码。您还必须先初始化 ODBC 环境并使用 rlogon()
.
#include <iostream>
#define OTL_ODBC // Compile OTL 4.0/ODBC
#define OTL_ODBC_UNIX
#include "otlv4.h"
int main()
{
otl_connect db; // connect object
otl_connect::otl_initialize(); // initialize ODBC environment
try {
db.rlogon("DRIVER=mysql;DB=...;UID=...;PWD=..."); // connect to ODBC
otl_stream os(50, "SELECT id FROM task", db);
int id;
// SELECT automatically executes when all input variables are assigned
while (!os.eof())
{
os >> id;
std::cout << "id=" << id << std::endl;
}
}
catch(otl_exception& p) { // intercept OTL exceptions
std::cerr << p.msg << std::endl; // print out error message
std::cerr << p.stm_text << std::endl; // print out SQL that caused the error
std::cerr << p.sqlstate << std::endl; // print out SQLSTATE message
std::cerr << p.var_info << std::endl; // print out the variable that caused the error
}
return 0;
}
确保对于要从查询结果中读取的每个字段都有一个变量。您似乎无法将值提取到 std::string
变量中;您必须改用字符数组(例如 char name[20]
)。
希望这对您有所帮助。