如图所示,我在finally代码块中使用了JDBCUTIL工具类中的关闭资源方法,关闭打开的resultset, statement, connection,但是编译器报警告。java1.8,eclipse Neon.3
如果把JdbcUtil.close(resultset, statement, connection);移到finally代码块外面或者注释掉则没有警告,这是为什么?

解决方案 »

  1.   

    应该报的是变量可能未初始化或者可能为空的警告吧。
    如果在你的第一个橙色框的语句之前就发生了异常,进入finally的时候,statement就是NULL
    所以最稳妥的方法是
    if (results != null) {
        JdbcUtil.close(results);
    }
    if (statement != null) {
        JdbcUtil.close(statement);
    }
    if (connection != null) {
        JdbcUtil.close(connection);
    }
      

  2.   


    JDBCUtil是我自定义的一个工具类,里面close()方法对传入的参数是否为空作了判断。
      

  3.   


    JDBCUtil是我自定义的一个工具类,里面close()方法对传入的参数是否为空作了判断。但是编译器并不知道,所以要么接受警告,要么做判断
      

  4.   


    JDBCUtil是我自定义的一个工具类,里面close()方法对传入的参数是否为空作了判断。你可以考虑把JDBCUtil,或close 方法 设置为 final
      

  5.   

    你的PreparedStatement对象,被初始化了两次,第一次初始化用的是第一条sql,第二次初始化用的是第二条SQL.这里应该有两个语句对象,所以你最后关闭的应该是你第一次初始化的PreparedStatement对象,第二次初始化的语句对象并没有关闭..所以在你第一次执行更新操作的时候就关闭ps对象,就可以了,在最后关闭资源的时候其实关闭的只是第二次创建的语句对象
      

  6.   

    你这jdk7以下?
    如果不是,那为啥不用try-with-resource的语法糖?