我想在SQLException
方法的try-catch块上捕获Foo
,这是我的代码实际上不起作用;
public int Foo() {
try {
DB.delete("table", "fname=" + name);
} catch (SQLException e) {
LOGGER.log(Level.WARNING, e.getMessage());
}
}
public int delete(String table, String conditions) {
int updatedRow = 0;
try {
String sql = "DELETE FROM " + table + " SET " + " WHERE " + conditions;
updatedRow = SPM_Database.opeStmt.executeUpdate(sql);
} catch (SQLException ex) {
System.out.println("message" + ex);
LOGGER.log(Level.WARNING, ex.getMessage());
}
return updatedRow;
}
我的IDE中的Foo()方法中的catch-block出错了;
SQLException
无法到达的拦截块
永远不会从try-block抛出此异常。为什么我不能使用try-catch块?我需要从delete()函数或任何想法中抛出SQLException
吗?
你的delete
方法永远不会抛出SQLException
,因为它没有在throws
条款中声明它。因此,Foo
中的catch子句无法访问。
你不需要从SQLException
方法中抛出delete
,但是你也不需要用try块包围对delete
的调用,你不需要捕获SQLException
。
删除方法需要抛出异常,以便Food可以捕获它。
public int delete(String table, String conditions) throws SQLException{
int updatedRow = 0;
String sql = "DELETE FROM " + table + " SET " + " WHERE " + conditions;
updatedRow = SPM_Database.opeStmt.executeUpdate(sql);
return updatedRow;
Foo仍然保持原样。
祝好运!
在完成所需操作后,在catch块中添加throw
语句。此外,您还需要在方法签名上添加throws SQLException
。
public int delete(String table, String conditions) throws SQLException { // signature is changed
int updatedRow = 0;
try {
String sql = "DELETE FROM " + table + " SET " + " WHERE " + conditions;
updatedRow = SPM_Database.opeStmt.executeUpdate(sql);
} catch (SQLException ex) {
System.out.println("message"+ ex);
LOGGER.log(Level.WARNING, ex.getMessage());
throw ex; // <== ADD THIS LINE
}
return updatedRow;
}