我有这样的代码。
try {
st = Session.getDbConnection().createStatement();
delSt = Session.getDbConnection().createStatement();
rs = st.executeQuery("SELECT msg_id,message,mobile_no FROM sms");
while (rs.next()) {
delSt.executeUpdate("DELETE FROM sms WHERE msg_id = '" + rs.getString(1) + "'");
System.out.println("Message sent");
}
Session.getDbConnection().commit();
} catch (Exception ex) {
if (ex.getMessage().startsWith("error occurred at recursive")){
}
else{
logger.error(ex.getMessage(), ex);
}
try {
if (rs != null) {
rs.close();
}
if (st != null) {
st.close();
}
if (delSt != null) {
delSt.close();
}
} catch (Exception ex1) {
logger.error(ex1.getMessage(), ex1);
ex1.printStackTrace();
}
try {
if (!Session.getDbConnection().isClosed()) {
Session.getDbConnection().close();
}
} catch (Exception ex1) {
logger.error("ERROR:Closing Database Connection:" + ex.getMessage(), ex);
}
} finally {
}
现在在这种情况下,我想忽略/避免异常“递归SQL级别1发生错误”的日志。但我想记录除此异常之外的其他内容。我的代码出了什么问题。 感谢
答案 0 :(得分:2)
我不认为
if (ex.getMessage().startsWith("error occurred at recursive")){
}
特别安全。您假设异常消息永远不为null(!),然后对异常消息执行比较。我宁愿捕捉特定的例外类别,例如。
catch (SQLException e)
并过滤类本身。您还可以使用数据库返回的错误代码。这些是数据库供应商特定的,请注意。有关详细信息,请参阅SQLException doc,特别是getErrorCode()
方法(我假设您实际上在此处捕获SQLExceptions
,但原则更广泛)
其他评论。您应该在异常处理之外和finally
块中关闭结果集/语句/连接。您需要释放这些资源,无论异常/成功。也许请查看DBUtils.closeQuietly()以安全,简洁地完成此操作。