我有一个表名称列表,名为:
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/