我有以下java代码:
if (ps.executeUpdate() != 1)
{
// Error - did not insert one row
String err = "insert unable to insert LocalUsage data: " + usg.toString();
Logger.log(err, _MODULE_CLASS, Logger.DEBUG);
throw new DaoException(err);
}
如果查询有外键异常的问题,那么它将被抛出但它永远不会进入if内部。我该怎么办才能进入if并输出我的日志?
问题是这个if条件在try catch块中,并且它将进入catch并且永远不会进入if条件。
答案 0 :(得分:3)
executeUpdate()
可能会抛出SQLException
,如其API文档中所述。您可能希望捕获该异常。
int count;
try {
count = ps.executeUpdate();
} catch (SQLException e) {
throw new DaoException("Exception while executing update: " + e.getMessage());
}
if (count != 1) {
// ...
}
答案 1 :(得分:1)
由于docs状态,executeUpdate()可能会抛出异常,因此您的代码流将失败,之后您将无法进行任何处理,因为您的异常处理不正确。
我认为现在你的代码正在发生。
在进行数据库调用时,我建议你这样做:
int operationStatus;
try {
operationStatus = ps.executeUpdate();
} catch(SQLException exp) {
final String message = "SQL Exception while calling executeUpdate()";
logger.error(message, exp);
throw new DAOException(message, logger);
} catch(Exception exp) {
final String message = "Exception while calling executeUpdate()";
logger.error(message, exp);
throw new DAOException(message, logger);
} finally {
//you may wish to clean up resources if they are not going to be used after this point.
}
if(operationStatus < 0) {
//Next steps
}