java 无法访问 SQLException 的 catch 块

java Unreachable catch block for SQLException

我想在 Foo 方法的 try-catch 块 上捕获 SQLException,这是我的代码,但实际上不起作用;

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 出现错误,即;

Unreachable catch block for SQLException

这个异常永远不会从 try 块中抛出。为什么我不能使用 try-catch 块?我需要从 delete() 函数或任何想法中抛出 SQLException 吗?

您的 delete 方法永远不会抛出 SQLException,因为它没有在 throws 子句中声明它。因此,您在 Foo 中的 catch 子句无法访问。

您不需要从 delete 方法中抛出 SQLException,但您也不需要用 try 块包围对 delete 的调用,并且您不需要不需要赶上 SQLException.

方法 delete 需要抛出异常,以便 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保持原样。

祝你好运!

在您需要做的事情完成后,在您的 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;
}