我正在编写使用 JDBC 连接到 MySQL 数据库的代码。我发现自己使用这个 try-catch 块多次连接到数据库。我以几种不同的方法使用它。
try(Connection conn = DriverManager.getConnection(dbURL, dbUser, dbPassword);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
) {
//here I use different code each time
} catch (SQLException e) {
e.printStackTrace();
}
有没有办法让这个 try-catch 块成为一个方法,让我在 try 之后只为该块编写代码?
我希望你明白我的意思。 谢谢!
如果我理解正确的话,您需要一个提供由 try-catch 组成的框架的方法,并且您想在其中执行不同的操作。
我进一步假设,您想对结果集做一些事情。 正如 Gaël 指出的那样,接受
Function
会很方便。我让该方法接受函数返回的泛型 T。
public static <T> Optional<T> execute(final Function<ResultSet, T> mapper, final String query, final String dbURL, final String dbUser, final String dbPassword)
{
try (Connection conn = DriverManager.getConnection(dbURL, dbUser, dbPassword))
{
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
return Optional.ofNullable(mapper.apply(rs));
}
catch (SQLException e)
{
e.printStackTrace();
}
return Optional.empty();
}
吞并异常并不是最佳选择。
我还会考虑使用查询来柯里化函数。