0

当用户验证为“管理员”或“用户”时,我试图调用一个页面,但似乎有问题。

private void validateLogin() {
    if (getFieldData() == true) {
        username = txtname.getText();
        String password = new String(txtpassword.getPassword());
        Object type = cbType.getSelectedItem();
        //validate login and password here. 
        //validity will be done by sending login/password to the database
        String sql = "select  count(*) from usermanagement where UserName='" 
                + username + "' and " + "Password='" + password + "'";
        ResultSet rs = datacon.queryTable(sql);
        try {
            rs.next();
            if (rs.getInt(1) > 0) {
                if (type.equals("Admin")) {
                    MainMenu mainmenu = new MainMenu();
                    this.dispose();
                    mainmenu.setVisible(true);
                } else {
                    UserMenu usermenu = new UserMenu();
                    this.dispose();
                    usermenu.setVisible(true);
                }
            } else {
                JOptionPane.showMessageDialog(this, 
                        "Incorrect username or password or user category", 
                        "Error", JOptionPane.ERROR_MESSAGE);
                clearField();
                txtname.requestFocusInWindow();
                cbType.setSelectedIndex(0);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
}
4

1 回答 1

0

我在这里看不到您的输入,用户名和密码。最好附上您的日志,以了解异常对您的问题的说明。

从我在这里的代码中看到的是我的建议,

  • 你应该避免UserName='"+username +"' 在你的 sqls 上使用它,这对于特殊字符会破坏你的 sql 来说是令人震惊的。我建议你坚持类似 PreparedStatement http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

  • 最好坚持if(rs.next())检查记录是否存在。访问是不安全的rs.getInt(1),如果您没有任何匹配的记录,它可能会破坏您的应用程序。

于 2013-06-12T06:50:19.980 回答