seltsam - mysqls sql :: SQLException wird nicht von ihrem Typ erfasst, sondern als std :: exception abgefangen und erfolgreich zurückgespielt
Ich benutze MySQL C ++ Connector mit diesem (etwas vereinfachten) Code.
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() );
}
Der Konnektor soll die sql :: SQLException auslösen, die von std :: exception abgeleitet ist und einige zusätzliche Methoden wie hatgetErrorCode()
.
Die geworfene Ausnahme wird in der Sekunde abgefangencatch
Block, kann aber umgewandelt (und verwendet werden als)sql::SQLException
erfolgreich.
Noch seltsamer ist, dass ein ähnlicher Code in einer anderen ausführbaren Datei abfängtsql::SQLException
wie erwartet. Der Unterschied besteht darin, dass sich das erste Objekt in einem gemeinsam genutzten Objekt (.so) befindet, mit dem geladen wirddlopen()
.
RHEL 5.7 32 Bit, gcc 4.1.2