如何解决避免try-catch-finally地狱
假设我有简单的连接并从数据库中选择。这段代码的悲伤部分是几乎可以说 40-50% 是 try-catch 样板代码。我该如何处理?
$("#recipes").change(function() {
$("#recipeDetailsDiv").show();
});
解决方法
避免try-catch-finally 地狱的方法是使用try-with-resources。它已添加到 Java 7 中的 Java 语言中。有关此 Java 语言功能的更详细说明,请参阅 https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html。
这是使用 try-with-resources 的代码的样子
public static void main(String[] args) throws Exception {
String sql = "SELECT id,name from user";
try (Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost/test","root","root");
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(sql))
{
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.print("ID: " + id);
System.out.print(",name: " + name);
System.out.println();
}
}
}
请注意,try-with-resources 将按照与此相反的顺序自动关闭每个声明的资源(connection
、statement
和 rs
)它们已被声明,并将适当处理在此期间可能出现的任何异常。所以我们不需要任何显式的 close()
调用。
如果这是生产代码,我们不应将 main
声明为抛出异常。我们应该妥善处理异常;即记录它们和/或产生用户友好的错误消息。我只是在这里走捷径……因为这是您原始问题的侧边栏。
您可以使用 try-with-resources 使您的代码更简洁,例如-
try(Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost/test","root"
);Statement statement = connection.createStatement()) {
String sql = "SELECT id,name from user";
ResultSet rs = statement.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.print("ID: " + id);
System.out.print(",name: " + name);
System.out.println();
}
rs.close();
} catch (Exception se) {
se.printStackTrace();
}
它将处理关闭资源。有关详细信息,请访问 Oracle Docs
,DataSource
使用您的所有连接详细信息(例如用户名和密码)设置一个 DataSource
对象。您的 JDBC driver 可能带有一个简单的实现。
SomeDataSourceImplementation ds = new SomeDataSourceImplementation() ;
ds.setUserName( "Scott" ) ;
ds.setPassword( "Tiger" ) ;
…
DataSource dataSource = ds ;
尝试资源语法
try-with-resources 语法是多年前添加的,以帮助简化此类代码。见Tutorial by Oracle。
如果抛出异常,AutoCloseable
对象将按照它们列出的相反顺序关闭。
String sql = "SELECT id,name from user";
try (
Connection conn = dataSource.getConnection() ;
Statement statement = conn.createStatement() ;
ResultSet rs = statement.executeQuery(sql) ;
) {
while ( rs.next() ) {
int id = rs.getInt( "id" ) ;
String name = rs.getString( "name" ) ;
System.out.print( "ID: " + id );
System.out.print( ",name: " + name ) ;
System.out.println();
}
} catch ( SQLException e ) {
e.printStackTrace();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。