插入数据库

时间:2011-05-12 23:31:33

标签: java sql swing jdbc

我有一个问题,我有一个系统来添加用户,我必须检查此用户是否存在以便我不会再次添加他,我从数据库中检索所有名称到arraylist.I先检查是否数组列表为空,以便我可以添加用户,他将检查是否存在 这是代码

    if(names.size() == 0){
        dbstatement.executeUpdate("
        insert into users (user_name,user_password,user_type) 
        values ('" + username + "','" + userpassword + "','" + type + "')");
        JOptionPane.showMessageDialog(rootPane, "user added successfully");
    }
    else{                   
        for (int i = 0; i < names.size(); i++) {
            if (username.equals(names.get(i))) {
                JOptionPane.showMessageDialog(rootPane, "Sorry, this name already exist");
                break;
            }
        }
        dbstatement.executeUpdate
        ("insert into users(user_name,user_password,user_type) 
        values ('" + username + "','" + userpassword + "','" + type + "')");
    }

问题是当程序在他告诉我并添加他之前发现名称存在时,我知道这个问题的原因所有我想知道在哪里但是if if for循环,我希望他告诉我用户只存在不再添加

3 个答案:

答案 0 :(得分:1)

只需使用SQL WHERE子句查看用户名是否存在。完全没有必要将整个数据库表复制到Java的内存中。

preparedStatement = connection.prepareStatement("SELECT id FROM users WHERE user_name = ?");
preparedStatement.setString(1, username);
resultSet = preparedStatement.executeQuery();
boolean exist = resultSet.next();

boolean exist(String username)之类的方法中包装它,并按如下方式重新排列代码流:

if (exist(username)) {
    // Show warning message.
} else {
    // Insert into DB.
}

请注意,PreparedStatement代替Statement。这可以防止您的代码来自SQL injection attacks

答案 1 :(得分:1)

只需使用要添加的每个名称调用数据库。

让sql尝试插入名称。它将插入或抛出密钥违规(假设您对名称有唯一约束)。

如果它违反了密钥,您就知道该名称已存在于数据库中。

如果没有抛出错误,则插入名称。

读取/决定/写入样式处理不是使其工作的方法。当另一个进程在读取和写入之间插入新名称时,它仍然会出现问题。这意味着您仍然必须检查密钥违规。如果你不得不检查密钥违规,你可以在第一时间做正确的尝试,并尝试插入所有名称。

答案 2 :(得分:0)

 if(names.size() == 0){
    dbstatement.executeUpdate("
    insert into users (user_name,user_password,user_type) 
    values ('" + username + "','" + userpassword + "','" + type + "')");
    JOptionPane.showMessageDialog(rootPane, "user added successfully");
}
else{   
    if ( names.contains(username) ) {                
            JOptionPane.showMessageDialog(rootPane, "Sorry, this name already exist");
    }
    else {
            dbstatement.executeUpdate
             ("insert into users(user_name,user_password,user_type) 
                  values ('" + username + "','" + userpassword + "','" + type + "')");
    }
}
相关问题