首页 文章

sqlite java登录基于用户名密码和位置

提问于
浏览
1

我是一个在netbeans工作的新java程序员,我正在尝试基于sqlite数据库进行登录 . 在数据库中,我有一个用户名列,一个密码列和一个位置列 . 登录的目的是当用户输入他的用户名和密码并按下登录按钮时,程序将连接到sqlite数据库,访问数据库上的特定表,检查用户名和密码字段是否匹配,然后根据他们的位置(管理员,经理或教师),他们将转到不同的jframe . 目前,我创建了一个代码,它将从登录jframe中获取jtextfield并通过sqlite数据库运行任何匹配项,将结果保存到jdialog中,隐藏jtextfields,然后依赖于用户名和密码jtextfield在jdialog中是否为空,取决于用户名具有的位置(管理员,经理或教师),登录jframe将以相应的jframe开口关闭 .

这是我连接到sqlite数据库的代码

private void loginDatabase(){
    //Checks to see if Login is Administrator and then sends him to his respective location

    String userName1 = Usr1.getText();
    String passWord1 = Pass1.getText();

    try{
        String query1 = "select * from LoginManager where Username='"+userName1+"' and Password='"+passWord1+"' and Position=?";
        PreparedStatement pst1 = conn.prepareStatement(query1);
        ResultSet rs1 = pst1.executeQuery();

        if (rs1.next()){

            String add1 = rs1.getString("Username");
            usernameCon1.setText(add1);

            String add2 = rs1.getString("Password");
            passwordCon1.setText(add2);

            String add3 = rs1.getString("Position");
            positionCon1.setText(add3);

        }

        pst1.close();
        rs1.close();

    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e);
    }

}

这是我的实际工作代码(目前,这两种方法都没有附加到按键输入按键,因为我试图先将它们分成几个类,然后将它们放在那里)

private void login(){

    loginDatabase();

    if (usernameCon1.getText().matches(regex) &&passwordCon1.getText().matches(Pass1.getText()) && positionCon1.getText().equals("Administrator")){

        Admin();
        usernameCon1.setText("");
        passwordCon1.setText("");
        positionCon1.setText("");
        Usr1.setText("");
        Pass1.setText("");

    }

    else if (!usernameCon1.getText().isEmpty() && !passwordCon1.getText().isEmpty() && positionCon1.getText().equals("Manager")){



    }

    else if (!usernameCon1.getText().isEmpty() && !passwordCon1.getText().isEmpty() && positionCon1.getText().equals("Teacher")){



    }

    else {

        JOptionPane.showMessageDialog(null, "Invalid Login", "Invalid Login", JOptionPane.ERROR_MESSAGE);

    }

}

最终,我遇到了if if else声明的问题 .

我为疯狂的语法道歉 . 当我开始这个项目时,我对编码礼仪真的很陌生 . 我一直试图在整个程序中改变我的习惯,所有其他程序都将采用适当的格式 .

再次感谢您的帮助 .

EDIT: 所以我想通了,我只是从sql语句中删除了额外的东西,只根据用户名和密码获取信息 .

String query1 = "select * from LoginManager where Username='"+userName1+"' and Password='"+passWord1+"'";

1 回答

  • 3

    要获得更好的代码结构,请使用User类 .

    public class User{
        public String userName;
        public String passWord;
        public String position;
    
        public User(String userName,String passWord,String position){
            this.userName = userName;
            this.passWord = passWord;
            this.position = position;
        }
    }
    

    要正确使用 PreparedStatment ,请准备参数 . 像这样:

    String query = "select * from LoginManager where Username=? and Password=?";
    PreparedStatement stmt = con.prepareStatement(query);
    //Parameters
    stmt.setString(1, userName);
    stmt.setString(2, passWord);
    //Execute
    stmt.executeQuery();
    

    loginDatabase 方法返回用户对象或 null case登录失败

    public User loginDatabase(String userName,String passWord){
        User user = null;
    
        String query = "select * from LoginManager where Username=? and Password=?";
        PreparedStatement stmt = con.prepareStatement(query);
        //Parameters
        stmt.setString(1, userName);
        stmt.setString(2, passWord);
        //Execute
        ResultSet res = stmt.executeQuery();
    
        if(res.next()){
            //You dont need to find userName & passWord, are already exists
            String position = res.getString("position");
            user = new User(userName, passWord, position);
        }
    
        return user;
    }
    

    最后,检查用户位置 .

    public void login(){
    
        String userName = userNameTF.getText();
        String passWord = passWordTF.getText();
    
        User user = loginDatabase(userName, passWord);
    
        if(user != null){
            switch(user.position){
                case "Administrator":
                    // ...
                    break;
                case "Manager":
                    // ...
                    break;
                case "Teacher":
                    // ...
                    break;
            }
        }else{
            // login failed 'Invalid login'
        }
    }
    

相关问题