gpt4 book ai didi

java - JDBC - 通过数据库授权用户

转载 作者:行者123 更新时间:2023-11-29 11:57:35 24 4
gpt4 key购买 nike

我做了一个程序,从数据库获取数据然后授权,但问题是只有最后一条记录是正确的 - 登录成功。

public class Test {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/uzytkownicy";
static final String USER = "root";
static final String PASS = "";


public static void main(String[] args) throws SQLException, ClassNotFoundException {
System.out.print("login: ");
Scanner zm1= new Scanner(System.in);
String name = zm1.next();
System.out.print("pass: ");
Scanner zm2 = new Scanner(System.in);
String password = zm2.next();
try{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Connecting...");
Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);
Statement stmt = conn.createStatement();
String sql = "SELECT logins, passwords FROM users";
ResultSet rs = stmt.executeQuery(sql);
String databasePassword = null;
String databaseUsername = null;

while (rs.next()) {
databaseUsername = rs.getString("logins");
databasePassword = rs.getString("passwords");

}
if (name.equals(databaseUsername) && password.equals(databasePassword)) {
System.out.println("Logged in!");
}
else {
System.out.println("Bad Pass/Login");
}
rs.close();
stmt.close();
conn.close();
}
catch(SQLException se){
se.printStackTrace();

}

}}

最佳答案

如果我理解你想要做什么(我可能不明白),你的问题是用户名和密码的比较在 while 循环之外,所以你的:

while (rs.next())

只是循环遍历整个结果集,因此当 while 循环结束时,databaseUsername 和 databasePassword 将设置为最后一行读取的值。

相反,将比较移到循环内并设置一个标志(默认为 false),如果找到正确的用户名和密码则跳出循环,然后使用该标志来确定要打印的内容。

此外,您可能想阅读参数化查询。实际上,您可以通过使用PreparedStatement 并进行查询,让数据库为您完成所有工作:

从登录名 = ? 的用户中选择 1和密码 = ?;

如果结果集包含任何内容,则用户输入了有效的用户名和密码,否则没有输入。查询中的问号将使用PreparedStatement 的set* 方法设置为名称和密码。

另一个注意事项——存储明文密码是一个可怕的想法。如果存储密码的表被暴露(通过各种攻击或只是心怀不满的员工窃取它),那么每个人都拥有所有用户的密码。哎呀!您可能会说您会采取措施来防止这种情况发生,但从安全角度来看,最好假设有一天该表会受到损害,并尽一切努力确保它不会造成太大危害。

关于java - JDBC - 通过数据库授权用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32953903/

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