在java中从catch / finally返回值?

时间:2012-05-11 12:45:05

标签: java exception jdbc

我有以下代码。如果执行查询而没有异常,则应返回true,如果抛出任何异常,则应返回false。最后声明和连接应该关闭。 我的问题是我应该在哪里写回复陈述?在赶上还是最后?在下面的代码中,如果执行查询,我在try中返回true,如果抛出任何异常,则在catch中返回false。我的问题是,如果抛出任何异常,返回false并关闭连接和语句会发生吗?

try {
            statement = connection.createStatement();
            statement.executeQuery("select * from dual");
            return true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
                   return false;
        } finally{
                try {

                        statement.close();

                        connection.close();

                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();

                }

        }

5 个答案:

答案 0 :(得分:8)

两者都没有,将它写在try-catch块之外,在它下面。 永远不会在最终版块中使用因为返回语句会一直执行,践踏try块中的常规return语句!

答案 1 :(得分:5)

  

我应该在哪里写return语句?

在最后}

之后,将其放在最后
    try {
        ...
        return true;
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        ...
    }
    return false; // <===== HERE

这样,当且仅当true块中的代码执行而不抛出异常时,函数才会返回try。在所有其他情况下,该函数将返回false

答案 2 :(得分:3)

它不会像你写的那样起作用。要正确执行finally块的返回,您需要保持状态,即

boolean result = false;

try
{
 // all good
 result = true;
} 
catch(...)
{
 // crap
 result = false;
}
finally
{
 // close
}
return result;

这假设您希望执行finally块中的内容并返回正确的结果。

答案 3 :(得分:1)

最好还是尝试使用JDK 7并使用新的资源尝试。

答案 4 :(得分:1)

你可以尝试

boolean returnVal = false
try {
            statement = connection.createStatement();
            statement.executeQuery("select * from dual");
            returnVal = true;
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    returnVal = false;
    } finally{
            try {

                    statement.close();

                    connection.close();


            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
         returnVal = false;

            }
    return returnVal;

    }