3

我有以下代码。如果查询没有异常执行,则应返回 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();

                }

        }
4

5 回答 5

8

在两者中,都将其写在 try-catch 块之外,在其下方。切勿在最终块中使用返回,因为该返回语句将始终执行,践踏您在 try 块中的常规返回语句!

于 2012-05-11T12:47:48.917 回答
5

我应该在哪里写return语句?

把它放在最后,在 final 之后}

    try {
        ...
        return true;
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        ...
    }
    return false; // <===== HERE

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

于 2012-05-11T12:48:27.577 回答
4

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

boolean result = false;

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

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

于 2012-05-11T12:48:25.170 回答
1

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

于 2012-05-11T12:49:05.593 回答
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;

    }
于 2012-05-11T12:49:12.337 回答