estranho - sql :: SQLException do mysql não é pego pelo seu tipo, mas é pego como std :: exception e retorna com sucesso
Eu estou usando o conector mysql c ++ com este código (um pouco simplificado).
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() );
}
O conector deve lançar o sql :: SQLException que deriva de std :: exception e tem alguns métodos adicionais comogetErrorCode()
.
A exceção lançada é capturada no segundocatch
bloco, mas pode ser convertido para (e usado como)sql::SQLException
com sucesso.
Ainda mais estranho é que um código semelhante em um arquivo executável diferente detectasql::SQLException
como esperado. A diferença entre eles é que o primeiro está em um objeto compartilhado (.so) carregado comdlopen()
.
RHEL 5,7 32 bit, gcc 4.1.2