Daten aus DB lesen

sos

Mitglied
Beim klick auf anmelden soll der eingegebene Text mit dem Resultset verglichen werden, und anhand dessen soll eine Meldung erfolgen ob die Person vorhanden ist oder nicht
Ich habe das hier versucht : if(txtVorname.getText()==rs.getString(1)){ leider ohne erfolg

Java:
  jAnmelden = new JButton("Anmelden");
	        jAnmelden.addActionListener(new ActionListener(){
	        	public void actionPerformed(ActionEvent evt){
	        		 Connection conn = null ;
	        		 try{ 
	        		        //Klasse registrieren 
	        		    	Class.forName("com.mysql.jdbc.Driver");
	        		    	//Verbindung öffnen
	        		    	conn = DriverManager.getConnection("jdbc:mysql://localhost/dbdemo2","root","");
	        		    	Statement stmt = conn.createStatement();
	        				ResultSet rs = stmt.executeQuery("Select vorname, nachname from personen" )	;	
	        			   	
	        				while(rs.next()){
	        					if(txtVorname.getText()==rs.getString(1)){
	        						System.out.println("Person vorhanden");
	        					}else{
	        						System.out.println("Person existiert nicht");
	        					}
	        				}
	        				rs.close();
	        				stmt.close();
	        				conn.close();
	        			
	        		    	
	        		    }catch(ClassNotFoundException e){
	        		    	System.out.println(e.toString());
	        		} catch (SQLException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} 
	        			
	        		
	        	}
	        });

als Ausgabe bekomme ich " Person existiert nicht " und das mehrmals, kann mir bitte jemand erklären was ich da falsch mache?
mfg
 
Ein typischer Anfängerfehler.

Du solltest wissen, dass in Java Objektvariablen nicht direkt die Objekte halten, sondern lediglich Referenzen auf diese.
Wenn du nun zwei Objekte mit == vergleichst, dann überprüfst du nicht, ob die Objekte identisch sind, sondern ob die beiden Referenzen identisch sind. Also ob beide Variablen auf ein und das selbe Objekt verweisen.

Willst du prüfen ob zwei Objekte identisch sind musst du die Funktion equals verwenden die jedes Objekt besitzt. Konkret für deinen Fall müsste der Vergleich so aussehen:

Java:
if(txtVorname.getText().equals(rs.getString(1)))
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: sos
Nochmal was dazu gelernt ..vielen Dank.
Problem bei der Sache dass ich immer noch "Person existiert nicht" als Ausgabe bekomme obwohl das nicht stimmt , nämlich ich gebe den vornamen von jemandem der in der Tabelle existiert,und ...if(txtVorname.getText().equals(rs.getString(1))) scheint nicht die lösung zu sein,denn ich glaube der Programm vergleicht den eingegebenen vornamen mit den gesamt vornamen in der Tabelle, ausserdem findet ihr ok dass ich soviel code in einem klick event mache oder geht oder sollte das anders gehen?

bitte bitte um hilfe
 
OUCH ... da sind gleich mehrere Anfängerfehler drin

1) I/O-Operationen NIE im EDT laufen lassen sondern seperaten Thread erstellen und darin dein Zugriff ablaufen lassen.

2) DB-Verbindung nur während der Aktion aufbauen frisst zu viele Resourcen. Du solltest beim Start deiner App bereits die Verbindung herstellen und beim Beenden auch wieder sauber trennen.

3) Zeile 4 : Connection-Objekt außerhalb von try-catch obwohl nur als lokale Variable nötig
Bei diesem Stück ist es Jacke wie Hose ob du nun das Connection-Objekt vor das try schreibst oder darein. Du verwendest es eh nur als lokale Variable.

4) Zeile 7 : manuelles Laden eines JDBC-Drivers
Den Fehler machen vieler Anfänger immer wieder : in aktuellen Java-Versionen einen JDBC-Driver manuell nach laden. Das ist völlig unnötig da seit Java 1.4.2 der DriverManager jeden zum Start bekannten Driver automatisch läd.
Und auch wenn du über URLClassLoader arbeitest kannst du externe Driver so nicht laden. Ich habe dafür im Grundlagen-Forum mal einen DummyDriver gepostet der super funktioniert.

5) Zeile 9 : Datenbank-URL
Im Normalfall sieht eine Datenbank-URL so aus
jdbc:PROTOKOLL://SERVER:PORT/DATENBANK
Natürlich gibt es auch Datenbanken die davon abweichen *z.B. ODBC oder SQLite*.
Bei vielen Drivern reicht es aber aus nur den SERVER anzugeben wenn die Datenbank auf dem Standardport läuft *für MySQL : 3306*. Auch sollte man die wenn möglich die IP verwenden anstatt des Hostnamens ... also 127.0.0.1 anstatt von localhost.

6) Zeile 11 : dein Query
Man sollte sich schon an die Konventionen halten. Denen zufolge sind Befehle immer UPPERCASE und Datenbank-, Tabellen- und Feldnamen lowercase zu schreiben. Auch ist die Quotierung wichtig. Für MySQL wird für Datenbank-, Tabellen- und Feldnamen ` ` verwendet und für Values *also Feld-Inhalte* ' '.
Dein Query müsste also richtigerweise so aussehen
Code:
SELECT `vorname`, `nachname` FROM `personen`

7) Die while-Schleife
Natürlich erhälts du so immer ALLE Werte. Und folglich auch immer "Person nicht gefunden" als letztes wenn du NICHT den letzten Datensatz hast.
Hier gibt es zwei Ansätze
7a) Im Query den WHERE - Befehl nutzen ... so erhälts du nur die Zeilen auf die das in der WHERE - Klausel angegeben Suchkreterium zutrifft
7b) Vor die while ein boolean als Flag erzeugen und diesen bei Fund auf true setzen.
Dazu ein kurzes Beispiel
Java:
boolean flag=false;
while(rs.next())
{
	if(rs.getString(1).equals(txtVorname.getText())
		flag=true;
}

So weist du zwar nicht wie viele Datensätze vorhanden sind wenn es Treffer gibt ... aber du kannst damit sicher unterscheiden ob es überhaupt welche gibt oder nicht.


PS : als kleine Anmerkung : bitte halte dich in deinen Posts an die deutsche Rechtschreibung.
 
Zurück