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