Zum Inhalt springen

While Schleife / Return


Empfohlene Beiträge

Geschrieben

Hi Leute,

ich brauch eure Hilfe da ich absolut nicht mehr weiter komme.

Mein Problem ist eine Datenbankabfrage, die ich mit einer While schleife durchführe:



String sql = "SELECT * FROM ADRESSEN";

				try {

					ResultSet res = state.executeQuery(sql);

					String firmatext = null;

					while (res.next()){

						firmatext = res.getString("FIRMATEXT");

						System.out.println(firmatext);

						return firmatext;					

					}

				}catch (SQLException e) {

					System.out.println("Der Query ist Fehlerhaft");

				}

Mein Problem ist das er beim return die Schleife verlässt! Ohne dieses return wird mir alles was ich brauche in der Konsole ausgegeben. Jetz ist es halt so das dieses funktionieren soll, da in der GUI Klasse das hier wartet:

	knopf.addActionListener(new ActionListener(){


			@Override

			public void actionPerformed(ActionEvent e) {


				edit.append(o.ladeFirmenBez());

				edit.append("\n");


			}

		});

Doch leider wird wegen dem return nur eine Firmenbezeichnung ausgegeben...

Wäre froh wenn ihr mir helfen könntet, wie ich das anders lösen kann.

(Der Stil der Buttonabfrage soll jedoch so bleiben)

Gruß AJ

Geschrieben

Hallo!

Mein Problem ist das er beim return die Schleife verlässt!

Das ist auch die Aufgabe von return.

Ohne dieses return wird mir alles was ich brauche in der Konsole ausgegeben.

Dafür ist dein System.out.println.... verantwortlich.

Frank

Geschrieben

Hi,

ja genau das ist mein Problem.

Mein Ziel ist es das mein ActionListener immer den nächsten Datensatz übergeben bekommt und z.B. alle Kunden der Firma anzeigt.

Jedoch wird nur ein Kunde ausgegeben, wegen dem Return.

Wie kann ich das anstelln das ein Kunde nach dem andern an den ActionListener übergeben wird?

Gruß AJ

Geschrieben

Indem Du dir den Resultset merkst und nicht jedes mal beim Aufrufen der Methode eine Anfrage an die DB sendest. Denn sonst bekommst Du immer den ersten.

Und dann muss man sich noch den letzten zurück gelieferten Datensatzindex merken. Über eine Klassenvariable z. B. Und diese jedes mal um eins erhöhen und den entsprechenden Kunde dann als Rückgabewert an die aufrufende Klasse übergeben.

Frank

Geschrieben

Hm, wie meinst du das genau?

Ich hatte mir auch überlegt das ergebnis in ein String array zu schreiben, aber das wäre bei vielen Datensätzen einfach zuviel...

Wie verhält sich deins bei großem Datenaufkommen?

irgendwie ist mir noch kein Licht aufgegangen :)

Danke!

Geschrieben

Das Datenvolumen sollte in beiden Fällen etwa gleich sein + den Verwaltungsoverhaed.

Bei deiner Idee wird der Resultset ausgelesen und dann in ein Array geschrieben und anschließend wird durch den Garbagecollector das Resultset aufgeräumt.

Bei meinem Vorschlag behälst Du die ganze Zeit den Resultset und fragst diesen nach einander ab.

Frank

Geschrieben
Warum nicht einfach edit an ladeFirmenBez übergeben?

Warum das?

ladeFirmenBez gibt ja den Firmenname wieder, und mit edit.append hänge ich diese dann in meine TextArea.

Oder hab ich dich falsch verstanden?

Bin kurz vorm aufgeben...nichtmal meine gedachte Lösung mit nem Array krieg ich hin...

Geschrieben
Warum das?
Weil es das einfachste wäre?

Anstatt dir dabei einen abzubrechen, wie du eine große Menge Daten aus einer Methode herausbekommst, übergib doch einfach die einzige Referenzvariable, die mit den Daten etwas tut, in diese Methode hinein.

Geschrieben

Ah, ich glaub jetz weiss ich was du meinst!

Dann mach für ladeFirmenBez n konstrukter der n JTextArea erwartet.

Dann füge ich die daten, die ich von der DB bekomme, da ein und als return gibst dann wieder n JTextArea?

Versteh ich das richtig so?

Geschrieben

YES! Es geht so!!

Danke!!!

Also prinzipiell siehts jetz so aus:

knopf.addActionListener(new ActionListener(){


			@Override

			public void actionPerformed(ActionEvent e) {


				o.ladeFirmenBez(edit);				

			}

		});


class Ohr{


		public JTextArea ladeFirmenBez(JTextArea area) {


				//DB Verbindung Herstellen ...



				String sql = "SELECT FIRMATEXT FROM ADRESSEN";// WHERE FIRMATEXT = 'Ingenieurbüro Plant'";

				try {


					ResultSet res = state.executeQuery(sql);

					while (res.next()) {


					String firmatext = res.getString("FIRMATEXT");

						area.append(firmatext);

						area.append("\n");

					}




				}catch (SQLException e) {

					System.out.println("Der Query ist Fehlerhaft");

				}

				return area;


			}


Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...