Java MySQL登录系统确定用户

标签 java mysql

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

例如,对于员工,数据库中的用户名类似于 staff1、staff1 等,而对于经理,其类似于 mng1、mngr2 等。

我的代码可以正常工作,但出于某种原因它只加载了管理器 View 。

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 为空或为空或其他 并且密码也许也是正确的。 你没有做任何你的用户名不可见 在代码中。 rs.getString("") 最有可能返回您 null 。 所以你只是在取消它们。 不要使用像 select * from whatever 这样的选择,这是一件坏事 尤其是在大 table 上做,而不是真正看到你选择的东西。

但是你应该遵循 建议和使用技术和/或一些好的 ORM 喜欢 hibernate 或使用好的旧 springjdbc。 :)


首先,我强烈建议使用准备好的语句 http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html 它也可能帮助您避免 sql 注入(inject)以及应该利用 数据库的资源以更好的方式,因为 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
      }

    }
}

public static ResultSet sqlSelect(Connection con, String sql, Object[] params) throws SQLException
{
    ResultSet rs = null;
    PreparedStatement preparedStatement = con.prepareStatement(sql);
    try
    {
        setParameters(preparedStatement, params);///your parameters
        rs = preparedStatement.executeQuery();
        logger.info(rs.toString());
    }
    catch (SQLException e)
    {
        //TODO log.error("select failed: " + preparedStatement.toString());
        throw e;
    }
    return rs;
}

    public static UserInfo getUser(String username,String pass)
    {
        UserInfo user=null;
        Connection con=null;
   ////     logger.info("user: "+username+" pass: "+pass); if you want to
        String query = "SELECT  id,username,password,email,name,company,description,enabled" +
                " FROM users WHERE username=? and  password=? and enabled=true;";

try{
            con = DBManager.getConnection();
            ResultSet rs = DBManager.sqlSelect(con,query,new String[]{username,pass});

            while(rs != null && rs.next())
            {
                user = new UserInfo();

                user.setId(rs.getInt(1));
                user.setUsername(rs.getString(2));
                user.setPassword(rs.getString(3));
                user.setEmail(rs.getString(4));
                user.setFullName(rs.getString(5));
                user.setCompany(rs.getString(6));
                user.setDescription(rs.getString(7));
                user.setEnabled(rs.getBoolean(8));

       logger.info("user written");

            }
        }catch(SQLException sqle){logger.info(sqle.getMessage());}
        finally
        {
            if(con != null)
                DBManager.freeConnection(con);
        }
        return user;    }

如果该方法使用您的设置返回您的用户,则该用户有效。 您可能希望拥有用户和权限或组表,然后您 如果你愿意,应该创建一个多对多表,如 users_permissions 或 users_groups 它将具有 (id,user_id,permission_id) 或 group_id 然后你必须加入 这两个表 users,permissoins 使用这个多对多表。 像这样

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 类似于:


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
}

希望对您有所帮助。

关于Java MySQL登录系统确定用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9301427/

相关文章:

java - 在 Weblogic 中保护 session ID Cookie 会扰乱 session 创建

java - JVM 和 C++ 之间纳秒级精度的差异

java - 在 JavaFX 中使用 lambda 表达式 block 外部的变量

java - 对列表中的部分项目进行动画处理

java - 使用泛型模拟服务方法

php - 8000 字的 mySQL 类型

mysql - 在mysql中更新表中的列时实现触发器

php - 在全动态和重数据库网站中使用memcached好吗?

php - 使用 PHP 向 MySql 服务器上传和检索图像的示例代码

MySQL:如何像亚马逊一样通过 "New and Bestselling"获取?