Java方法中的try-catch块[已关闭]

abithluo  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(50)

已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

5天前关闭。
Improve this question
我正在编写使用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之后为这个块编写代码?

vsmadaxz

vsmadaxz1#

如果我理解正确的话,你需要一个方法,它提供了一个由try-catch组成的框架,你想在里面做不同的事情。
进一步我假设,你想对ResultSet做些什么。正如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();
}

字符串
你可以通过传递一个lambda来调用它

Function<ResultSet, MyEntity> mapper = (rs) -> new MyEntity(rs.getString(0));
Optional<MyEntity> result = execute(mapper, query, dbURL, dbUser, dbPassword);


吞下异常并不是最佳选择。
我也会考虑用查询来curry函数。

相关问题