在“退货声明”中“错误:找不到符号”

时间:2015-06-13 05:02:37

标签: java scope

我正在尝试返回变量String authServer,但我似乎无法做到。

public static String getAuth () {
    Connection connection = null;
    try {
        connection = ConnectionConfig.getConnection();
        if (connection != null) {
            Statement query = connection.createStatement();
            ResultSet rs = query.executeQuery("SELECT auth FROM auth");
            while (rs.next()) {
                String authServer = rs.getString("auth");
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (connection != null) {
            try {
                connection.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return authServer;
    }
}

上面的代码给出了一个未知符号“authServer”的错误。

我做错了什么?

3 个答案:

答案 0 :(得分:3)

不要在while循环中声明authServer。它的范围将在while循环之后结束。你需要在while循环之外声明。

public static String getAuth () {
    Connection connection = null;
    String authServer = "";
.....

然后从while循环中检索结果。

答案 1 :(得分:1)

您在循环中声明authServer,使其在return语句中无法访问。 在连接语句之后声明它,如下所示:

Connection connection = null;
String authServer="";

然后在while循环中使用如下:

while (rs.next()) {
  authServer = rs.getString("auth");
}

答案 2 :(得分:1)

由于authServer在上面的循环中声明,因此当您尝试在return语句中使用它时,它不在范围内。

Java Made Easy有一个很好的overview of variable scope in Java,可以帮助您更好地理解这个问题。

在您的具体情况下,请考虑以下修改以解决此问题:

public static String getAuth () {
    // Declare authServer with method scope, and initialize it.
    String authServer;
    Connection connection = null;
    try {
        connection = ConnectionConfig.getConnection();
        if (connection != null) {
            Statement query = connection.createStatement();
            ResultSet rs = query.executeQuery("SELECT auth FROM auth");
            while (rs.next()) {
                // Just assign to authServer here rather than declaring
                // and initializing it.
                authServer = rs.getString("auth");
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (connection != null) {
            try {
                connection.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return authServer;
    }
}