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

abithluo  于 2024-01-05  发布在  Java
关注(0)|答案(1)|浏览(211)

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

5天前关闭。
Improve this question
我正在编写使用JDBC连接到MySQL数据库的代码。我发现自己多次使用这个try-catch块连接到数据库。我在几个不同的方法中使用它。

  1. try(Connection conn = DriverManager.getConnection(dbURL, dbUser, dbPassword);
  2. Statement stmt = conn.createStatement();
  3. ResultSet rs = stmt.executeQuery(query);
  4. ) {
  5. //here I use different code each time
  6. } catch (SQLException e) {
  7. e.printStackTrace();
  8. }

字符串
有没有办法让这个try-catch块成为一个方法,在这个方法中,我只在try之后为这个块编写代码?

vsmadaxz

vsmadaxz1#

如果我理解正确的话,你需要一个方法,它提供了一个由try-catch组成的框架,你想在里面做不同的事情。
进一步我假设,你想对ResultSet做些什么。正如Gaël指出的,接受Function会很方便。我让方法接受T的泛型,函数返回。

  1. public static <T> Optional<T> execute(final Function<ResultSet, T> mapper, final String query, final String dbURL, final String dbUser, final String dbPassword)
  2. {
  3. try (Connection conn = DriverManager.getConnection(dbURL, dbUser, dbPassword))
  4. {
  5. Statement stmt = conn.createStatement();
  6. ResultSet rs = stmt.executeQuery(query);
  7. return Optional.ofNullable(mapper.apply(rs));
  8. }
  9. catch (SQLException e)
  10. {
  11. e.printStackTrace();
  12. }
  13. return Optional.empty();
  14. }

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

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


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

展开查看全部

相关问题