用另一种方法处理回调异常



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

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了?

原来我可以在接口的方法中添加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");
}

现在我没有任何错误。

最新更新