我想知道如何避免try-catch语句。现在我有一个数据库处理程序,每次运行命令时我都必须在try块中包围它,如下所示:
try {
while(levelData.next()) {
if(levelData.getInt("level") == nextLevel) return levelData.getInt("exp");
}
} catch (SQLException e) {
e.printStackTrace();
}
我可以这样做,以便实际函数抛出异常或其他东西吗?而不是必须手动将所有这些尝试放入?它主要只是一个美学问题,因为这些试块看起来很难看。
答案 0 :(得分:6)
您可以改为抛出异常:
public void myMethod() throws SQLException {
while(levelData.next()) {
if(levelData.getInt("level") == nextLevel)
return levelData.getInt("exp");
}
}
答案 1 :(得分:1)
您可以使方法使用throws
关键字抛出异常,而不是使用try
- catch
块,但在某些时候需要处理异常。我发现最令人讨厌的是多个catch
语句,但是如果你使用JDK> = 1.7,它们有一个多捕获选项可用。对于异常日志记录,您可以使用log4j库。
答案 2 :(得分:1)
现在我每次运行命令时都有一个数据库处理程序和 必须像试一样包围它......
我认为其他答案未能解决上述问题。当我开始使用Java编程时,我讨厌我的程序充满try
- catch
块的SQL查询语句。
我解决它的方法是使用DAO级别层来处理异常。例如,如果我的程序需要访问User表,我创建一个UserDAO类。然后创建查询并在该DAO类中捕获异常。
每次发生异常时,我都会执行所需的日志记录并抛出自定义指定的Unchecked Exception,例如 DatabaseErrorException 。未经检查的异常与已检查的异常(例如SQLException
)之间的主要区别在于您不会被迫catch
或throw
,因此它不会填充您的代码throws
声明。
(是的,你可以使用throws来避免使用try
- catch
,但无论如何你必须在某个地方处理它,并考虑到你的函数到处都有throws
。)
然后我们可以在应用程序的最高级别拥有一个全局过滤器来捕获通过该程序传播的所有这些异常。通常无法恢复数据库错误,因此我们只需要向用户显示错误。