避免java中的特定异常

避免java中的特定异常,java,exception-handling,Java,Exception Handling,我有这样的代码 try { st = Session.getDbConnection().createStatement(); delSt = Session.getDbConnection().createStatement(); rs = st.executeQuery("SELECT msg_id,message,mobile_no FROM sms"); while (rs.next()) {

我有这样的代码

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发生错误”。但我想记录除此之外的其他异常。我的代码有什么问题。 谢谢

我不认为

 if (ex.getMessage().startsWith("error occurred at recursive")){
 }
特别安全。假设异常消息从不为null(!),然后对异常消息执行比较。我宁愿捕捉特定的异常类,例如

   catch (SQLException e)
并对类本身进行过滤。您还可以使用数据库返回的错误代码。注意,这些是特定于数据库供应商的。有关更多详细信息,请参见doc,特别是
getErrorCode()
方法(我假设您实际上在这里捕获了
SQLExceptions
,但原理更广泛)


其他评论。您应该在异常处理外部和
finally
块中关闭resultset/statements/connection。您需要释放这些资源,而不管异常/成功与否。也许可以安全、简洁地检查一下。

避免
不同于
忽略
!我不知道。怎么了?异常等?这是一个丑陋的使用
if
的例子。而不是
if(condition){}else{doSomething();}
do
if(!condition){doSomething();}
只是为了可读性。但这只是旁注。不起作用意味着,它仍然保留异常日志“递归时出错”