2015-06-26 91 views
1

下面的表格检索MySQL数据库的用户名和密码,并用用户输入检查它们。用户名和密码不匹配Java中的错误消息

未显示密码或用户名错误消息。我尝试了很多方法,但没有按预期工作。

如何编码该功能?

enter image description here

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

    String val1 = usernametxt.getText(); 
    String val2 = passwordtxt.getText(); 

    if(val1.equals("") || val2.equals("")){ 
      JOptionPane.showMessageDialog(null, "Fill all fields and try again .... "); 
      usernametxt.setText(""); 
      passwordtxt.setText(""); 


    } 

    try{ 

     String sql1 = "SELECT username FROM logininfo WHERE username LIKE '"+val1+"'" ; 
     String sql2 = "SELECT password FROM logininfo WHERE password LIKE '"+val2+"'" ; 

     pst1 = conn.prepareStatement(sql1); 
     pst2 = conn.prepareStatement(sql2); 


     rs1 = pst1.executeQuery(); 
     rs2 = pst2.executeQuery(); 

     while(rs1.next()){ 
      String uname=rs1.getString("username"); 
      //System.out.println(uname); 

     while(rs2.next()){ 
      String pwd=rs2.getString("password"); 
      //System.out.println(pwd); 



     if(val1.equals(uname) && val2.equals(pwd)){ 

      chg2.setVisible(true); 
      this.setVisible(false); 
     } else{ 
      JOptionPane.showMessageDialog(null, "Login Information is Incorrect. Try Again.... "); 
     } 

     if(!(val1.equals(uname)) || !(val2.equals(pwd))){ 
      JOptionPane.showMessageDialog(null, "Login Information is Incorrect. Try Again.... "); 


       } 
     }} 




    }catch(SQLException | HeadlessException e){ 
     JOptionPane.showMessageDialog(null, "errrrrr"+e); 

    } 

} 

回答

1

您可能需要通过用户名和密码来查找用户:

String username = usernametxt.getText(); 
String password = passwordtxt.getText(); 
// avoid SQL injection by setting query parameters with '?' 
String sql = "SELECT * FROM logininfo WHERE username = ? AND password = ?"; 
PreparedStatement st = conn.prepareStatement(sql); 
st.setString(1, username); 
st.setString(2, password); 
ResultSet rs = st.executeQuery();  
if (!rs.next()) { 
    // no records found, login failed 
    JOptionPane.showMessageDialog(null, "Login Information is Incorrect."); 
} 
else { 
    // record found, login succeeded 
    // assuming here that there is a unique constraint in the database 
    // on (username, password), otherwise multiple records could be found 
    chg2.setVisible(true); 
    this.setVisible(false); 
} 
+0

它的工作..我添加了错误信息显示空条目..感谢您的帮助:) @Adriaan科斯特 – tenten

1

我有问题这样的,我解决了磨片我从安全文件中删除MD5加密,但也许你的数据库使用MD5加密和您的应用程序不尝试一下这

1

制作用户String val2 = passwordtxt.getText();未返回加密值。 Java密码字段可能不会返回纯文本值。

2

你可以通过2个PARAMS

"SELECT username FROM logininfo WHERE username = '"+val1+"' 
    and password = '"+val2+"' " ; 

你需要使用PreparedStatement的照顾SQL注入作为well..Pass的参数,并将其绑定到查询使用一个查询它做。

在你的情况

while(rs1.next()){ 
     String uname=rs1.getString("username"); 
     //System.out.println(uname); 
    } // <-- close it... 

     while(rs2.next()){ 
     String pwd=rs2.getString("password"); 
     //System.out.println(pwd); 
    } <--- close it.. 

卸下两个}}末,然后再试一次......

+0

最好使用“?”在PreparedStatements上设置参数和setXXX()方法来避免SQL注入漏洞。 –

+0

我在答案中提到过,请@AdriaanKoster –

+0

哦,是的,你说得对。但为什么不在你的代码中显示正确的方式呢? –

相关问题