我有一个从 C++ 程序到 MySQL 数据库的连接问题:
std::string server, user, password;
SetParams(server, user, password);
boost::shared_ptr<sql::Connection> conn;
sql::Driver *driver = get_driver_instance();
if(driver == 0) { /* error; never reached */ }
try {
conn.reset(driver->connect(server, user, password));
assert(conn != 0);
if(!conn->isClosed()) // <-- exception thrown
{
// Connection established
}
else {
// Connection failed
}
}
catch (sql::SQLException &e)
{
cerr << e.what << e.getErrorCode() << e.getSQLState() << endl;
}
该sql::Connection::isClosed()
函数抛出此异常:
SQLException: Connection has been closed
MySQL error code: 0
SQLState: HY000
服务器、用户和密码的值是正确的(它们可以从 MySQL-Workbench 连接),数据库已启动并正在运行。
我不知道在哪里看...
谢谢。
平台:
Linux - OpenSuse 11.4
MySQL 5.x
MySQL Connector/C++ 1.0.5
更新:
由于我在某处读到 MySQL Connector/C++ 和 Boost 之间可能存在的冲突,因此我尝试使用普通指针而不是 boost::shared_ptr。没有改变。
更新2:
将此代码隔离在主程序之外,连接成功。
我必须看大局...