[英]Check if username exists in table with password
我創建了一個登錄系統,該系統可以在阻止帳戶三次以上以防密碼失敗多次之前檢查嘗試。 問題是我需要檢查用戶名是否存在,如果不存在,請打印一條消息,指出該ID不存在; 但我不知道該怎么辦。 我的意思是,我有一個想法,但我不知道如何在Java上做到這一點。
這些是我存儲的程序
登錄
create proc usp_Login
@id varchar(50),
@pw varchar(50)
as
select id, pw from Login where id = @id and pw = @pw and lock = 0 and tries < 4
update Login set tries = 0 where id = @id and pw = @pw;
嘗試
create proc usp_Attempts
@id varchar(50)
as
select id, tries from Login where id = @id and tries < 4
update Login set tries = tries+1 where tries < 4 and id = @id
阻止用戶
create proc usp_Lock
@id varchar(50)
as
update Login set lock = 1 where id = @id
Java部分是這樣的:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
CallableStatement cStmt = null;
ResultSet rs = null;
try {
cStmt = conn.prepareCall("{call usp_Login(?, ?)}");
cStmt.setString(1, this.txtID.getText());
cStmt.setString(2, this.txtPW.getText());
cStmt.execute();
rs = cStmt.getResultSet();
if (rs.next()) {
System.out.println("Login done");
cStmt.close();
rs.close();
conn.close();
} else {
cStmt = conn.prepareCall("{call usp_Attempts(?)}");
cStmt.setString(1, this.txtID.getText());
cStmt.execute();
rs = cStmt.getResultSet();
if (rs.next()) {
System.out.println("Invalid login");
} else {
cStmt = conn.prepareCall("{call usp_Lock(?)}");
cStmt.setString(1, this.txtID.getText());
cStmt.execute();
System.out.println("Login blocked");
cStmt.close();
rs.close();
conn.close();
}
}
} catch (SQLException ex) {
System.out.print(ex);
}
}
我知道這可能不是登錄系統的最佳方法,但是我仍在學習,這是到目前為止我所知的最佳方法。 希望有人能幫助我做id驗證部分,謝謝。
將所有這些邏輯放入一個單一的存儲過程(SP)。 在此SP正文的最后,執行SELECT v AS RESULT;
其中v是一些整數值。 根據登錄嘗試結果,使該值v不同,例如
當然,通過RESULT
值,您可以按自己喜歡的任何方式對其他登錄嘗試結果進行編碼。 然后,在Java代碼中,只需檢查SP RESULT
值即可確切地知道在此登錄嘗試期間內部發生了什么。 也就是說,在Java代碼中,您將獲得一個包含1行和1列的結果集,稱為RESULT
,只需檢查其值並按照自己的方式進行即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.