Java 使用MySQL检查用户名和密码

Java 使用MySQL检查用户名和密码,java,mysql,Java,Mysql,我正在尝试用MySQL验证用户名和密码。但它不起作用。我找不到问题。谁能帮我修一下吗 private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { String user = jTextField1.getText(); char[] pass = jPasswordField1.getPassword(); try {

我正在尝试用MySQL验证用户名和密码。但它不起作用。我找不到问题。谁能帮我修一下吗

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                            
    String user = jTextField1.getText();
    char[] pass = jPasswordField1.getPassword();

    try
    {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/JEREN","root","");
        Statement stat = con.createStatement();
        String sql = "Select * from tbl_User Where username='" + user + "' and password='"+pass+"'";
        rs = stat.executeQuery(sql);
        while (rs.next())
        {
            if (user.equals(rs.getString("username")))
            {
                if (pass.equals(rs.getString("password")))
                {
                          JOptionPane.showMessageDialog(null,"Login Successfully");
                          main.getWindows();
                }
                          else
                                  {
                                      JOptionPane.showMessageDialog(null,"Incorrect Password");
            }
            else
            {
                JOptionPane.showMessageDialog(null,"Incorrect Login");
            }
        }
        stat.close();
        con.close();
    }
    catch (SQLException | HeadlessException e)
    {
        //e.printStackTrace();
        JOptionPane.showMessageDialog(null,"PROBLEM OCCURED !!!! ");
    } 
    catch (ClassNotFoundException ex) {
        Logger.getLogger(Users.class.getName()).log(Level.SEVERE, null, ex);
    }
 // TODO add your handling code here:
}  

实际上,我认为这并不是在数据库中检查带有用户名和密码的条目。我说得对吗?

首先,选择“按
用户名”
,然后对用户输入的密码进行哈希运算,检查它是否与数据库中的哈希密码匹配。我建议像
SHA-2

我还建议您编写类来处理代码,即
User
类。。 您还忘记关闭
结果集

还有一件事,使用
PreparedStatement

这样做

Statement stat = con.createStatement();
user = user.toLowerCase();
pass = pass.toLowerCase();
String sql = "Select * from tbl_User Where LOWER(username)='" + user + "' and LOWER(password)='"+pass+"'";
rs = stat.executeQuery(sql);
if(rs.next())
{
     JOptionPane.showMessageDialog(null,"Login Successfully");
                        main.getWindows();
}
else
{
    JOptionPane.showMessageDialog(null,"Incorrect Login");

}

您正在检查密码和用户名是否匹配2次

String sql = "Select * from tbl_User Where username='" + user + "' and password='"+pass+"'";
您已经检查了密码和用户,首先应该检查密码是否存储为MD5或任何其他哈希类型


在该sql之后,您只需要检查它是否返回任何类似@Prabhakaran所说的行

检查编写的代码是否连接到数据库,下面的代码中没有密码

con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/JEREN“,”根“,”)

第二个是检查用户和pass变量是否从操作事件中获取值。

第一件事

代码将仅用于验证错误。因此,必须粘贴程序触发的错误

由于我们没有足够的信息来解决这个问题,我将尽力帮助你

1-您的连接变量似乎缺少“连接”,请尝试以下操作:

Connection con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/“DATABASENAME”?useTimezone=true&serverTimezone=UTC”、“用户名”、“密码”)

2-您已经在开始时对查询执行了if语句,因此不必重新开始,只需键入:
if(rs.next()){
}
其他的 { showMessageDialog(null,“密码不正确”); }
然后继续处理例外部分

代码如下:

try
{
    Class.forName("com.mysql.jdbc.Driver");
   Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/JEREN","root","");
    Statement stat = con.createStatement();
    String sql = "Select * from tbl_User Where username='" + user + "' and password='"+pass+"'";
    rs = stat.executeQuery(sql);
    if (rs.next())
    {

                      JOptionPane.showMessageDialog(null,"Login Successfully");
                      main.getWindows();
            }
                      else
                              {
                                  JOptionPane.showMessageDialog(null,"Incorrect Password");
        }
        else
        {
            JOptionPane.showMessageDialog(null,"Incorrect Login");

    }
    stat.close();
    con.close();
}
catch (SQLException | HeadlessException e)
{
    //e.printStackTrace();
    JOptionPane.showMessageDialog(null,"PROBLEM OCCURED !!!! ");
} 
catch (ClassNotFoundException ex) {
    Logger.getLogger(Users.class.getName()).log(Level.SEVERE, null, ex);
}
//TODO在此处添加您的处理代码:
}`

用户名和密码在数据库中都是varchar吗?首先是;请告诉我您没有在数据库中存储原始密码。其次,您需要学习布尔逻辑-
&&
。第三,你到底有什么问题?事实上,永远不要将密码存储为纯文本。这将是一个简单但安全的实现。存储时必须对其进行散列,检查时必须使用另一个函数查看字符串是否与散列匹配。虽然这是正确的,但这只会有助于进入坟墓。我这样做了,但它一直说登录不正确。我输入的用户名和密码正确!它成功了,谢谢大家。密码字段有问题。添加了.getText(),它成功了