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

时间:2015-03-09 20:19:06

标签: java sql exception exception-handling sqlexception

我希望在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

的无法访问的catch块

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

3 个答案:

答案 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;
}