2016-10-22 3 views
0

Ich versuche gerade, ein Login-System in Java und SQL zu erstellen und erhalte derzeit einen Fehler.Fehler beim Suchen nach Benutzername und Passwort

PreparedStatement s1 = con.prepareStatement("SELECT * FROM dbo.Logins WHERE Username=? AND Password=?"); 
s1.setString(1,loginUsername); 
s1.setString(2, loginPassword.toString()); 
ResultSet rs = s1.executeQuery(); 

if(rs.next()){ 
    JOptionPane.showMessageDialog(null, "User Found"); 
} 
else{ 
    JOptionPane.showMessageDialog(null, "Error"); 
} 

Als ich den Code-Snippet führen Sie es zeigt immer den anderen Teil der if/else und im nicht sicher, warum. Danke im Voraus.

Bearbeiten: Ja die DB ist mit Benutzern gefüllt. Edit2: Ich habe die Funktion so geändert, dass zwei String-Argumente erforderlich sind.

+0

es einfach ist gemein gefunden kein Spiel, Sie sicher, Sie haben Daten in DB gespeichert –

+0

Ich bin in der Lage, die Tabelle zu drucken, zu trösten, so ist es auf jeden Fall gerettet. – jaayvazian

+0

Warum verwenden Sie 'loginUsername' direkt, aber' loginPassword.toString() 'und nicht' loginPassword' direkt? –

Antwort

0

Sie müssen versuchen, while(rs.next()) anstelle von if(rs.next()) zu verwenden.

Wenn das nicht funktioniert, enthält Ihre DB (die Sie erwähnt haben), diese bestimmten Werte von Benutzername und Kennwort, die Sie suchen? Wenn nicht, könnte das das Problem sein.

Wenn das auch nicht funktioniert, haben Sie möglicherweise einige Objekte (z. B. s1.close() oder con.close()) geschlossen, wo Sie nicht sollten. Für weitere Hilfe benötigen Sie einen detaillierteren Überblick darüber, was Sie im gesamten Code getan haben.

+0

die while (rs.next()) rund um die if-Anweisung und jetzt keine Pop-up-Meldung gespeichert wird . Habe ich es an die falsche Stelle gesetzt oder ist das ein anderer Fehler – jaayvazian

+0

probiere mit dabei statt der if() –

+0

probiere die while-Schleife aus, bekomme nix und die DB enthält den Login im mit. – jaayvazian

0

Sie können die Anzahl der in Ihrer Tabelle verfügbaren Zeilen für die gegebene Abfrage abrufen, und wenn sie größer als 0 ist, wird die User-Found-Anweisung ausgeführt.

PreparedStatement s1 = con.prepareStatement("SELECT * FROM dbo.Logins WHERE Username=? AND Password=?"); 
s1.setString(1,loginUsername); 
s1.setString(2, loginPassword.toString()); 
ResultSet rs = s1.executeQuery(); 

int rowCount = rs.last() ? rs.getRow() : 0; //Number of rows available in table for query 

if(rowCount>0) 
    JOptionPane.showMessageDialog(null, "User Found"); 
} 
else{ 
    JOptionPane.showMessageDialog(null, "Error"); 
} 
+0

Können Sie erklären, was Sie hier geändert haben und warum? Die Antwort ist nicht sehr nützlich ohne einige begleitende Beschreibungen. – nbrooks

+0

@nbrooks hat meine Antwort aktualisiert. rs.next() gibt immer "select ..." zurück. Die Frage ist, ob die Anzahl größer als Null ist. Also, dafür habe ich rowCount benutzt. – Rishi

+0

habe diese com.microsoft.sqlserver.jdbc.SQLServerException: Die angeforderte Operation wird nur für Vorwärts-Ergebnismengen nicht unterstützt. – jaayvazian

0
public void Login(String user, String pass) throws ClassNotFoundException, SQLException{ 
     try{ 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      MainWindow mw = new MainWindow(); 
      String userName = "<USERNAME>"; 
      String password = "<PASSWORD>"; 
      String url = "<URL>"; 
      Connection con = DriverManager.getConnection(url, userName, password); 
      PreparedStatement s1 = con.prepareStatement("SELECT * FROM dbo.Logins WHERE Username=? AND Password=?"); 
      s1.setString(1,user); 
      s1.setString(2, pass); 
      ResultSet rs = s1.executeQuery();   

      //int rowCount = rs.last() ? rs.getRow() : 0; //Number of rows 
      System.out.println("Name: " + user + "\nPass: " + pass); 

      if(rs.next()) 
       JOptionPane.showMessageDialog(null, "User Found"); 

      else{ 
       JOptionPane.showMessageDialog(null, "Error"); 
      } 
      con.close(); 
Verwandte Themen