给定一个需要用户输入的登录窗口: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());
}
答案 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