我希望在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出错了;
的无法访问的catch块
SQLException
永远不会从try-block抛出此异常。为什么我不能使用try-catch块?我是否需要从delete()函数或任何想法中抛出SQLException
?
答案 0 :(得分:5)
您的delete
方法永远不会抛出SQLException
,因为它没有在throws
子句中声明它。因此,Foo
中的catch子句无法访问。
您不需要从SQLException
方法中抛出delete
,但您也不需要使用try块将delete
的呼叫包围起来你不需要抓住SQLException
。
答案 1 :(得分:1)
方法删除需要抛出异常,因此 Foo 可以捕获它。
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 保持原样。
祝你好运!答案 2 :(得分:0)
在您需要完成的操作完成后,在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;
}