javamysql登录系统确定用户

javamysql登录系统确定用户,java,mysql,Java,Mysql,我正在尝试为员工和经理创建一个单一登录系统。我的数据库设置正确,java代码正确连接到数据库。我遇到的问题是,当用户根据数据库中的用户名以staff身份登录时,会出现staff窗口,或者如果经理试图根据数据库中的用户名再次登录,则会出现manager窗口 例如,对于staff,数据库中的用户名看起来像staff1、staff1等,对于manager,它类似于mng1、mngr2等 我有点让代码工作,但出于某种原因,它只加载manager视图 final Statement s = conn.cr

我正在尝试为员工和经理创建一个单一登录系统。我的数据库设置正确,java代码正确连接到数据库。我遇到的问题是,当用户根据数据库中的用户名以staff身份登录时,会出现staff窗口,或者如果经理试图根据数据库中的用户名再次登录,则会出现manager窗口

例如,对于staff,数据库中的用户名看起来像staff1、staff1等,对于manager,它类似于mng1、mngr2等

我有点让代码工作,但出于某种原因,它只加载manager视图

final Statement s = conn.createStatement ();    

ResultSet rs= s.executeQuery ("SELECT * FROM users where username='"+username1+"' && password='"+psw+"'");
String mng1="mng*";
String staff="staff*";
String pass1="";

while (rs.next ())
{                                      
    mng1 = rs.getString ("");
    staff =rs.getString ("");
    pass1 = rs.getString ("password");

    if(username1.equals(mng1)&&psw.equals(pass1))
    {
        ManagerMainMenu mng= new ManagerMainMenu();
        mng.main(null);
        //System.out.println("its working");
    }
    else if(username1.equals(staff)&&psw.equals(pass1))
    {
        TakingOrder to = new TakingOrder();
        to.main(null);
    }
    else
    {
        System.out.println("password or username is wrong");
    }
}

事实上,这是你问题的答案

if(username1.equals(mng1)&&psw.equals(pass1)){ 
 mng= new ManagerMainMenu()
在你的情况下,这种情况似乎总是正确的 您的username1为null或为空或其他内容 密码也可能是正确的。 您没有在用户名不可见的情况下执行任何操作 在代码中。rs.getString(“”)很可能返回
null
。 所以你只是在否定它们。 不要使用像
select*这样的选择,无论从什么地方选择,这都是一件坏事
尤其是在大桌子上,而且看不到您选择的内容

但是你应该跟着 专家建议并使用这些技术和/或一些好的方法 类似hibernate的ORM或使用好的旧springjdbc。:)


首先,我强烈建议使用事先准备好的语句 它还可以帮助您避免sql注入 由于sql已经预编译到数据库中,所以数据库的资源将以更好的方式使用

这里有一些活生生的例子

static public void setParameters(PreparedStatement preparedStatement, Object[] params)
        throws SQLException
{      

    if (params != null)
    {
        for (int i = 0; i < params.length; i++)
        {
            if (params[i] == null)
            {
                preparedStatement.setNull(i + 1, Types.INTEGER);
                continue;
            }
            String className = params[i].getClass().getName();
            if (className.compareTo("java.lang.String") == 0)
            {
                preparedStatement.setString(i + 1, (String) params[i]);
            }
            else if (className.compareTo("java.lang.Integer") == 0)
            {
                preparedStatement.setInt(i + 1, ((Integer) params[i]).intValue());
            }
      ...............///your types go here
      }

    }
}

如果该方法返回带有设置的用户,则该用户有效。 您可能希望拥有用户和权限或组表,然后 如果愿意,应该创建一个多对多表,如用户\权限或用户\组 哪些将具有(id、用户id、权限id)或组id,然后您必须加入 这两个表允许用户使用此多对多表。 像这样的

select u.user_id,p.permission from
users u,user_permissions up,permissions p
where u.user_id=up.user_id and up.permission_id=p.permission_id
and u.user=? and u.password=? and u.enabled=1
或使用联接:

select u.user_id,p.permission from
users u 
inner join user_permissions up
on  u.user_id=up.user_id
inner join permissions p
on up.permission_id=p.permission_id
where u.user=? and u.password=? and u.enabled=1
然后调整select和getUser()方法

UserInfo pojo类似于:


公共类用户信息{
私有int-id;
私有字符串用户名;
私有字符串密码;
私人字符串电子邮件;
私有字符串全名;
私人弦公司;
私有字符串描述;
私有列表权限;
//接受者//接受者
}


希望能有点帮助。

这完全让我感到厌烦。我想我需要做一些研究。
select u.user_id,p.permission from
users u,user_permissions up,permissions p
where u.user_id=up.user_id and up.permission_id=p.permission_id
and u.user=? and u.password=? and u.enabled=1
select u.user_id,p.permission from
users u 
inner join user_permissions up
on  u.user_id=up.user_id
inner join permissions p
on up.permission_id=p.permission_id
where u.user=? and u.password=? and u.enabled=1
public class UserInfo {
    private int id;
    private String username;
    private String password;
    private String email;
    private String fullName;
    private String company;
    private String description;
    private List<Integer or String> permissions;
//getters//setters
}