Java Anmeldung SQL Exception

Andreasb.

Lt. Junior Grade
Registriert
Jan. 2011
Beiträge
271
Hallo,

ich habe ein Problem mit einem Java Programm.
Ich möchte, dass sich ein Nutzer über eine GUI mit Personalnummer, Vorname, Nachname und Passwort anmeldet.
In der GUI ist das folgende Methode:

Code:
    steuerung.anmelden(Integer.parseInt(personalnummerBox.getText()), vorNameBox.getText(), nachNameBox.getText(), passWortBox.getText());

Die Klassen "Steuerung" ruft eine Methode der Klasse "SqlOperator" auf, die die eingegebenen Daten mit den Daten aus einer Datenbank vergleicht:

Code:
		public void anmelden(int pPersonalnummer, String pVorname, String pNachname, String pPasswort) {
			boolean anmeldungsStatus = sqlop.anmelden(pPersonalnummer, pVorname, pNachname, pPasswort);
			if(anmeldungsStatus = true){
				sqlop.mitarbeiterAnmelden(pPersonalnummer);	
			} else {
				System.out.println("Fehler bei der Anmeldung!");
			}
}

Methode anmelden in der Klasse SqlOperator:

Code:
	public boolean anmelden(int pPersonalnummer, String pVorname, String pNachname, String pPasswort){
		verbindungAufbauen();
		int personalnummer = -1;
		String vorname = null;
		String nachname = null;
		String passwort = null;
		try {
		    ResultSet datenmenge2;
		    datenmenge2 = befehl.executeQuery(
		    "SELECT * FROM Mitarbeiter Where personalnummer = 'pPersonalnummer'");
		    personalnummer = datenmenge2.getInt(personalnummer);
		    vorname = datenmenge2.getString("vorname");
		    nachname = datenmenge2.getString("nachname");
		    passwort = datenmenge2.getString("passwort");
			}
		  catch (Exception e) {
		  e.printStackTrace();
		  }
		
		if(pVorname.equals(vorname) && pNachname.equals(nachname) && steuerung.md5(pPasswort).equals(passwort) && pPersonalnummer == personalnummer){
			return true;
		} else {
			return false;
		}
	}

Die Methode mitarbeiterAnmelden() der Klasse "sqlOperator" soll, falls die Anmeldung erfolgreich war ein Objekt der Klasse Mitarbeiter erzeugen:

Code:
	public void mitarbeiterAnmelden(int pPersonalnummer){
		verbindungAufbauen();
		int personalnummer;
		String vorname;
		String nachname;
		boolean rEinfuegen;
		boolean rEntfernen;
		boolean rBearbeiten;
		boolean rGrundSehen;
		
		try {
		    ResultSet datenmenge;
		    datenmenge = befehl.executeQuery(
		    "SELECT * FROM Mitarbeiter Where personalnummer = 'pPersonalnummer'");
		    personalnummer = datenmenge.getInt("personalnummer");
		    vorname = datenmenge.getString("vorname");
		    nachname = datenmenge.getString("nachname");
		    rEinfuegen = datenmenge.getBoolean("rEinfuegen");
		    rEntfernen = datenmenge.getBoolean("rEntfernen");
		    rBearbeiten = datenmenge.getBoolean("rBearbeiten");
		    rGrundSehen = datenmenge.getBoolean("rGrundSehen");
			Mitarbeiter m2Neu = new Mitarbeiter(personalnummer, vorname, nachname, rEinfuegen, rEntfernen, rBearbeiten, rGrundSehen);

			}
		  catch (Exception e) {
		  e.printStackTrace();
		  }
				
	}

Wenn ich die Methoden über die GUI aufrufe, bekomme ich immer eine SQLException:

java.sql.SQLException: Illegal operation on empty result set.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:854)
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2709)
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2850)
at SqlOperator.anmelden(SqlOperator.java:161)
at Steuerung.anmelden(Steuerung.java:30)
at Surface.anmeldenButton_ActionPerformed(Surface.java:91)

Ich hoffe mir kann jemand helfen und sagen woran das liegt.
Danke schonmal!
 
Auf den ersten Blick fällt mir dieser Fehler auf: if(anmeldungsStatus = true)
Vergleichsoperationen wie unten mit ==.

P.S.: Noch simpler wenn du einen Bool verwendest: if(anmeldungsStatus)
P.S.S: Die Exception an sich könnte von dem fehlenden Semikolon am Ende des Querystrings verursacht werden (wodurch möglicherweise ein leeres ResultSet-Objekt zurückgegeben wird).

Zum Debuggen könntest du die Abfrage noch mit einer statischen Personalnummer durchführen. Das könnte die Fehlersuche vereinfachen.
 
Zuletzt bearbeitet:
Danke für die Antwort!

Es gab anscheinend mehrere Fehler:
einmal das was du gesagt hast und dann haben noch die ` bei personalnummer gefehlt.
 
Zuletzt bearbeitet:
Zurück
Oben