elegante Lösung bei first gesucht

Status
Nicht offen für weitere Antworten.
M

M!cha

Gast
Ich such gerade für den folgenden Code eine elegante Lösung!

Code:
			Statement stmt = conn.createStatement();
			query = "SHOW COLUMNS FROM ab_namen";
			rs = stmt.executeQuery( query );

			System.out.println("Bitte ergänzen Sie folgene Daten!\n");
			
			while(rs.next()){
				i++;
			}
			data = new String[i];
			i = 0;
			
			rs.first();
			while(rs.next()){
					try {
						if(i == 0){rs.first();}
						System.out.print(rs.getString(1) + ":");
						data[i] = reader.readLine();
						i++; 
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}	
			}

Zum einen brauch ich i um die Größe des Arrays festlegen zu können.

Des weiteren verstehe ich nicht warum bei ersten while(rs.first) er wirklich vorne anfängt und wenn ich danach rs.first setzte er bei mir erst bei 2. element anfängt (deswegen das if(i==0))

Daten sind wieder die Feldnamen: Vorname, NAchname usw. Diese sollen nach eingabe des Useres in das Array geschreiben werden. (Vielllll Später dann in die Tabelle natürlich)

Danke für jegliche Hilfe,

M!icha
 
S

SlaterB

Gast
Was ist denn dein Ziel bei dem first()?
Ist das ResultSet nicht autmatisch am Anfang auf first()?
Wozu bei i==0 das aufrufen?
Zumal du bei i==0 diesen Befehl dann genausogut vor der Schleife ausführen könntest, da ist ja i==0.
Anderseits tuts du das bereits jetzt schon, also noch mal die Frage: welcher Sinn?

--------

Ansonsten: viel einfacher wird ein Durchlauf durch ein Result-Set nicht.
Da gibts nunmal immer eine while-Schleife und IOException abzufangen.

In deinem Fall ist das in zweierlei Hinsicht etwas unglücklich aufgebaut, so dass ich mal zwei allgemeine Tipps noch dazu abgebe:
Erstens kombinierst du den Datenbank-Zugriff mit etwas anderem, irgendwelche Programmlogik.
So eine Durchmischung ist selten günstig.
Pack die Datenlogik lieber in eine einzelne Operation und liefere ein String-Array oder so zurück, mit dem dann EINFACHER weitergearbeitet werden kann.

Insgesamt wirst du mehr Code haben und auch mehr Laufzeit-Arbeit da die Felder zweimal durchlaufen werden
(1. Durchlauf Resultset -> Array, 2. Durchlauf Array -> Anzeige)

Sowas ist aber zu vernachlässigen gegeüber den Vorteil, dass die einzelnen Code-Teile einfacher und modularer, leichter zu ändern, sind.

Zweitens solltest du es wahrscheinlich insbesondere vermeiden, ein Resultset über mehrere Sekunden/ Minuten zu durchlaufen und nebenbei auf Benutzereingaben zu warten!

Ich weiß nicht 100%ig, ob da nebenbei die Datenbank warten muss, aber wenn, dann wäre das ziemlich übel.
(Allgemein gesehen, in einfachen kleinen Programmen natürlich problemlos machbar)
 
M

M!cha

Gast
Also warum das if(i == 0){rs.first();} hab ich doch erklärt: wenn ich
Code:
while(rs.next()){ 
               try { 
                  if(i == 0){rs.first();} 
                  System.out.print(rs.getString(1) + ":"); 
                  data[i] = reader.readLine(); 
                  i++; 
               } catch (IOException e) { 
                  // TODO Auto-generated catch block 
                  e.printStackTrace(); 
               }    
         }
mache dann ist nach dem while(rs.netx()) der zeiger auf der 2. position. und das wollte ich wissen. Obwohl ich vor dem while rs.first() mache gibt mit ein test print "nachname" = 2. Wert aus. Eigentlich müsste doch "vorname" kommen.Deswegen das i==0. Dann kommt auch vorname..weil der zeiger richtig ist. Das is erstmal ein Problem.
 

KSG9|sebastian

Top Contributor
Du brauchst das ResultSet nicht zweimal durchlaufen. Speicher in der zweiten Schleife sämtliche Ergebnisse in ner List (ArrayList oder so) und caste dann

Code:
List l = new ArrayList();
while(rs.next()){
   l.add(reader.readLine());
}
data = (String[])l.toArray(new String[l.size()]);

Wozu ne Benutzereingabe beim Durchlaufen des ResultSets?
Würd das ganze so lösen:

1. Sämtliche Daten aus der DB in ein eigenes Objekt oder ne Collection/List überführen
2. ResultSet schließen
3. Benutzerabfragen durchführen

Edit:

Ach ja, das ResultSet steht fur -1, wenn du in der Schleife dann while(rs.next()) machst dann passt das, die Abfrage ob i==0 ist unnötig.

gruß
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Beste Lösung für User Erstellung in mongodb Datenbankprogrammierung 1
P Highlevel-Lösung für Speicherung von Baumstruktur mit unbekannter Tiefe Datenbankprogrammierung 1
Zrebna Empfehlung für ein kostenloses DB-Hosting gesucht Datenbankprogrammierung 6
P Datenbank Tool - besser als oracle SQL Developer gesucht mit effizinte Verbindungsverwaltung Datenbankprogrammierung 2
D SQL Statement gesucht... Datenbankprogrammierung 15
Streeber MySQL Funktion gesucht, die angibt, wie oft ein Wert auftritt Datenbankprogrammierung 1
Y MySQL Eclipselink Insert JSF Beispiel gesucht Datenbankprogrammierung 2
Z MySQL mysql Facharbeit: Tipps und Ideen gesucht Datenbankprogrammierung 5
T Hibernate DAO gute Tutorials/Bücher gesucht Datenbankprogrammierung 0
I MySQL Datenbank Tutorial gesucht Datenbankprogrammierung 2
S mySQL Manipulation über JavaServer Faces (Tutorial gesucht) Datenbankprogrammierung 10
I Anfänger-Tutorial für Hibernate gesucht Datenbankprogrammierung 3
Rudolf Serialisierungsspeicherort gesucht Datenbankprogrammierung 2
J Gesucht: Wörterbuch der verschiedenen SQL-Dialekte Datenbankprogrammierung 3
M Guter Link zum Thema ER-Modell und Relationships gesucht Datenbankprogrammierung 5
L MySql Befehlssatz gesucht. Datenbankprogrammierung 7
G Datenbank gesucht. Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben