# JComboBox mit SQL-Ergebnis füllen. Wie?



## madmad (21. Nov 2007)

Hallo zusammen, 

ich hoffe ihr könnt mir helfen. Von einer SQL Abfrage bekomm ich folgendes Ergebnis:


```
BERUFSGRUPPE                      NAME
----------------------------------------------------------
MALER                             Müller
MALER                             Schmidt
MALER                             Mayer
MALER                             Ecke
LACKIERER                         Lorenz
LACKIERER                         Zug
LACKIERER                         Bäcker
```

Alle Maler bzw. Lackierer sollen in jeweils einer eingenen JComboBox angezeigt werden.  Ich hab versucht zwei
Vectoren zu füllen, jedoch bleiben diese immer leer. 

Habt ihr vielleicht eine Idee wie man das Problem lösen könnte.

Vielen Dank für eure Hilfe.
Gruß
Markus



```
String			BerufsGruppe;	
String			Name;				
String 			Maler = "MALER";
String			Lackierer = "LACKIERER";

Vector vMaler = new Vector();
Vector vLackierer = new Vector();

ResultSet result = myStatement.executeQuery(abfrageString);
			  
			    //Abfrageergebnis auswerten und ausgeben 

		            do {
		          
			        System.out.println("BERUFSGRUPPE: " +result.getString("berufsgruppe"));
			        System.out.println("NAME: " +result.getString("name"));

			        BerufsGruppe = result.getString("berufsgruppe");
			        Name = result.getString("name");
			        	
			        if (Maler.equals(BerufsGruppe)){
			        	vMaler .add(Name);
			        }

			        if (Lackierer.equals(BerufsGruppe)){
			        	vLackierer .add(Name);
			        }
			        
			        System.out.println("vMaler:" + vMaler + " vLackierer:" +vLackierer );
					   
		           } while (result.next());

			    	ComboBoxModel ComboModelMaler = new DefaultComboBoxModel(vMaler);
			    	ComboBoxModel ComboModelLackierer  = new DefaultComboBoxModel(vLackierer );
	           
			    	jComboMaler.setModel(ComboModelMaler);
			    	jComboLackierer.setModel(ComboModelLackierer);
```


----------



## The_S (22. Nov 2007)

Bekommst du keine Exception? Solltest du, weil du eine do-while und keine while Schleife zum Auslesen des ResultSets verwendest.


----------



## msd (22. Nov 2007)

Hallo Hobbit,

nein, es wird keine Exception geworfen. Ich habe gestern aber was versehentlich weggelassen. Die do-while Schleife ist noch von einem if Block eingeschlossen, der einen Dialog zeigt, wenn das Resultset leer ist. 

Hat jemand eine Idee wie ich die Vektoren gefüllt bekomme? So wies jetzt ist, bleiben Sie immer leer. Ich habe keine Ahnung warum.

Danke sehr!

Gruß
Markus


```
String         BerufsGruppe;   
String         Name;            
String          Maler = "MALER";
String         Lackierer = "LACKIERER";

Vector vMaler = new Vector();
Vector vLackierer = new Vector();

ResultSet result = myStatement.executeQuery(abfrageString);
          
//Abfrageergebnis auswerten und ausgeben 

if (result.next()) {

          do {
                 System.out.println("BERUFSGRUPPE: " +result.getString("berufsgruppe"));
                 System.out.println("NAME: " +result.getString("name"));

                 BerufsGruppe = result.getString("berufsgruppe");
                 Name = result.getString("name");
                    
                 if (Maler.equals(BerufsGruppe)){
                    vMaler .add(Name);
                 }

                 if (Lackierer.equals(BerufsGruppe)){
                    vLackierer .add(Name);
                 }
                
                 System.out.println("vMaler:" + vMaler + " vLackierer:" +vLackierer ); 

         } while (result.next());
 }

else {		            
        JOptionPane.showMessageDialog(frame,
        "Keine Daten gefunden! \n\n",
        "Suchen - Keine Daten gefunden",
        JOptionPane.ERROR_MESSAGE);
}

                ComboBoxModel ComboModelMaler = new DefaultComboBoxModel(vMaler);
                ComboBoxModel ComboModelLackierer  = new DefaultComboBoxModel(vLackierer );
              
                jComboMaler.setModel(ComboModelMaler);
                jComboLackierer.setModel(ComboModelLackierer);
```


----------



## SlaterB (22. Nov 2007)

du hast ja schon vorbildlich ein paar Ausgabe-Anweisungen drin, dann nehme ich mal an,
dass du auch Ausgaben im Log hast die Schleife also durchlaufen wird,


System.out.println("BERUFSGRUPPE: " +result.getString("berufsgruppe")); 
ist aber schlecht, 
die BerufsGruppe hast du doch in der String-Variablen BerufsGruppe ,
schreibe dann 
System.out.println("BERUFSGRUPPE: " +BerufsGruppe); 



die Ausgaben kann man noch weitertreiben:

System.out.println("BERUFSGRUPPE: " +BerufsGruppe+", = Maler?: "+(Maler.equals(BerufsGruppe))+", = Lakierer?: "+
(Lackierer.equals(BerufsGruppe))); 

am Ende in der Schleife gibst du dann den Füllstand der Listen aus:
System.out.pritnln("Maler bisher: "+vMaler.size() + ..);

ach halt, das hast du ja schon,
na dann musst du doch wissen, ob vMaler leer ist oder Elemente enthält

> Hat jemand eine Idee wie ich die Vektoren gefüllt bekomme? So wies jetzt ist, bleiben Sie immer leer. Ich habe keine Ahnung warum. 

also wie sieht es nun konkret aus?
bekommst du die Ausgaben pro while-Schleifendurchgang?
kommt bei den Vergleichen true raus?
werden die Listen trotz true nicht gefüllt
oder sind die Listen voll aber werden nur nicht in der GUI angezeigt?
was ist der aktuelle Stand?

poste bitte auch dein Log mit den Ausgaben


----------



## @x.l (22. Nov 2007)

Achte mal auf die Groß-/Kleinschreibung, ich vermute die Spalten heissen nicht "berufsgruppe" sondern evtl. "BERUFSGRUPPE" oder "Berufsgruppe". Lege ausserdem den Wert zuerst auf einer Variablen ab:

```
if (result.next()) { 

          do { 
                 //probier auch mal den SpaltenIndex anstelle des SpaltenNamens
                 BerufsGruppe = result.getString("berufsgruppe");  
                 Name = result.getString("name"); 

                 System.out.println("BERUFSGRUPPE: " +BerufsGruppe);
                 System.out.println("NAME: " +Name); 
                    
                 if (Maler.equals(BerufsGruppe)){ 
                    vMaler .add(Name); 
                 } 

                 if (Lackierer.equals(BerufsGruppe)){ 
                    vLackierer .add(Name); 
                 } 
                
                 System.out.println("vMaler:" + vMaler + " vLackierer:" +vLackierer ); // Warum diese Zeile?

         } while (result.next()); 
}
```

#edit: Hätte nicht telefonieren sollen - zu langsam...


----------



## The_S (22. Nov 2007)

Seit wann spielt bei rs.getString(spalte) Groß- und Kleinschreibung eine Rolle?


----------



## SlaterB (22. Nov 2007)

nicht da, sondern bei

if (Maler.equals(BerufsGruppe)){ 

aber stimmt, Spalte  'berufsgruppe' ist gemeint,

ich vermute jedenfalls den Fehler bei Maler.equals(BerufsGruppe)


----------



## @x.l (22. Nov 2007)

War nur ne Idee... ich hol mir die Werte immer über den Index.


----------



## The_S (22. Nov 2007)

@x.l hat gesagt.:
			
		

> War nur ne Idee... ich hol mir die Werte immer über den Index.



Woah, wie hässlich ist das denn? Das hat ma n Kollege hier gemacht, dem hab ich das gaaaaaaaaaanz schnell wieder abgewöhnt. Wenn du mal n SQL hast, bei dem mehr als 40 Spalten zurück kommen, verliert nan (vorallem bei späteren Erweiterungen) ziemlich schnell den Überblick wo denn jetzt was ist.


----------



## msd (22. Nov 2007)

Hallo zusammen,

ich kanns wiedermal kaum glauben, woran es gelegen. JDBC lieferte für jede Berufsgruppe immer das richtige Ergebnis. Allerdings ist die Spalte Berufsgruppe mit char(12) in der Datenbank erstellt worden. Deshalb wurden die restlichen Zeichen (MALER*******) mit Leerzeichen* zurückgeliefert und ein "equals" lieferte natürlich immer "false". Und ich dachte die ganze Zeit ich befinde mich in einer anderen Java Dimension. Danke für eure Hilfe.

Gruß
Markus


----------



## SlaterB (22. Nov 2007)

sach ich doch


----------



## @x.l (22. Nov 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Wenn du mal n SQL hast, bei dem mehr als 40 Spalten zurück kommen, verliert nan (vorallem bei späteren Erweiterungen) ziemlich schnell den Überblick wo denn jetzt was ist.


Okay, überzeugt....   :wink:


----------

