Eclipse中的死代码警告-这是Eclipse中的一个错误吗?或者我忽略了一些显而易见的事情



通过这个(简化的)代码示例,Eclipse(Kepler SR2)为最内部的if语句(if (con != null))发出警告,死代码

public class DbManager {
    public String getSingleString(String query) throws SQLException {
        DbManager dbmgr = new DbManager();
        Connection con = null;
        try {
            con = dbmgr.getConnection("user", "pwd", URL);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
            if (con != null) {
                PreparedStatement pstmt = null;
                ResultSet rset = null;
                pstmt = con.prepareStatement(query.toString());
                rset = pstmt.executeQuery();
                if (rset != null && rset.next()) {
                    return (rset.getString(1));
                }
            }
        }
        return null;
    }
}

通常,在尝试之后的行上定义的数据库连接将创建一个连接,然后违规的if语句将为true。关于死代码的警告真的正确吗?

如果dbmgr.getConnection("user", "pwd", URL);返回异常,则con将永远不会被分配非null引用。

您用null初始化了con。因此,当抛出异常并且代码到达catch时,con将为null。这就是为什么检查(con != null)没有意义。

如果连接成功创建,那么catch语句将永远不会被调用,因此它是死代码,请尝试将其重新排列为:

try {
    con = dbmgr.getConnection("user", "pwd", URL);
    //if (con != null) { <-- not required because of the try and catch
    PreparedStatement pstmt = null;
    ResultSet rset = null;
    pstmt = con.prepareStatement(query.toString());
    rset = pstmt.executeQuery();
    if (rset != null && rset.next()) {
        return (rset.getString(1));
    }
} catch (ClassNotFoundException e) {
    e.printStackTrace();
} catch (SQLException e) {
    e.printStackTrace();
}

我在运行了几次代码并遇到一些问题后意识到了这个问题:catch之后缺少一个}。应该是:

try {
    con = dbmgr.getConnection("cap_x1", "test");
} catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
    if (con != null) {
        PreparedStatement pstmt = null;
        ResultSet rset = null;

等等。感谢您的反馈。

相关内容

  • 没有找到相关文章

最新更新