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

问题描述:

晚上好。以下是我在我的数据库中添加项目的代码检查数据库是否具有相同的值

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(); 

如何才能在添加之前检查是否已有用户名和密码?

+0

你可以,例如,简单地创建选择查询。或者你可以为你的表添加一个UNIQUE索引,那么如果代码已经存在,那么这个代码将抛出一个SqlException异常。 –

+1

先运行一个select,看看数据是否已经存在 –

通常情况下,您希望数据库自己实施此类数据完整性规则。这确保了数据是正确的。您不希望在应用程序级别进行检查,因为这会引入竞争条件(两个插入事件基本同时发生,其中两个插入验证表没有重复,然后插入相同的值)。

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

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

也就是说,通常用户将只有一个密码,这样的约束是唯一的用户名:

alter table userinfo add constraint unq_username unique (username); 
+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... 
} 

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

有3点不同的方式来进行检查:

1)创建一个搜索查询,如果使用相同的用户名和密码记录存在,是这样的:

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

选择用户名存在从用户信息WHERE用户名=:用户名和密码=:密码

因此,如果找到重复的记录“存在”字段d将返回一个不同于0或NULL的值。

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

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

您只能更改查询的,

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