如果我的数据库 (postgres) 中已经存在用户名,我该如何检查 (java)?

How can I check (java) if an username already exists in my Data Base(postgres)?

我有一个客户端、一个服务器、一个 RMI 服务器和一个 PostgreSQL 数据库。 我正在创建一个新用户,所以我自然想检查该用户名是否已存在于我的数据库中。这就是我正在做的事情:

但是,每当我尝试插入一个新用户时,无论它是否存在于数据库中,它总是说该用户已经存在...

这是我在 RMI 服务器中使用的代码:

String[] userInfo = (String[]) clrqst.getRequest()[1];

    clrqst.setStage(2);
    myRequests.add(clrqst);

    try
    {
        query = "SELECT * FROM utilizador WHERE username= '"+userInfo[2]+"'";
        request = connection.createStatement();
        rs = request.executeQuery(query);

        if (rs == null)
        {
            try {
                query = "INSERT INTO utilizador (nome, apelido, username, pass, saldo) VALUES (?,?,?,?,?)";
                preparedstatement = connection.prepareStatement(query);
                preparedstatement.setString(1, userInfo[0]);
                preparedstatement.setString(2, userInfo[1]);
                preparedstatement.setString(3, userInfo[2]);
                preparedstatement.setString(4, userInfo[3]);
                preparedstatement.setInt(5, 100);
                preparedstatement.executeUpdate();

            } catch (SQLException e) {
                System.err.println("SQLException:" + e);
            }

            try {
                query = "SELECT id FROM utilizador WHERE username='" + userInfo[0] + "'";
                request = connection.createStatement();
                rs = request.executeQuery(query);

                rs.next();
                resposta[0] = "infosave";
                resposta[1] = rs.getInt(1);

                clrqst.setResponse(resposta);
                clrqst.setStage(3);

                updateRequest(clrqst);

            } catch (SQLException ex) {
                System.err.println("Erro:" + ex);
            } finally {
                if (request != null) {
                    try {
                        request.close();
                    } catch (SQLException ex) {
                        Logger.getLogger(RMIServer.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        }

        else{
            resposta[0] = "user_already_exists";
            resposta[1] = userInfo[2];
            clrqst.setResponse(resposta);
            clrqst.setStage(3);
        }

    }  catch (SQLException e) {
        System.err.println("SQLException:" + e);
    }


    return clrqst;

我不知道我做错了什么。有人能指出我正确的方向吗? 谢谢!

一个查询return是一个结果集。结果集就是……一个集合。即使一个空集仍然是一个集。你想知道的是"did a row return?"。假设 username 列是唯一的(一个合理的假设),您的查询将 return 具有 0 或 1 行的结果集。

rs.next() 方法前进到下一行(起始位置在第一行之前)。如果有要前进的行,则 return 为真,如果结果集中 运行 行之外,则为假。

由于您只需要知道 1 行是否返回,您的解决方案可以像调用 rs.next() 并检查结果集一样简单。

rs = request.executeQuery(query);
if (!rs.next())
{
    // Insert the new user.