2012-02-15 11 views
1

私はスタッフとマネージャのための単一のログインシステムを作成しようとしています。私は自分のデータベースを正しく設定しており、Javaコードはデータベースに正しく接続しています。私が抱えている問題は、ユーザーがデータベースのユーザー名に基づいてスタッフとしてログインし、スタッフウィンドウが表示されたり、マネージャがデータベースのユーザー名に基づいて再度ログインしようとすると、マネージャウィンドウが表示されます。Java MySQLログインユーザを決定するシステム

などの類似したmng1、mngr2、データベース内のユーザー名がこのstaff1のように見える、スタッフのために例えばstaff1、などとマネージャーのための

私は一種のコード作業を持っているが、それは一部だけのマネージャービューをロードします理由。さて、ここで実際のところ

if(username1.equals(mng1)&&psw.equals(pass1)){ 
mng= new ManagerMainMenu() 

この条件は、あなたのケース には常に真であると思わあなたの問題への答えとして

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"); 
    } 
} 

答えて

2

どちらかあなたのUSERNAME1はnullまたは空または何か他のもの とありますパスワードも正しいかもしれません。 コード内にユーザ名が表示されていない状態で何もしていません。 rs.getString( "")はnullを返します。 あなたはただそれを無効にしています。 select * from whateverのような選択は使用しないでください。これは悪いことです。特に大きなテーブルでは特にそうですが、あなたが選択しているものは実際には見えません。

しかし、あなたは のアドバイスに従い、テクニックを使用するか、またはいくつかの良い ORMのような休止状態か、おそらく良い古いspringjdbcを使用する必要があります。 SQLはすでに事前行くように:)すべての


まず私は強く、より良い方法で データベースのリソースを活用すべきであるだけでなく、SQLインジェクションを避けるために、それはまたあなたを助けるかもしれないプリペアドステートメント http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html を使用することをお勧めしますdbにコンパイルされます。

ここにいくつかのライブ例があります。

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

方法は、お使いの設定でユーザーを返した場合、ユーザは有効です。 は、 (id、user_id、permission_id)またはgroup_idを持つようにしたい場合は、users_permissionsやusers_groupsのような多対多テーブルを作成する必要があります。 これらの2つのテーブルのユーザに参加し、この多対多テーブルを使用します。

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 

を、あなたはあなたの選択とのgetUser()メソッドを調整します。この

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 

または使用のような 何かが参加します。

のようなの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 
} 

は、abitのに役立ちます願っています。

+0

これは完全に私を投げ捨てます。私はこれについていくつかの研究をする必要があると思う。 –

+0

@Limpepはいサー。私は編集後にもっと説明をしています。 –

関連する問題