无法从内部try / catch循环LambdaExpresion Java抛出异常

时间:2016-04-21 17:16:20

标签: java eclipse exception lambda

我有一个名为:

的表名列表
List<String> tables = Lists.newArrayList();

我想要做的是创建一个连接,然后逐个删除所有表。

我的问题是在stmt.exceuteUpdate(sql)行日食中请求我抓住SQLException。但是当我尝试抛出相同的异常时, eclipse说:未处理的异常类型SQLException

在方法声明中我有:

throws  Exception, SQLException

请帮帮我。可能是什么问题?

try (Statement stmt = data.db.getConnection().createStatement()) {
tables.stream().forEach(tableName -> {
    String sql = "  DELETE  FROM " + tableName;
        int deletedRows = 0;
        try {
            deletedRows = stmt.executeUpdate(sql);
        } catch (Exception e) {
            throw e; // eclipse says:  Unhandled exception type SQLException 
        }
});

我在使用throw e;时尝试捕获SQLException或Exception。但是eclipse将此标记为错误!

如果我不使用throw e;,eclipse不会将其标记为错误,但我确实需要在那里抛出异常。

可能是什么问题?

1 个答案:

答案 0 :(得分:3)

您的lambda表达式用作java.util.function.Consumer,它不能从accept方法中抛出已检查的异常。因此,只需抛出RuntimeException,例如

catch (Exception e) { 
    throw new IllegalStateException(e);
}

由于这非常烦人,您还可以删除流方法并使用简单的foreach循环。