2016-03-28 97 views
1

晚上好。以下是我在我的數據庫中添加項目的代碼檢查數據庫是否具有相同的值

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,看看數據是否已經存在 –

回答

1

通常情況下,您希望數據庫自己實施此類數據完整性規則。這確保了數據是正確的。您不希望在應用程序級別進行檢查,因爲這會引入競爭條件(兩個插入事件基本同時發生,其中兩個插入驗證表沒有重複,然後插入相同的值)。

您可以使用唯一約束或唯一索引(前者使用後者實現)來保證唯一性。這會在插入重複值時產生錯誤。這是很容易創建:

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

也就是說,通常用戶將只有一個密碼,這樣的約束是唯一的用戶名:

alter table userinfo add constraint unq_username unique (username); 
+0

這是我推薦的第二種方法。 –

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... 
} 

但是,至於我,在向數據庫添加新用戶期間檢查現有的同一對(用戶名,密碼)不是一個好主意。

0

有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

0

您只能更改查詢的,

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