【发布时间】:2025-11-20 16:00:03
【问题描述】:
我正在使用带有这个(有点简化的)代码的 mysql c++ 连接器。
try
{
statement->setString(1, word);
statement->executeUpdate();
}
catch( sql::SQLException& e )
{
// I don't get here
return sqlerrno_to_error_code( e.getErrorCode() );
}
catch( std::exception& e )
{
// I do get here and the cast works
sql::SQLException& sqle = (sql::SQLException&) e;
return sqlerrno_to_error_code( sqle.getErrorCode() );
}
连接器应该抛出派生自 std::exception 的 sql::SQLException 并具有一些附加方法,例如 getErrorCode()。
引发的异常在第二个catch 块中被捕获,但可以成功转换为(并用作)sql::SQLException。
更奇怪的是,不同可执行文件中的类似代码按预期捕获sql::SQLException。它们之间的区别在于第一个是在一个共享对象 (.so) 中,它加载了dlopen()。
RHEL 5.7 32 位,gcc 4.1.2
【问题讨论】:
标签: c++ mysql linux exception shared-libraries