gpt4 book ai didi

java - 检查用户名和密码是否存在于表中

转载 作者:行者123 更新时间:2023-12-01 12:49:15 25 4
gpt4 key购买 nike

我创建了一个登录系统,如果密码失败超过三次,该系统会在阻止帐户之前检查尝试次数。问题是我需要检查用户名是否存在,如果不存在,则打印一条消息说该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);
}
}

我知道也许这不是制作登录系统的最佳方法,但我仍在学习,这是目前我得到的最好的想法。希望有人能帮我做身份验证部分,提前致谢。

最佳答案

将所有这些逻辑放入一个存储过程 (SP) 中。在此 SP 主体的最后,只需执行 SELECT v AS RESULT; 其中 v 是某个整数值。根据登录尝试结果,使该值 v 不同,例如

  • v=0表示登录成功;
  • v=1 表示登录失败,因为没有该用户名;
  • v=2 表示登录失败,因为尝试登录时帐户已被锁定;
  • v=3表示密码不匹配导致登录失败,但SP并未锁定账户;
  • v=4 表示登录失败,因为密码不匹配,并且 SP 由于尝试次数过多而刚刚锁定帐户。

当然,通过 RESULT 值,您可以按照您喜欢的任何方式对其他登录尝试结果进行编码。然后,在 Java 代码中,只需检查 SP RESULT 值即可准确了解本次登录尝试期间其中发生的情况。也就是说,在 Java 代码中,您将获得一个名为 RESULT 的包含 1 行和 1 列的结果集,只需检查其值并按照您喜欢的方式进行即可。

关于java - 检查用户名和密码是否存在于表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com