java - 无法从内部 try/catch 循环 Lambda 表达式 Java 抛出异常

标签 java eclipse exception lambda

我有一个表名称列表,名为:

List<String> tables = Lists.newArrayList();

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

我的问题是在 stmt.exceuteUpdate(sql) 行内 Eclipse 要求我捕获 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 不会将其标记为错误,但我确实需要在那里抛出异常。

可能是什么问题?

最佳答案

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

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

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

关于java - 无法从内部 try/catch 循环 Lambda 表达式 Java 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36776405/

相关文章:

eclipse - 类的文件夹

java - SimpleDateFormat(无法解析的异常)

java - 除非明确捕获,否则异常不会显示在控制台中

java - JSON - 对象数组中的对象数组

java - 无法确定 loggerName (org.optaplanner.core) 的日志记录级别

java - 如何启用 Eclipse 应用程序的远程调试?

c++ - 通过 C++ 获取 micro SD 卡的大小

python - sort() 按日期抛出异常。哪个元素失败了?

java - 在共享对象 dll 中创建的 JNA 空闲内存

java - 完全合格的机器名 Java with/etc/hosts