初始化变量错误Java

初始化变量错误Java,java,sql,Java,Sql,我试图从Java内部的SQL语句打印一些结果,我收到一个错误,说这些变量需要初始化,但我不确定如何执行此操作,除了将它们设置为null(这不是我想要做的),我的错误是在尝试关闭st时,rs和con,系统会提示我初始化变量,但这只是将它们设置为null,以下是我到目前为止的代码: public static void copyFolder(File src, File dest) throws IOException { Connection con; Statement

我试图从Java内部的SQL语句打印一些结果,我收到一个错误,说这些变量需要初始化,但我不确定如何执行此操作,除了将它们设置为null(这不是我想要做的),我的错误是在尝试关闭
st
时,
rs
con
,系统会提示我初始化变量,但这只是将它们设置为
null
,以下是我到目前为止的代码:

public static void copyFolder(File src, File dest)
    throws IOException {
    Connection con;
    Statement st;
    ResultSet rs;

    try {
        con = DriverManager.getConnection("removed as it houses sensitive data");
        st = con.createStatement();
        String s = "SELECT Code FROM dbo.\"FK Facades$Dimension Value\" WHERE [Dimension Code] = 'PROJECT'";
        rs = st.executeQuery(s);
        while (rs.next()) {
            rs.getString(1);
            System.out.print(rs);
        }
    } catch (Exception e) {
        System.out.println("No connectarino");
    } finally {
        try {
            st.close();
            rs.close();
            con.close();
        } catch (Exception e) {
            System.out.println("No");
        }
    }
}

您需要初始化
con
st
rs
,因为例如,如果try块中的第一行失败,您将没有这些变量的值,因此它无法执行finally块,这就是您获得此编译失败的原因

因此,它应该是:

Connection con = null;
Statement st = null;
ResultSet rs = null;

...
try {
    if (rs != null)
        rs.close();
    if (st != null) 
        st.close();
    if (con != null)
        con.close();
} catch (Exception e) {
    System.out.println("No");
}

NB:关闭语句前的结果集

除了前面已经说过的内容之外,您还应该开始这样使用:

    try (Connection con = DriverManager.getConnection("removed as it houses sensitive data");
         Statement st = con.createStatement();
         ResultSet rs = st.executeQuery("...")) {
        // your code here
    }

这会自动为您关闭实例,甚至会正确处理角落案例(即
close()
中的异常)。

考虑使用来管理连接、语句和结果集是的,我曾尝试将每个变量设置为null,但运气不好,现在将尝试语句的另一部分,谢谢我在我这方面进行了测试,对于我在回答中提出的问题,我不再有任何编译错误。我试图实现您的建议,但它导致了我的其他错误,在我的代码中进一步使用else语句,我现在使用try with resources使用第一个答案修复了此问题,不过感谢您的帮助!非常感谢,我已经在我的代码中实现了这一点,并进行了相关的更改,我现在没有收到任何错误,仍然不会连接到数据库,这可能是由于完全不同的原因,但再次感谢您解决了此问题!