2013-06-12 52 views
0

我試圖調用一個頁面,當用戶驗證爲「管理員」或「用戶」,但似乎有問題。桌面應用程序登錄使用計數

private void validateLogin() { 
    if (getFieldData() == true) { 
     username = txtname.getText(); 
     String password = new String(txtpassword.getPassword()); 
     Object type = cbType.getSelectedItem(); 
     //validate login and password here. 
     //validity will be done by sending login/password to the database 
     String sql = "select count(*) from usermanagement where UserName='" 
       + username + "' and " + "Password='" + password + "'"; 
     ResultSet rs = datacon.queryTable(sql); 
     try { 
      rs.next(); 
      if (rs.getInt(1) > 0) { 
       if (type.equals("Admin")) { 
        MainMenu mainmenu = new MainMenu(); 
        this.dispose(); 
        mainmenu.setVisible(true); 
       } else { 
        UserMenu usermenu = new UserMenu(); 
        this.dispose(); 
        usermenu.setVisible(true); 
       } 
      } else { 
       JOptionPane.showMessageDialog(this, 
         "Incorrect username or password or user category", 
         "Error", JOptionPane.ERROR_MESSAGE); 
       clearField(); 
       txtname.requestFocusInWindow(); 
       cbType.setSelectedIndex(0); 
      } 
     } catch (SQLException ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 
+4

是什麼問題? – anshulkatta

+1

1)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 2)請使用代碼格式化代碼,輸入/輸出和結構化文檔,如HTML或XML。爲此,請選擇樣本並單擊郵件發佈/編輯表單上方的「{}」按鈕。 3)*「這裏似乎是一個問題..」*有什麼問題? –

+0

什麼問題? – NINCOMPOOP

回答

0

我沒有在這裏看到您的輸入,用戶名和密碼。最好附上您的日誌,以便了解有關您的問題的異常情況。

從我的代碼在這裏看到的是我的建議,

  • 你應該從你的sql語句使用此UserName='"+username +"'避免,這是令人震驚的特殊的字符可以打破你的SQL。我建議你堅持像PreparedStatement http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

  • 最好堅持if(rs.next())檢查是否存在記錄。訪問rs.getInt(1)是不安全的,如果您沒有任何匹配的記錄,它可能會破壞您的應用程序。

+1

可能sql注入:D – anshulkatta

+0

thnks @Macon,當它帶來錯誤時,用戶名選項卡給出用戶在數據庫中的數字,例如timo是數字3 ...我有我的用戶,每個人都有一個ID ...這是爲什麼使用rs.getInt(1)letme嘗試你在UserName ='「+ username +」'上建議的內容...... – reggea

+0

@reggea我建議你使用類似 if(rs.next()&&(rs.getInt (1)> 0)) – Njax3SmmM2x2a0Zf7Hpd