Grundsätzliche Frage zu return Types in Methoden

JavaNoob1988

Mitglied
Guten Tag Helfer!

Ich habe nur eine kurze Verständnisfrage zu folgender Methode (es geht um return-Werte):

Java:
public String retrieveDataFromDB() throws SQLException{
		myStmt = myConn.createStatement();
		
		myRs = myStmt.executeQuery("Select * from hospitalstuff where employed = false");
		
		while(myRs.next()){
			return myRs.getString("first_name") + " , " + myRs.getString("second_name");

		}
		//return hier würde Problem beheben
	}

Es wird hier ein Fehler angezeigt, da mein "return" innerhalb der while-Schleife außerhalb des Scopes liegt (soweit richtig oder?).

Würde ich das auskommentierte "return" einfügen, wäre der Fehler behoben (da innerhalb des Scopes).

Meine Frage (denn ich möchte die Verwendung von System.out.println grundsätzlich vermeiden bzw. reduzieren)
Wie ist es möglich, dass ich innerhalb der Schleife etwas mit return zurückgeben kann?
Oder anders gefragt:
Was gibt es außer System.out.println noch für übliche Techniken, Ergebnisse auf der Konsole auszugeben?

Hoffe meine Frage kommt halbwegs verständlich rüber.

Danke schonmal für eure Zeit!

Gruß
 
Das Problem ist nicht der Scope, sondern die Bedingung der Schleife.
Wenn nach der Abfrage myRs leer ist, liefert myRs.next() false zurück, d.h. die Schleife wird nie betreten und somit auch nie irgendein return erreicht. Platzierst du das return hingegen außerhalb der Schleife, gibt es in jedem Fall einen Rückgabewert, egal, ob die Schleife durchlaufen wurde oder nicht.
 
Wenn du die Daten nur auf der Konsole haben möchtest, reicht println.

Wenn du aber damit noch weiter arbeiten möchtest, solltest du die Daten in einer Liste o.ä speichern. Ich würde mir dazu ein Objekt "Person" anlegen und diese Objekte mit den Daten befüllen und anschließend in einer Liste speichern:

Java:
public List<Person> retrieveDataFromDB() throws SQLException{
		
		List<Person> persons = new ArrayList<>();
		
		myStmt = myConn.createStatement();
 
		myRs = myStmt.executeQuery("Select * from hospitalstuff where employed = false");
 
		while(myRs.next()){
		
			String firstName = myRs.getString("first_name");
			String secondName = myRs.getString("second_name")
		
			persons.add(new Person(firstName, secondName)); 
		}
		return persons;
	}
	
class Person{

	String firstName;
	String secondName;
	
	public Person(String firstName, String secondName){
		this.firstName = firstName;
		this.secondName = secondName;
	}
}
 
Danke, sehr hilfreicher Code!

Ja, ich möchte so realitätsnah wie möglich programmieren....oder sagen wir so realitätsnah wie möglich ohne zu großen Mehraufwand betreiben zu müssen.

Und ich glaube println / printf Ausgaben werden in Business-Software nicht so häufig benötigt / verwendet.....wie siehst du das?
 
Die Frage ist für mich n bisschen Glatteis, da ich selbst noch Azubi bin und noch nicht so viele "echte" Projekte kenne.

Es kommt meines Erachtens auf den Zusammenhang an. In Unit-Tests werden Konsolenausgabe bei uns definitiv nicht gern gesehen, die müssen ohne manuelle Kontrolle funktionieren. Zu viele Konsolenausgaben würden es nur unübersichtlich gestalten.

Hingegen finde ich Statusmeldungen, wie z.B. "Datenbank wurde geladen." oder "Server gestartet." legitim und kenne es auch von einigen Frameworks so.
Wobei sich für die Statusmeldungen auch Loggen (d.h. du schreibst den ganzen Spaß inklusive Zeitstempel, Klasse, Level ("Info", "Warnung", "Error", etc.) in ne eigene Datei) sehr gut eignet.
 
Ja, das wollte ich sowieso mal anfangen.

Loggen mit Log4J oder vergleichbarem.

Hätte auch erst eine Ausbildung anfangen sollen. Im Studium lernt man von allem n bisschen was und nichts wirklich tiefgreifend....d.h. wenn man halbwegs Ahnung haben will, muss man selbst viel zu Hause machen. :/
 

Neue Themen


Zurück
Oben