当前位置: 首页 > 知识库问答 >
问题:

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

皇甫夕
2023-03-14

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

}

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

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-else的说法感到困惑。

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

再次感谢您的帮助。

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

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

共有1个答案

季博
2023-03-14

要获得更好的代码结构,请使用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();

方法返回用户对象或案例登录失败

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'
    }
}
 类似资料:
  • 我已经安装了Jenkins ver。OSX 10.11.3上的1.653,使用标准安装程序并添加git插件。我试着从github为公共项目创建一个作业,它成功了。现在,我试图创建私人回购作业使用用户名和密码,但它总是失败。这是日志: 在工作区中构建/Users/Shared/Jenkins/Home/workspace/MyProject git rev-parse --is-inside-wor

  • 首次登陆的用户名和密码有二个,分别为: 用户名:admin     密码 :admin 用户名:user0     密码:user0 账号admin是系统管理员权限,账号user0是普通用户,属于设计角色,拥有设计权限。 在登录后,注意更改账号密码。

  • 问题内容: 我需要输入USER表的USER_ID字段作为另一个表中的外键。因此,我认为我需要在用户登录时启动一个会话。我很难让它在任何地方回显。我能够启动一个会话,该会话允许我回显USERNAME,但无法将其复制为ID。 请帮忙吗?我的处理代码如下。我还粘贴了本节,我暂时尝试对其进行回显以进行测试。 处理脚本: 我希望USER_ID出现在哪里: 问题答案: 使用FETCH_ASSOC而不是FETC

  • 我喜欢用户按公司名称、用户名和密码登录-他们需要输入所有这些字段。 和字段在表中。在表中。 可以在表中重复,但是每个用户名属于不同的公司名。在表中定义。 如何根据公司名称、用户名和密码进行身份验证? 我查看了方法。 我不能覆盖它,因为我需要传递属于公司的特定用户,然后进行身份验证检查。 更新:

  • 我得到了3页:success.html,login.php,checklogin.php.我还创建了一个名为userInfo的mysql数据库表。表“userInfo由3个用户组成:David,Jane,Richard。当我使用userInfo中的用户David输入用户名和密码时,它会指向success.html,它会显示“登录成功”。但是当我输入Mary作为我的用户名和Mary作为我的密码时,它

  • 我正在为Dynamics GP编写加载项,并尝试运行自定义存储过程,但当我尝试打开连接时,我收到一条错误消息,显示“用户登录失败:”。 如果手动使用系统管理员用户名和密码,则所有操作都会正确执行。但是,我想使用登录Dynamics GP的人的用户名和密码。 这是完整堆栈跟踪: 如果我将中的更改为使用,它看起来根本找不到网络上的数据源并给出错误: 如果我将连接字符串打印到屏幕上,它看起来是正确的,正