我有一个名为:
的表名列表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不会将其标记为错误,但我确实需要在那里抛出异常。
可能是什么问题?
答案 0 :(得分:3)
您的lambda表达式用作java.util.function.Consumer
,它不能从accept
方法中抛出已检查的异常。因此,只需抛出RuntimeException
,例如
catch (Exception e) {
throw new IllegalStateException(e);
}
由于这非常烦人,您还可以删除流方法并使用简单的foreach循环。