java - 验证结果集中的 JTextField 数据

标签 java swing jdbc sqlexception

我正在尝试设置一个登录系统,当用户输入用户名和密码并按下登录按钮时,他的用户名和密码将在 SQL 语句中发送,以便与数据库中的用户进行匹配。如果用户名和密码正确(如果它们在数据库中匹配),则会使用数据库中的所有用户数据创建一个用户对象,并将用户带到管理仪表板

在对结果集等进行了大量研究并浏览了大量代码之后,我仍然无法使其在我的系统中工作。谁能告诉我一个好方法来做到这一点?或者告诉我这段代码是否有明显的错误?

当我输入用户名和密码并按登录时,我在控制台中收到错误:

java.sql.SQLException: Invalid column index
    at oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:5321)
    at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:5309)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.setString(OraclePreparedStatementWrapper.java:280)
    at database.UserOperations.validateLog(UserOperations.java:45)
    at gui.Login$2.mouseClicked(Login.java:77)

一些GUI代码

    JButton btnLogin = new JButton("Login");
    btnLogin.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {

            UserOperations userOperations = new UserOperations();

            ResultSet rset = userOperations.validateLog(textFieldUsername.getText(), textFieldPassword.getText());
            User user = null;
            try {
                if (rset.next()) {
                    user = new User(rset.getInt("userID"), rset.getString("userName"), rset.getString("userPassword"), rset.getString("securityQuestion"), rset.getString("securityAnswer"),
                        rset.getInt("adminRights"), rset.getString("email"), rset.getString("fName"), rset.getString("phoneNumber"), rset.getString("department"));

                    dispose();
                    AdminDashboard admin = new AdminDashboard();
                    admin.setVisible(true);

                }
                else{

                    JOptionPane.showMessageDialog(null, "Login fail!", "Error", JOptionPane.WARNING_MESSAGE);
                }
            } catch (SQLException e2) {
                e2.printStackTrace();
            }

        }
    });

validateLogin()方法

   public ResultSet validateLog(String username, String userpassword)
{
    try {
        String sql = "SELECT userid, username, userpassword, securityquestion, securityanswer, adminrights, email, fname, phonenumber, department FROM systeuser WHERE username = ? AND userpassword = ?";

        stmt = conn.prepareStatement(sql);
        stmt.setString (2, username);
        stmt.setString (3, userpassword);
        rset = stmt.executeQuery ( );

    }
    catch(Exception e){
        e.printStackTrace ( );
        JOptionPane.showMessageDialog (null, "Login Failed", null, JOptionPane.WARNING_MESSAGE);
    }
    return rset;

}

最佳答案

尝试小写:

user = new User(rset.getInt("userid"), rset.getString("username"), 
    rset.getString("userpassword"), rset.getString("securityquestion"), 
    rset.getString("securityanswer"), rset.getInt("adminrights"), 
    rset.getString("email"), rset.getString("fname"),
    rset.getString("phonenumber"), rset.getString("department"));

而不是混合大小写:

user = new User(rset.getInt("userID"), rset.getString("userName"), 
    rset.getString("userPassword"), rset.getString("securityQuestion"), 
    rset.getString("securityAnswer"), rset.getInt("adminRights"), 
    rset.getString("email"), rset.getString("fName"),
    rset.getString("phoneNumber"), rset.getString("department"));

另外,更改此:

stmt = conn.prepareStatement(sql);
stmt.setString (2, username);
stmt.setString (3, userpassword);

对此:

stmt = conn.prepareStatement(sql);
stmt.setString (1, username);
stmt.setString (2, userpassword);

关于java - 验证结果集中的 JTextField 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16386118/

相关文章:

java - 升级到 Java JDK 11 时 MySQL 出现 SSL 异常

Java JDBC : Altering table

java - Class.getResource(className) 给我 NullPointerException

java - 如果先指定 -jar,为什么 -Dproperty=value 不起作用?

java - 我必须选择该复选框两次才能在 jTable 中选中/取消选中

java - 我在 GridLayout 中获取按钮的 X 和 Y 索引的方法

Java 面板 BufferedImage 不工作

java - 如何使用MySQL数据库来验证用户身份?

java - 从 Hibernate 获取动态 SQL 列名

java - 运行项目后出现异常java.lang.UnsatisfiedLinkError