检查数据库是否具有相同的值

时间:2016-03-28 11:02:57

标签: java mysql

晚上好。以下是我在数据库中添加项目的代码

String sql = "Insert into userinfo(firstname,lastname,contactNumber,email,address,username,password,accountType) value (?,?,?,?,?,?,?,?)";
String accountType = (String) jComboBoxAccType.getSelectedItem();
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, jTextFieldFistName.getText());
        ps.setString(2, jTextFieldLastName.getText());
        ps.setString(3, jTextFieldContactNumber.getText());
        ps.setString(4, jTextFieldEmail.getText());
        ps.setString(5, jTextFieldAddress.getText());
        ps.setString(6, jTextFieldUsername.getText());
        ps.setString(7, jTextFieldPassword.getText());
        ps.setString(8, accountType);
        ps.execute();

在添加之前,我怎样才能检查是否已存在用户名和密码?

4 个答案:

答案 0 :(得分:1)

通常,您希望数据库本身强制执行此类数据完整性规则。这可确保数据正确无误。您不希望在应用程序级别进行检查,因为这会引入竞争条件(两个插入基本上同时发生,其中两个插入都验证表没有重复,然后都插入相同的值)。

您可以使用唯一约束或唯一索引来保证唯一性(前者使用后者实现)。插入重复值时,这将生成错误。它很容易创建:

alter table userinfo add constraint unq_username_password unique (username, password);

也就是说,通常用户只有一个密码,因此约束只会出现在用户名上:

alter table userinfo add constraint unq_username unique (username);

答案 1 :(得分:0)

您需要类似此代码的内容

PreparedStatement ps=connection.prepareStatement("select 1 from userinfo where username=? and password=?");
ps.setString(1, jTextFieldUsername.getText());
ps.setString(2, jTextFieldPassword.getText());
ps.execute();
if (ps.getResultSet.next()) {
// So, user and password already in database
}
else {
// Insert value...
}

但是,对我来说,在将新用户添加到数据库期间检查现有的同一对(用户名,密码)并不是一个好主意。

答案 2 :(得分:0)

有三种不同的方法可以执行检查:

1)创建一个查询,搜索具有相同用户名和密码的记录是否存在,如:

SELECT COUNT(*) as exists FROM userinfo WHERE username = :username AND password = :password

SELECT username as exists FROM userinfo WHERE username =:username AND password =:password

因此,如果找到重复记录,则“exists”字段将返回不同于0或NULL的值。

2)只需为用户名和密码创建一个唯一索引,当您尝试插入重复记录时,将引发错误,因此您必须在“之间使用”try ... catch“语句ps.execute”。

3)添加一个子查询,检查是否存在重复值(参见:https://stackoverflow.com/a/3025332/1641558

答案 3 :(得分:0)

您只应将查询更改为

Insert ignore into userinfo(firstname,lastname,contactNumber,email,address,username,password,accountType) value (?,?,?,?,?,?,?,?)