JAVA - 在类之间传递值

时间:2017-08-10 17:13:08

标签: java

给定一个需要用户输入的登录窗口:username&密码。 成功识别后,用户将被重定向到主窗口。 在这里,我想显示他或她的用户名,但我收到空。

这是我目前的代码: 登录课程:

private void LoginUser(String username, String password)
{
    user = username;
    pass = password;
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;

    try
    {
        conn = MainEngine.getConnection();
        stmt = conn.createStatement();
        rs = stmt.executeQuery("SELECT username FROM users WHERE username ='"+user+"' AND password ='"+getMD5Hex(pass)+"'");
        if(rs.next()) // Successful login
        {
            Window_AfterLogin window_afterlogin = new Window_AfterLogin();
            window_afterlogin.setVisible(true);
            this.dispose();
        }
        else
        {
            label_info.setText("Wrong credentials");
        }
    }
    catch(Exception e)
    {
        System.err.println(e);
    }
}

public String getUserName()
{
    return user;
}

注意:user和pass变量是全局的。

Window_AfterLogin类:

public Window_AfterLogin() {
    initComponents();
    Window_Login window_login = new Window_Login();
    System.out.println(window_login.getUserName());
}

2 个答案:

答案 0 :(得分:0)

在构造函数中,您正在创建Window_Login类的新实例,而不是设置用户名。

答案 1 :(得分:0)

您的Window_AfterLogin()构造函数初始化了另一个Window_Login,这意味着您有window_login.getUserName() - null尝试检索的用户名。

在您的登录后代码中,您可以添加另一个字段username

public Window_AfterLogin{
   private String username;

   public Window_AfterLogin(String username){
          initComponents();
          this.username = username;
   }
}

LoginUser课程内,您必须相应地更改代码:

    if(rs.next()) // Successful login
    {
        Window_AfterLogin window_afterlogin = new Window_AfterLogin(user);
        window_afterlogin.setVisible(true);
        this.dispose();
    }

注意

您的应用程序容易受到SQL注入攻击。请阅读准备好的陈述以及SQL-Injections如何在理论上起作用并尝试防止它们。

https://de.wikipedia.org/wiki/SQL-Injection https://www.tutorialspoint.com/javaexamples/jdbc_prepared_statement.htm