繁体   English   中英

使用mysql数据库的Java GUI登录仅接受访问的最后一行密码而忽略了其余部分

[英]Java GUI login with mysql database only accept last row password for access ignoring rest

我正在尝试通过使用mysql数据库使Java gui进行登录验证。 目前,我认为它只是从最后一行获取密码,例如

第一行- username = user, password = 1234第二行- username = admin, password = 12345

这些只是暂时的,直到解决为止,我计划对它们进行密码哈希处理,然后也进行设置,以便用户可以创建一个新帐户,而不能创建一个我已经创建的帐户。

关于我的问题,似乎只选择了密码12345,而不是1234 ...是否没有用户名也没关系,因此,如果我要登录,它接受一个空白的用户名和密码12345。我想解决此问题并使其正确,以便它可以选择表中的所有用户名和密码,而不仅仅是最后一行。

下面是我的代码。

问题在这条线

resultSet = statement.executeQuery(            
                "SELECT ID, username, password FROM person" );

执行查询后,它将检索所有行。现在,当您在此处执行操作时

while ( resultSet.next() ) 
             {
                Uname = resultSet.getString("username");
                Pass = resultSet.getString("password");
.............
//rest codes
}

Uname值连续变化,因此您得到的是最后一行。上面while循环的小解释首先,光标在第一行的上方,当rs.next()返回boolean时,它检查是否存在任何行,如果是,则返回如果没有,返回true,否则返回false。现在假设总共有3行,那么rs.next()将返回true,这样循环就进入了内部, uname获得了firstrowusername同样 ,密码也获得了第一个密码。现在再次rs.next()行返回true所以现在uname将获得第二username ,密码将获得第二行密码。这是第三次,现在uname具有第三行的用户名.3行结束后rs.next()返回false ,因此从最后,Uname包含用户名和最后一行,Pass包含密码

更新我的建议是使用这种方式

PreparedStatement pt=connection.prepareStatement("SELECT ID, username, password FROM person WHERE username=?");
pt.setString(1,username);
resultSet = pt.executeQuery();

现在,当您只有一行时。

您做错了。 而不是搜索匹配用户和做的密码相匹配自己的数据库,你应该问的数据库是否两个匹配,通过

select * from person where userid = ? and password = ?

而只是确保一个结果行。 它甚至可能是一个计数查询,您只需检查结果是否为1。

这样,您还可以对数据库中的密码进行哈希处理,出于其他安全原因,您应该这样做。

您好##我只是一个初学者,我想分享自己的工作。

始终为连接数据库设置不同的类。 这将使您的代码更整洁。

我将举例说明

private void btn_LoginActionPerformed(java.awt.event.ActionEvent evt) {
    /*LOGIC*/ 

super.Show("Select * from Login");// this class is extending a class connect me
        try{
            int Checker = 0;// a flag 

        while(rs.next())
        {
    String user = field_UserId.getText();//values coming from field
            String pass = field_Password.getText();
    String user1 = rs.getString("User");//values coming from database
            String pass1 = rs.getString("Pass");

                if( user.equals(user1)& pass.equals(pass1))
                {      
                    //if enters into loop user is valid
                    Checker=1;//setting flag to 1

                }


          }
          if(Checker == 0  )
          {     JOptionPane.showMessageDialog(null,"Check Id&Password");
                field_UserId.setText("");
                field_Password.setText("");
          }


          }


    catch(Exception ex_connection)
 {
        System.out.println(ex_connection);


}

            /*LOGIC ENDED   */
     }

**现在是class connectme * *

    class Connectme
  {
String Name;
String Number;
ResultSet rs,r,rs1;
ResultSetMetaData md;
Statement st;
Statement st1;
int p=0;


Connectme()
{


try 
    {

        Class.forName("com.mysql.jdbc.Driver");
    Connection  con=  
          DriverManager.getConnection("jdbc:mysql://localhost:3306/Storage","root","");
        st= con.createStatement();  
        st1 = con.createStatement();

   }
catch(Exception ex_connection)
{
    System.out.println("damnnn");
    JOptionPane.showMessageDialog(null,"Check Database Connection");
}

}

void queryExecute(String insert)
{


try
{



        /*begin-to execute query ins database*/

            st.executeUpdate(insert);



        /*end-to enter values in database*/

}
catch(Exception ex_connection)
{
        System.out.println(ex_connection);


}
}


void Show(String table_name)
{

    try
{


    String insert = ("Select * from " + table_name + "");



        rs = st1.executeQuery(insert);
      md = rs.getMetaData();


}
    catch(Exception ex_connection)
{
        System.out.println(ex_connection);

        System.out.println("waah");


}

}


 void Show1(String insert1)
 { 

    try
 {



        rs1= st.executeQuery(insert1);
        /* while (rs1.next()) {
         System.out.print(rs1.getString("Price"));

         }*/


 md = rs1.getMetaData();


}
    catch(Exception ex_connection)
{
        System.out.println(ex_connection);




}

  }

 }
解决您的问题
  String user=username_field.getText(); PreparedStatement ps = con.prepareStatement( "SELECT ID, username, password FROM person where username=user" ); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM