【问题标题】:Handle Callback Exceptions In Another Method在另一个方法中处理回调异常
【发布时间】:2021-11-26 04:51:52
【问题描述】:

我正在连接数据库,我想使用回调进行查询,所以我写了这个:

public void query(String query, Consumer<ResultSet> callback, String database) throws SQLException {
    Connection connection;
    
    try { Class.forName(DRIVER_CLASS); } 
    catch (Exception e) { e.printStackTrace(); }
    
    connection = DriverManager.getConnection(URL + "/" + database, USER, "");
    
    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery(query);
    
    callback.accept(resultSet);
    
    connection.close();
}

public void printUsernames() throws SQLException {
    query("SELECT username FROM users;", (ResultSet set) -> {
            while (set.next()) {
                String username = set.getString("username");
                System.out.println(username);
            }           
    }, "cloud");
}

即使是 queryprintUsernames 方法也很难 都声明了一个 throws 语句,我传递的消费者 在printUsernames 中仍然给出编译错误(我被警告我没有处理它可能的 sql 异常)。

有没有办法处理消费者异常 query 这样我就不必为任何其他查询一遍又一遍地编写try-catch?

【问题讨论】:

  • 您得到的错误究竟是什么?
  • 线程“main”java.lang.Error 中的异常:未解决的编译问题:在 main.ConnectDB.main(ConnectDB.java:41) 在 main 方法中我'我只是创建一个新的 ConnectDB 并在 try-catch 中调用 printUsernames
  • 是否有错误消息明确指出这与未捕获的 SQL 异常有关?
  • 是的;我的编辑器突出显示set.nextset.getString(在printUsernames 内)通知我未处理的异常类型SQLException

标签: java exception callback


【解决方案1】:

原来我可以在接口的方法中添加 throws 语句,所以我写了这个:

@FunctionalInterface
public interface Querier {
    public void query(ResultSet res) throws SQLException;
}

如果我稍微重构一下我之前的代码...

public void query(String query, Querier callback, String database) throws SQLException {
    Connection connection;
    
    try { Class.forName(DRIVER_CLASS); } 
    catch (Exception e) { e.printStackTrace(); }
    
    connection = DriverManager.getConnection(URL + "/" + database, USER, "");
    
    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery(query);
    
    callback.query(resultSet);
    
    connection.close();
}

public void printUsernames() throws SQLException {
    query("SELECT username FROM users;", (ResultSet set) -> {
        while (set.next()) {
            String username = set.getString("username");
            System.out.println(username);
        }
    }, "cloud");
}

现在我没有收到任何错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多