2011-01-03 25 views
0

Ich brauche Hilfe mit dem folgenden Fehler. Unten ist die Methode retrievePassword(). Ich habe es so programmiert, dass ich beim Aufruf des Clickid auch alle anderen Daten abrufen kann."Spalte nicht gefunden" Fehler?

public boolean retrievePassword() { 
    // declare local variables 
    boolean success = false; 
    ResultSet rs = null; 
    DBController db = new DBController(); 

    // step 1 of using DBController, passing data source name setup during last practical 
    db.setUp("myDatabase"); 

    // declare the SQL 
    String dbQuery = "SELECT Clickid FROM PROFILE WHERE Clickid = '" + clickId + "'" ; 


    // step 2 of using DBCcontroller, for retrieve SQL use readRequest method 
    rs = db.readRequest(dbQuery); 
    try{ 
    if (rs.next()){ 
    firstName = rs.getString("Firstname"); 
    lastName = rs.getString("LastName"); 
      password = rs.getString("Password"); 
      email = rs.getString("Email"); 

      success = true;  
    } 
    } 
    catch (Exception e) { 
    e.printStackTrace(); 
    } 
    db.terminate(); 
    return success; 
} 

Ich habe überprüft und alle Spaltennamen sind korrekt. Ich denke, das Problem liegt entweder mit dem obigen Verfahren oder die Instanziierung unter

String first = jTextFieldFirst.getText(); 
String email = jTextFieldEmail.getText(); 
Profile p2 = new Profile(jTextFieldId.getText()); 
p2.retrievePassword(); 
String firstName = p2.getFirstName(); 
String email2 = p2.getEmail(); 
if(email == email2 && first == firstName) 
JOptionPane.showMessageDialog(null, "Your Password is "+p2.getPassword(), 
     "Retrieve Password",JOptionPane.INFORMATION_MESSAGE); 
else 
JOptionPane.showMessageDialog(null, "Some information you entered is incorrect", "Retrieve Password",JOptionPane.INFORMATION_MESSAGE); 

Als ich in den entsprechenden Feldern erstellt und eingegeben haben, wird der Fehler „Spalte nicht gefunden“ hält erscheinen. Ich habe sichergestellt, dass die Spaltennamen und Daten korrekt sind, aber ich habe mehr Spalten, die ich nicht in die Methode retrievePassword() aufgenommen habe. Ich bin mir sicher, dass es entweder diese beiden Methoden ist, die das Problem zu sein scheint, aber ich kann es nicht lösen, egal wie ich es mache. Wird mir eine gute Seele helfen? Bitte?

+2

Sie sollten wahrscheinlich nicht einmal eine Funktion namens "Passwort abrufen", da die Datenbank sollte habe das Passwort nie an erster Stelle gespeichert. Es sollte ein irreversibler Hash des Passworts gespeichert werden. –

+0

In Bezug auf diesen Teil bin ich immer noch nicht wirklich gut mit den Dingen außer Datenbank. Also habe ich dieses Mal die primitivste Methode benutzt. –

Antwort

1

Sie nur die Clickid-Spalte auswählen. versuchen Sie Wählen Sie * aus Profil oder besser verwenden Sie eine Spaltenliste.

1

Das ist richtig, Sie müssen Vorname, Nachname, E-Mail und Passwort in Ihrer Select-Abfrage abrufen, wenn Sie sie aus der Ergebnismenge verwenden werden.

5

Es sieht so aus, als ob Ihre Abfrage nur das ClickId-Feld auswählt, aber in Ihrem Ergebnis versuchen Sie, andere Felder zu erhalten. Verwenden Sie SELECT * oder SELECT mit den Feldern, die Sie stattdessen benötigen.

+0

Bitte, kein 'Select *'. Dies ist sehr fehleranfällig, wenn jemand eines Tages entscheidet, die Struktur des Tisches etwas zu ändern. Die Hölle wird sich brechen. Wählen Sie nur, was Sie brauchen. Nicht mehr, nicht weniger. – darioo

+0

Ja, du hast recht, es ist besser, nur auszuwählen, was du brauchst, ich erwähnte es, falls er nicht wüsste, wie man alles auswählt. –

+0

@darioo: Ich bin mir nicht sicher, wie "die Hölle losgehen würde", wenn Sie nicht die Spaltennamen änderten. In diesem Fall würde auch eine explizite SELECT-Klausel fehlschlagen. Denken Sie, dass es besser ist, dass die Ausführung fehlschlägt als später, wenn Sie mit der Ergebnismenge umgehen? Oder glauben Sie fälschlicherweise, dass der OP/jeder mit der RS ​​über den Spaltenindex interagiert? –

0

Hey alle, ich habe getan, was Sie alle gesagt und alle Spalten ausgewählt und es war ein Erfolg. Aber wenn ich die Methode unten implementiere

String first = jTextFieldFirst.getText(); 
String email = jTextFieldEmail.getText(); 
Profile p2 = new Profile(jTextFieldId.getText()); 
p2.retrievePassword(); 
String firstName = p2.getFirstName(); 
String email2 = p2.getEmail(); 

if(email == email2 && first == firstName) 
JOptionPane.showMessageDialog(null, "Your Password is "+p2.getPassword(), 
     "Retrieve Password",JOptionPane.INFORMATION_MESSAGE); 
else 
JOptionPane.showMessageDialog(null, "Some information you entered is incorrect", "Retrieve Password",JOptionPane.INFORMATION_MESSAGE); 

Es zeigt weiterhin die jOptionPane von der else-Schleife. Was ich brauche, ist eigentlich, die Schleife zu bekommen, wenn ich das richtige Feld eingab = (Danke für Ihre Hilfe =)