gpt4 book ai didi

java - 被困在密码更改代码中

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

我制作此代码用于通过验证更改密码。问题是,当我单击 jbutton 更改密码时,它起作用并成功更改了数据库上的密码,并显示了 jOptionpane 信息消息。

但执行完此步骤后,jOptionpane 运行的错误消息不断显示。我尝试找出代码哪里错了。但还不能。

 private void jBtn_UpdateActionPerformed(java.awt.event.ActionEvent evt) { 

String user_id = txt_UserID.getText();
String cur_pass = txt_CurrentPassword.getText();
String new_pass = txt_NewPassword.getText();

try {
Connection c = DBConnection.dbconmethod();
Statement s = c.createStatement();
ResultSet rs = s.executeQuery("SELECT * from tch_data");

while(rs.next()) {
String userid = rs.getString("user_id");
String pass = rs.getString("password");

if(user_id.equals(userid) && cur_pass.equals(pass)) {

Statement s1 = c.createStatement();
s1.executeUpdate("UPDATE tch_data SET password='"+new_pass+"' WHERE user_id='"+user_id+"'");
JOptionPane.showMessageDialog(new view.AdminPrivacy(), "Password Succesfully Changed!", null, JOptionPane.INFORMATION_MESSAGE);

}else {

JOptionPane.showMessageDialog(new view.AdminPrivacy(), "Error : Invalid Data.", "Error Message", JOptionPane.ERROR_MESSAGE);

}
}

} catch (Exception e) {
e.printStackTrace();
}
}

最佳答案

您正在使用 SQL 查询检索数据库中所有用户的所有

Statement s = c.createStatement();
ResultSet rs = s.executeQuery("SELECT * from tch_data");

当然,您的用户名和密码与所有行不匹配(因为您将在循环中看到数据库中的所有用户),因此您总是会收到每行的错误消息,除了对于其中包含您的用户的那个。

您应该更改查询以仅返回您要更改密码的用户的行。然而,这需要您使用PreparedStatement。 (如果您只是在常规 Statement 的查询中使用 user_id 而不进行转义,您就会遭受 SQL 注入(inject)攻击。请注意,这也适用于您更新密码的地方 - 您应该也为此使用PreparedStatement,否则当有人将密码更改为 '; DROP TABLE tch_data; SELECT * FROM tch_data 'foobar 或类似的内容时,您会感到非常惊讶)

因此您应该将上面两行替换为以下三行:

PreparedStatement st = c.prepareStatement("SELECT * from tch_data WHERE user_id = ?");
st.setString(1, user_id);
ResultSet rs = st.executeQuery();

请注意,您还忘记关闭结果集、语句和连接。您应该关闭所有它们(但最重要的是连接),否则您将泄漏它们并且您的应用程序将很快耗尽资源。

关于java - 被困在密码更改代码中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41918271/

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