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

基于用户名密码和位置的sqlite java登录,java,sqlite,Java,Sqlite,我是一名在netbeans工作的新java程序员,我正在尝试基于sqlite数据库进行登录。在数据库中,我有一个username列、一个password列和一个position列。登录的目的是当用户输入用户名和密码并按下登录按钮时,程序将连接到sqlite数据库,访问数据库上的特定表,检查用户名和密码字段是否匹配,然后根据他们的位置(管理员、经理或教师),它们将转到不同的jframe。目前,我创建了一个代码,该代码将从登录jframe中获取jtextfield,并通过sqlite数据库运行它以查

我是一名在netbeans工作的新java程序员,我正在尝试基于sqlite数据库进行登录。在数据库中,我有一个username列、一个password列和一个position列。登录的目的是当用户输入用户名和密码并按下登录按钮时,程序将连接到sqlite数据库,访问数据库上的特定表,检查用户名和密码字段是否匹配,然后根据他们的位置(管理员、经理或教师),它们将转到不同的jframe。目前,我创建了一个代码,该代码将从登录jframe中获取jtextfield,并通过sqlite数据库运行它以查找任何匹配项,将结果保存到jdialog中,其中jtextfields是隐藏的,然后,根据jdialog中的用户名和密码jtextfield是否为空以及用户名的位置(管理员、管理员或教师),登录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);
    }

}
这是我实际工作的代码(目前,这两个方法都没有附加到enter键上的按钮,因为我试图先将它们放入类中,然后再放入其中)

最终,我对if-else的说法感到很不舒服

我为疯狂的语法道歉。当我开始这个项目的时候,我对编码礼节真的很陌生。我一直在努力改变我的习惯,在我的程序和我的所有其他程序将在适当的格式

再次感谢你的帮助

EDIT:所以我明白了,我只是从sql语句中删除了额外的内容,只获取基于用户名和密码的信息

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

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

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;
    }
}
要正确使用
preparedstation
,请准备参数。像这样:

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
案例登录失败

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'
    }
}

我不知道为什么要混合使用注入查询和基于参数的查询,但我建议您坚持使用基于参数的查询(即
PreparedStatements
而不是字符串连接)。根据您的查询,它要么返回结果,要么不返回结果,如果返回,则表示匹配成功,否则不返回。我要做的是,将所需信息(用户名和位置)包装到一个对象中,然后可以使用该对象确定要显示的UI。如果login方法返回
null
,则他们无法登录
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'
    }
}