用于SQLException的java无法访问的catch块

问题描述 投票:2回答:3

我想在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吗?

java sql exception exception-handling sqlexception
3个回答
5
投票

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

你不需要从SQLException方法中抛出delete,但是你也不需要用try块包围对delete的调用,你不需要捕获SQLException


1
投票

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

祝好运!


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;
}
© www.soinside.com 2019 - 2024. All rights reserved.