Listen / Datenstrukturen und ein blutiger Anfänger

Status
Nicht offen für weitere Antworten.
D

david2009

Gast
schönen guten morgen zeitegenossen ^^

ich möchte aus einer Datenbank per Resultset Daten holen... da dies wunderbar mit einem Datensatz klappt versuche ich es mit mehreren Datensätzen.... da die anzahl der datensätze zur laufzeit verändert werden, ist ein normaler array schlecht, da er eine Feste größe haben muss.

So ich habe einmal den Typ Vector gesehen, eine Art dynamischer Array, der zur laufzeit verändert werden kann...dann gibts da noch die ArrayList, die List, eine Hashmap etc

welcher Typ ist für Datensätze am sinnvollsten?

hier noch der Code wie ich vorhabe die DB auszulesen:

Code:
public String showEntries() {
		connectDB();

		// SQL Statement
		String sql = "SELECT `username`, `post` FROM `box` ORDER BY `ID` DESC";

		String username;
//		Vector<String> username  ;
		String[] post = null;
		
		try {

			ResultSet res = stmt.executeQuery(sql);

			int i = 0;
			while (res.next()) {

				i++;
				
				res.getString("username");
//				post[i] = res.getString("post");
				

			}

			res.close();
			stmt.close();
			connection.close();

		} catch (SQLException e) {
			System.out.println("Fehler beim Query");
			e.printStackTrace();
		}

		return "";
	}
 

Landei

Top Contributor
1) Vector und Hashtable sind Relikte aus der Vor-Collection-Ära. Sie wurden zwar an das Collection-Framework angepaßt, sind aber nicht so performant wie die neueren Alternativen
2) Von den Listen ist ArrayList meistens eine gute Wahl. Nur wenn du häufig am Anfang oder Ende löschen oder einfügen musst, ist LinkedList besser.
3) Wenn du keine Duplikate haben willst, ist ein Set die richtige Wahl. HashSet ist performant, bei TreeSet gibts gratis eine Sortierung
4) Wenn du Objekte über einen Schlüssel (eine ID, ein Name, eine Personalnummer oder sowas in der Art) referenzieren willst, brauchst du eine Map. Wieder ist HashMap die performante Alternative, während TreeMap nach Schlüsseln sortierst.

In deinem Beispiel liest du zwei Werte aus der Tabelle. Jetzt hast du fünf Möglichkeiten:
1) Du hältst die Werte in zwei Listen. Damit ist umständlich zu arbeiten, und man muss beim Suchen, Löschen, Anfügen aufpassen, dass man immer schön synchron bleibt
2) Du speicherst String-Arrays, wobei array[0] der Name und array[1] Post ist. Auch etwas umständlich, und funktioniert nur, solange du einen einheitlichen Datentyp (hier String) hast.
3) Du machst dir kleine Objekte, die beide Informationen halten. Also z.B. ein User-Objekt mit den Feldern name und post. Diese Lösung ist einfach zu bedienen und später leicht zu erweitern
4) Wenn du nur über die Namen auf post zugreifen willst, könntest du ein Map verwenden, mit den Namen als Schlüssel, und Post als den Werten. Dazu müssen die Namen natürlich eindeutig sein
5) Lösung 3) und 4) lässt sich auch kombinieren, also User-Objekte erstellen und dann in eine Map packen, so dass man sie über name findet

Wenn du mir sagst, wofür du deine Werte am Ende brauchst, kann ich auch mit Code nachhelfen :)
 
D

david2009

Gast
wow coole erklärung :)

danke euch :)

also ich schreibe eine Art Shoutbox , in der html/jsp datei will ich die methode showEntries aufrufen und die Liste, welche die Methode zurückliefert, mit foreach durchlaufen...

in den html quelltext bette ich einen JSP Ausdruck ein (für den dynamisch generierten Usernamen und Post)
 
D

david2009

Gast
meine vorläufige Methode:

Code:
                public ArrayList<String> showEntries() {
		connectDB();

		// SQL Statement
		String sql = "SELECT `username`, `post` FROM `guestbook` ORDER BY `ID` DESC";

		ArrayList<String> username = new ArrayList<String>();
		ArrayList<String> post = new ArrayList<String>();
//		Vector<String> username  ;
		
		
		
		
		try {

			ResultSet res = stmt.executeQuery(sql);

			
			while (res.next()) {

				
				
				username.add( res.getString("username")  );
				post.add( 	res.getString("post")  );
				

			}

			res.close();
			stmt.close();
			connection.close();

		} catch (SQLException e) {
			System.out.println("Fehler beim Query");
			e.printStackTrace();
		}
		
		

		return username ;
	}
 
D

david2009

Gast
ok ich habs hingekriegt beide spalten in zwei listen zu packen und die auszugeben,
hab mir dann noch eine Klasse shoutbox erstellt in der ich die beiden Listen als Member speichere und über Methoden (addUsername(String s) und addPost(String s) ) die Liste fülle und auslese

hier mein code:

Code:
package db;

import java.util.ArrayList;

/**
 * 
 * 
 * Zusammenfassung des usernamen und Text Eintrags als ein Datentyp
 */
public class Shoutbox {
	
		private ArrayList<String> mUsername = new ArrayList<String>();
		private ArrayList<String> mPost = new ArrayList<String>();
		
		
		//###################################################################
		public ArrayList<String> getUsername() {
			return mUsername;
		}
		public void setUsername(ArrayList<String> username) {
			mUsername = username;
		}
		public ArrayList<String> getPost() {
			return mPost;
		}
		public void setPost(ArrayList<String> post) {
			mPost = post;
		}
		
		//####################################################################
		
		/**
		 * fügt neue Daten zur Liste (vom Typ String)
		 */
		public void addUsername(String s){
			mUsername.add(s);
		}
		public void addPost(String s){
			mPost.add(s);
		}
	
}

und meine Datenbankmethode:

Code:
	public Shoutbox showEntries() {
		connectDB();
		
		//Objekt Shoutbox anlegen um die beiden Listen abzuspeichern
		Shoutbox shoutbox = new Shoutbox();

		// SQL Statement
		String sql = "SELECT `username`, `post` FROM `guestbook` ORDER BY `ID` DESC";

//		ArrayList<String> username = new ArrayList<String>();
//		ArrayList<String> post = new ArrayList<String>();

		
		
		
		
		try {

			ResultSet res = stmt.executeQuery(sql);

			
			while (res.next()) {

				
				shoutbox.addUsername( res.getString("username") );
				shoutbox.addPost( res.getString("post") );
				
				

			}

			res.close();
			stmt.close();
			connection.close();

		} catch (SQLException e) {
			System.out.println("Fehler beim Query");
			e.printStackTrace();
		}
		
		

		return shoutbox ;
	}

und iterieren tu ich so:

Code:
DBConnect dbc = new DBConnect();
Shoutbox sbox = dbc.showEntries();
	
	for( int i=0; i < sbox.getUsername().size(); i++ ){

       System.out.println (sbox.getUsername().get(i) );
       System.out.println( sbox.getPost().get(i) );

       }

wa hält ihr davon :) ?
 

ARadauer

Top Contributor
gefällt mir nicht

Code:
/** 
* 
* 
* Zusammenfassung des usernamen und Text Eintrags als ein Datentyp 
*/ 
public class Shoutbox { 
    
      private ArrayList<String> mUsername = new ArrayList<String>(); 
      private ArrayList<String> mPost = new ArrayList<String>(); 
       
       
      //################################################################### 
      public ArrayList<String> getUsername() { 
         return mUsername; 
      } 
      public void setUsername(ArrayList<String> username) { 
         mUsername = username; 
      } 
      public ArrayList<String> getPost() { 
         return mPost; 
      } 
      public void setPost(ArrayList<String> post) { 
         mPost = post; 
      } 
       
      //#################################################################### 
       
      /** 
       * fügt neue Daten zur Liste (vom Typ String) 
       */ 
      public void addUsername(String s){ 
         mUsername.add(s); 
      } 
      public void addPost(String s){ 
         mPost.add(s); 
      } 
    
}
ich finde fachlich gehört, ein User direkt zu seinem Post... ich würde das in einem objekt zusammen fassen...

Code:
package main.java;

public class Post {
	private String message;
	private String user;
		
	public Post(String user, String message) {
		this.user = user;
		this.message = message;
	}
	
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	public String getUser() {
		return user;
	}
	public void setUser(String user) {
		this.user = user;
	}	
}

ok klar funktioniert deine variante, aber stell dir vor du arbeitest in einem größeren team und irgendwer verwendet in zwei jahren deine shoutbox klasse... der macht vielleicht ein
shoutbox.addUsername ohne shoutbox.addPost, dann funktioniert das nicht mehr...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Zwei Listen vergleichen Allgemeine Java-Themen 7
M doppelt verkettete Listen Allgemeine Java-Themen 2
L Listen Allgemeine Java-Themen 3
F Verständnisprobleme Aufgabenstellung Aktionsobjekte und generische Listen Allgemeine Java-Themen 1
E Listen in Java aneinanderfügen, subtrahieeren usw. Allgemeine Java-Themen 14
C Fehler beim Debuggen von Listen Allgemeine Java-Themen 4
J Mit Referenzen verkettet Listen. Allgemeine Java-Themen 9
S Intressante Benchmark-Ergebnisse mit Listen. Weiss jemand wie man diese erklaeren kann? Allgemeine Java-Themen 15
D Best Practice Die niedrigste Differenz zwischen zwei Listen ermitteln. Allgemeine Java-Themen 10
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
P Listen sortieren Allgemeine Java-Themen 1
RalleYTN Collections Verständnisfrage zu Objektreferenzen in Listen Allgemeine Java-Themen 5
C Listen Allgemeine Java-Themen 1
M liste von listen anders ausgeben Allgemeine Java-Themen 1
W Sortierte Listen - Methode suchen Allgemeine Java-Themen 17
W Sortierte Listen mit Polymorphismus Allgemeine Java-Themen 6
J Rekursion oder Iteration - verkettete Listen Allgemeine Java-Themen 8
S Permutation und Listen Allgemeine Java-Themen 2
P Doppeltverkettete Listen + Text Allgemeine Java-Themen 5
A Java Projekt (Daten Eingeben, Speichern und in Listen Ausgeben) Allgemeine Java-Themen 6
F JAXB / Listen durchlaufen Allgemeine Java-Themen 17
T Drucken von variabel langen Listen (es kommen nur leere Seiten raus) Allgemeine Java-Themen 2
F Vergleich zweier Listen Allgemeine Java-Themen 4
T Synchronisation von Listen bei Zugriffen durch mehrere Prozesse Allgemeine Java-Themen 15
D variabler Listen name Allgemeine Java-Themen 3
V Drucken von Listen Allgemeine Java-Themen 6
S Doppelte Werte in Listen,Vectoren etc suchen Allgemeine Java-Themen 2
L verkettete Listen oder Arrays + Indexlisten effizienter? Allgemeine Java-Themen 3
M Addieren von Listen Allgemeine Java-Themen 2
F Objekte oder besser ID in Listen speichern? Allgemeine Java-Themen 2
S Mehrere Listen ineinander verschachteln Allgemeine Java-Themen 22
S Alle Elemente von zwei Listen vergleichen Allgemeine Java-Themen 10
R Objektsynchronisierung zweier Listen?!?! Allgemeine Java-Themen 2
H Listen Allgemeine Java-Themen 5
G Datenstruktur: LISTEN Allgemeine Java-Themen 7
J Verschachtelte ListIteratoren um in zwei Listen hin und herzugehen Allgemeine Java-Themen 5
C Problem Methoden, Klassen, Listen Allgemeine Java-Themen 27
K Listen,Bäume,Mengen Allgemeine Java-Themen 3
S Hinzufügen von Elementen zu Listen Allgemeine Java-Themen 4
A zwei listen vergleichen und unterschiede anzeigen Allgemeine Java-Themen 3
J Zwei sortierte Listen zusammenfassen Allgemeine Java-Themen 8
T Problem mit Listen Allgemeine Java-Themen 8
B binarysearch bei listen mit klassen Allgemeine Java-Themen 4
F Problem mit Java Listen Allgemeine Java-Themen 4
D Listen von Generischen Typen inkl. Vererbung Allgemeine Java-Themen 2
C Listen in Java. Anehängter Code nicht ganz klar Allgemeine Java-Themen 19
L Doppelt Verkettete Listen Allgemeine Java-Themen 6
E Verkettete Listen Allgemeine Java-Themen 5
M objekt mit listen Allgemeine Java-Themen 5
G Domainen crawlen & Domainnamen listen -> LANGSAM! Allgemeine Java-Themen 19
M Listen Problem! Allgemeine Java-Themen 26
M doppelt verkettete Listen? Allgemeine Java-Themen 5
M Serialisierte listen ausgeben? Allgemeine Java-Themen 6
F 2 Varianten für synchronisierten Zugriff auf Listen Allgemeine Java-Themen 2
L Welche Collection ist die richtige ? Listen mergen Allgemeine Java-Themen 3
G Synchronisierte Listen. ein Graus Allgemeine Java-Themen 4
M Verknüpfung von Listen Allgemeine Java-Themen 3
S Frage zu ArrayList mit Listen Allgemeine Java-Themen 8
S Fragen zu 4 speziellen Listen Allgemeine Java-Themen 4
D Listen Allgemeine Java-Themen 4
M sortierte listen Allgemeine Java-Themen 5
I Doppelt verkette Listen Allgemeine Java-Themen 2
D Algorithmen und Datenstrukturen in Java Allgemeine Java-Themen 40
S Algorithmen und Datenstrukturen Allgemeine Java-Themen 1
A Datenstrukturen Allgemeine Java-Themen 2
M Algorithmen und Datenstrukturen Allgemeine Java-Themen 6
A Datenstrukturen richtig anlegen/laufzeitanalyse Allgemeine Java-Themen 10
N Datenstrukturen an neue Klasse übergeben Allgemeine Java-Themen 16
M Aufgabenstellung unklar (Vorlesung Algorithmen und Datenstrukturen..) Allgemeine Java-Themen 2
D Multiple Datenstrukturen erstellen Allgemeine Java-Themen 4
D Design: on-the-fly-Parsing + Datenstrukturen Allgemeine Java-Themen 5
J vergleich zweier datenstrukturen Allgemeine Java-Themen 6
M Effiziente Datenstrukturen Allgemeine Java-Themen 3
J Ein blutiger Anfänger braucht Hilfe Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben