gpt4 book ai didi

java - 使用 JDBC 检查 Db 的凭据

转载 作者:太空宇宙 更新时间:2023-11-03 12:00:02 25 4
gpt4 key购买 nike

一段时间以来,我一直在尝试让这段代码正常工作,但似乎行不通。我的用户输入用户名和密码,然后程序将其与数据库进行比较。然而,它显示无效凭据,即使当我输出密码时,它显示的密码与我输入的完全相同。只有几点,我知道你们中的一些人会指出一些事情,比如使用单独的类进行连接,检查用户名密码而不是使用 Select *,使用散列和所有。但是现在我只需要让这段代码工作。只有在那之后,我才能在其他方面工作以提高其效率。提前谢谢大家。:)

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
// TODO add your handling code here:
Username1 = "jTextField1.getText()";
Password1 = "jPassword1Field2.geText()";
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost:3306/";
String dbName = "VideoSystem" ;
String userName = "root";
String passWord = "**mypassword**";
Connection conn = DriverManager.getConnection(url+dbName, userName, passWord);
Statement st = conn.createStatement();
String sql = ("SELECT * FROM Identification");
ResultSet rs = st.executeQuery(sql);
while(rs.next())
{
password = rs.getString("Password");
if( Password1.equals(password))
{
MenuSelection obj1 = new MenuSelection();
obj1.setVisible(true);
}
else
{
JOptionPane.showMessageDialog(null, "Invalid Credentials", "System Message", JOptionPane.INFORMATION_MESSAGE);

}
}
conn.close();
}
catch (Exception e)
{
System.err.println("Got an exception! ");
System.err.println(e.getMessage());
}


}

最佳答案

这两行:

Username1 = "jTextField1.getText()";
Password1 = "jPassword1Field2.geText()";

它们是字符串文字,所以除非您的密码是字面上的 jPassword1Field2.geText(),否则不会匹配。我想你的意思是:

Username1 = jTextField1.getText();
Password1 = jPassword1Field2.getText();

但是请注意,JPasswordField.getText()Java 2 以来已弃用。你应该使用 getPassword()相反:

Password1 = new String(jPassword1Field2.getPassword());

文档以我无法声称理解的“安全原因”证明了 getText() 的弃用是合理的,但您仍然不应该使用 API 的弃用部分。


我已经知道你下面的一些内容,但这些都不是你问题的一部分,但我真的建议你

  1. 检查用户名。原因应该很明显。
  2. 散列密码。总是。
  3. 只获取您需要的内容,主要是出于性能方面的考虑。通常最好的方法是在 SQL 中使用 WHERE 子句(这需要清理您的输入,但无论如何您都应该这样做)并构建列列表而不是获取 *
  4. 在 SQL 中对数据库/表/列名称使用反引号,以避免意外使用关键字作为表/列名称等情况。

应用以上内容,我建议进行以下查询(假设名称字段称为 Username):

PreparedStatement st = conn.prepareStatement("SELECT `Password` FROM `Identification` WHERE `Username` = ?");
st.setString(1, Username1);
ResultSet rs = st.executeQuery();

关于java - 使用 JDBC 检查 Db 的凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29890379/

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