Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查(java)我的数据库(postgres)中是否已经存在用户名?_Java_Postgresql_Rmi - Fatal编程技术网

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

如何检查(java)我的数据库(postgres)中是否已经存在用户名?,java,postgresql,rmi,Java,Postgresql,Rmi,我有一个客户端、一个服务器、一个RMI服务器和一个PostgreSQL数据库。 我正在创建一个新用户,因此我自然希望检查我的数据库中是否已经存在该用户名。这就是我正在做的: 对要创建的用户名进行选择查询 如果我的RequestSet为null,这意味着DB返回的表是空的,因此没有任何具有该用户名的用户,我可以创建一个新用户 它不是空的,我无法创建新用户 然而,每当我尝试插入一个新用户时,无论它是否存在于数据库中,它总是说该用户已经存在 这是我在RMI服务器中使用的代码: String[] u

我有一个客户端、一个服务器、一个RMI服务器和一个PostgreSQL数据库。 我正在创建一个新用户,因此我自然希望检查我的数据库中是否已经存在该用户名。这就是我正在做的:

  • 对要创建的用户名进行选择查询
  • 如果我的RequestSet为null,这意味着DB返回的表是空的,因此没有任何具有该用户名的用户,我可以创建一个新用户
  • 它不是空的,我无法创建新用户
然而,每当我尝试插入一个新用户时,无论它是否存在于数据库中,它总是说该用户已经存在

这是我在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;
我不知道我做错了什么。有人能给我指一下正确的方向吗?
谢谢大家!

查询返回一个结果集。结果集就是。。。一套。即使是一个空的集合也是一个集合。您想知道的是“a行返回了吗?”。假设
username
列是唯一的(合理的假设),您的查询将返回一个包含0行或1行的结果集

rs.next
()方法前进到下一行(起始位置在第一行之前)。如果要前进到某一行,则返回true;如果结果集中的行已用完,则返回false

rs = request.executeQuery(query);
if (!rs.next())
{
    // Insert the new user.
因为您只需要知道是否有1行返回,所以您的解决方案非常简单,只需调用
rs.next()
并检查结果集即可

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

查询返回一个结果集。结果集就是。。。一套。即使是一个空的集合也是一个集合。您想知道的是“a行返回了吗?”。假设
username
列是唯一的(合理的假设),您的查询将返回一个包含0行或1行的结果集

rs.next
()方法前进到下一行(起始位置在第一行之前)。如果要前进到某一行,则返回true;如果结果集中的行已用完,则返回false

rs = request.executeQuery(query);
if (!rs.next())
{
    // Insert the new user.
因为您只需要知道是否有1行返回,所以您的解决方案非常简单,只需调用
rs.next()
并检查结果集即可

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

查询返回一个结果集。结果集就是。。。一套。即使是一个空的集合也是一个集合。您想知道的是“a行返回了吗?”。假设
username
列是唯一的(合理的假设),您的查询将返回一个包含0行或1行的结果集

rs.next
()方法前进到下一行(起始位置在第一行之前)。如果要前进到某一行,则返回true;如果结果集中的行已用完,则返回false

rs = request.executeQuery(query);
if (!rs.next())
{
    // Insert the new user.
因为您只需要知道是否有1行返回,所以您的解决方案非常简单,只需调用
rs.next()
并检查结果集即可

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

查询返回一个结果集。结果集就是。。。一套。即使是一个空的集合也是一个集合。您想知道的是“a行返回了吗?”。假设
username
列是唯一的(合理的假设),您的查询将返回一个包含0行或1行的结果集

rs.next
()方法前进到下一行(起始位置在第一行之前)。如果要前进到某一行,则返回true;如果结果集中的行已用完,则返回false

rs = request.executeQuery(query);
if (!rs.next())
{
    // Insert the new user.
因为您只需要知道是否有1行返回,所以您的解决方案非常简单,只需调用
rs.next()
并检查结果集即可

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

显式检查用户是否存在是不明智的。
username
上的唯一约束也做了同样的事情。同意。如果您对
用户名
没有唯一的限制,总有一天您会后悔的。您也可以在不存在的地方执行
插入选择。如果行数为1,则表示已成功注册。如果行计数为0,则用户名已存在。这不是约束的替代品。但这是一种将两条SQL语句组合在一起的方法,可以更优雅地处理潜在的约束冲突(并且代码行数更少)。显式检查用户是否存在不是很明智。
username
上的唯一约束也做了同样的事情。同意。如果您对
用户名
没有唯一的限制,总有一天您会后悔的。您也可以在不存在的地方执行
插入选择。如果行数为1,则表示已成功注册。如果行计数为0,则用户名已存在。这不是约束的替代品。但这是一种将两条SQL语句组合在一起的方法,可以更优雅地处理潜在的约束冲突(并且代码行数更少)。显式检查用户是否存在不是很明智。
username
上的唯一约束也做了同样的事情。同意。如果您对
用户名
没有唯一的限制,总有一天您会后悔的。您也可以在不存在的地方执行
插入选择。如果行数为1,则表示已成功注册。如果行计数为0,则用户名已存在。这不是约束的替代品。但这是一种将两条SQL语句组合在一起的方法,可以更优雅地处理潜在的约束冲突(并且代码行数更少)。显式检查用户是否存在不是很明智。
username
上的唯一约束也做了同样的事情。同意。如果您对
用户名
没有唯一的限制,总有一天您会后悔的。您也可以在不存在的地方执行
插入选择。如果行数为1,则表示已成功注册。如果行计数为0,则用户名已存在。这不是约束的替代品。但这是一种将两条SQL语句组合在一起的方法,可以更优雅地处理潜在的约束冲突(并且代码行数更少)。