如何检查是登录免费Java



我有这样的方法。为什么当我设置不在数据库中的登录名时总是得到真?

public boolean isLoginFree(String login) {
        String loginfree = null;
        try {
            PreparedStatement pst = null;
            pst = con.prepareStatement("SELECT login from User where login = ?");
            pst.setString(1, login);
            ResultSet rs = pst.executeQuery();
            while (rs.next()) {
                logintemp = rs.getString("login");
                if ((logintemp.equals(login) == true)) {
                    return false;                           //login free
                }
            }
        } catch (Exception e) {
            System.err.println(e);
        }
        return true;            //login busy
    }
如果该方法

出现异常,或者未从while循环返回,则始终执行方法底部的return true行。

只有一个出口点会更直接。 在方法中设置一个布尔变量,并且仅在循环中发生积极的事情时才设置它。 这意味着在循环中引入break

下面是一个示例。

public boolean isLoginFree(String login) {
    boolean result = false;
    String loginfree = null;
    try {
        PreparedStatement pst = null;
        pst = con.prepareStatement("SELECT login from User where login = ?");
        pst.setString(1, login);
        ResultSet rs = pst.executeQuery();
        while (rs.next()) {
            logintemp = rs.getString("login");
            if ((logintemp.equals(login)) {
                result = true;
                break;
            }
        }
    } catch (Exception e) {
        System.err.println(e);
    }
    return result;
}

编辑:如果您希望查询检查数据库中是否存在该值,那么您确实需要一个NOT EXISTS查询。

SELECT 1 from User WHERE NOT EXISTS(SELECT * from User WHERE login = ?);

然后,您可以改用getBoolean(0)的结果。

如下所示:

public boolean isLoginFree(String login) {
    boolean result = true;
    try {
        PreparedStatement pst = null;
        pst = con.prepareStatement("SELECT 1 from User WHERE NOT EXISTS(SELECT * from User WHERE login = ?)");
        pst.setString(1, login);
        ResultSet rs = pst.executeQuery();
        while (rs.next()) {
            if (rs.getBoolean(0)) {
                result = false;
                break;
            }
        }
    } catch (Exception e) {
        System.err.println(e);
    }
    return result;
}
如果我

理解正确,您想要的是查看login值是否已存储在数据库中。更简单的方法:

public boolean isLoginFree(String login) throws SQLException {
    PreparedStatement pst = con.prepareStatement("select login " + 
                                                 "from User " + 
                                                 "where login=?");
    pst.setString(1, login);
    ResultSet rs = pst.executeQuery();
    return !rs.first();
}

如果结果集中(至少)有一行(即登录名已存储在表中),这将返回false,否则true

如果你想使用"漫长的方式"来做到这一点:

public boolean isLoginFree(String login) {
    boolean ans = false;
    try(PreparedStatement pst = con.prepareStatement("select login " +
                                                     "from User " +
                                                     "where login = ?")) {
        pst.setString(1, login);
        try(ResultSet rs = pst.executeQuery()) {
            ans = !rs.first();
        } catch(SQLException e) {
            // Handle the exeption for the result set
        }
    } catch(SQLException e) {
        // Handle the exeption for the prepared statement
    }
    return ans;
}

在这两种情况下,如果结果集中没有行,函数应该返回true(这就是!的原因:如果值已经存在,那么它就不是免费的,所以结果应该是假的......至少我是这么看的)。

最新更新