【发布时间】:2019-01-14 06:17:44
【问题描述】:
我正在尝试使用 mySQl 数据库创建一个简单的 java 登录系统。
我已将用户 ID 和密码存储在数据库表中。 我想出了一种登录方式,似乎效果很好,但我不确定这是否是正确的方式,因为我找不到任何登录系统的在线资源。
我的步骤是:
- 从用户那里获取输入(用户 ID 和密码)。
- 使用我创建的 fetch() 方法遍历表并查找此特定 ID。
- 如果找到,则从表中获取密码和余额并将它们存储在变量中。
- 最后将我之前从数据库中获取并存储在变量中的密码与用户输入的密码进行比较。
我很清楚以纯文本形式存储密码是一个很大的安全漏洞,但现在我只是想了解如何在我的 java 程序中使用数据库中的数据
这是我的代码:
public class firstjava extends Database {
public static int UID = 0;
public static String password;
public static int BAL;
public static String upassword;
static void fetch(int userid) throws SQLException {
String query = "SELECT * FROM Persons";
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(query);
while (rs.next()) {
int ID = rs.getInt("pid");
if (ID == UID) {
password = rs.getString("password");
BAL = rs.getInt("balance");
}
}
if (upassword.equals(password)) {
System.out.println("you are now logged in");
} else {
System.out.println("incorrect password");
}
st.close();
}
public static void menu() throws IOException, SQLException {
Scanner atm = new Scanner(System.in);
System.out.println("enter your account number");
UID = atm.nextInt();
System.out.println("enter your account password");
upassword = atm.next();
fetch(UID);
}
public static void main(String[] args) throws IOException, SQLException {
Database db = new Database();
try {
db.connect();
} catch (Exception e) {
e.printStackTrace();
}
menu();
db.close();
}
}
【问题讨论】:
-
使用我创建的 fetch() 方法遍历表并查找此特定 ID - 这可能是一项繁重的操作,尤其是如果您有成千上万的用户( = 数千次迭代)。相反,使用
WHERE子句选择具有特定用户名的用户,这样while 循环将最多执行1 次(假设您没有重复)。您还可以按用户名 和 密码进行过滤,这样您将有一个查询来检查用户是否存在并且密码是否匹配。 -
感谢您的建议@BackSlash 我使用我的结果集执行了 SELECT WHERE 查询并使用 if 语句检查我的结果集是否为真然后得到密码。
标签: java mysql database login passwords