# Ergebnisse von exectueQuery als Array ausgeben



## nickname (30. Dez 2009)

Hallo zusammen,

würde gerne statt:
	
	
	
	





```
public void zweiteAbfrageAdresse()
		{
			try
			{
					stat = con.createStatement();
					rs = stat.executeQuery(string2);
						while(rs.next())
						{
							name = rs.getString("name");
							vorname = rs.getString("vorname");
							strasse = rs.getString("strasse");
							hnr = rs.getString("nummer");
							plz = rs.getString("plz");
							ort = rs.getString("ort");
							telef = rs.getString("telefon");
							teleGesch = rs.getString("telefonGesch");
							mobil1 = rs.getString("mobil1");
							mobil2 = rs.getString("mobil2");
							email = rs.getString("email");
							fax = rs.getString("fax");			
						}	
				setCloseResultSet();
					setCloseStatement();
			}
			catch(SQLException sqle)
			{
				System.out.println("Zweite Execption" + sqle);
			}
		}
```
so etwas (bezogen auf "name, strasse.." usw. gerne alles in ein Vector
packen, wie hier
	
	
	
	





```
private Vector<String> executeQueryAdressen()
	{
		ds = conPool.setConnectionPoolDataSourceToMotorrad();//Ruft eine separate Methode auf	
		try
		{
			vec = new Vector<String>();			
			con = ds.getConnection();
			stat = con.createStatement();
			rs = stat.executeQuery(executeQuery);			
				i = 0;					
					while(rs.next())
					{
						vec.addElement(rs.getString("name"));// auch ausprobiert-->vec.addElement(rs.getString("name") + rs.getString("strasse") usw.) klappt aber nicht
						vec.addElement(rs.getString("strasse"));
						vec.addElement(rs.getString("strasse"));
						vec.addElement(rs.getString("nummer")); 
        usw.
						i++;
					}					
					stat.close();
					rs.close();
					con.close();						
						con = null;			
		}		
		catch(SQLException sqlEx)
		{
			sqlEx.printStackTrace();
			con = null;
		}		
		return vec;
	}
```
dann wird diese Liste noch in ein ArrayList gepackt
	
	
	
	





```
private String[] listeErzeugen(String[] stringArray)
	{
		int d = stringArray.length;		
		String[] arrayList = new String[d];		
		List<String> liste = new ArrayList<String>(d);			
			for(int x = 0; x < d; x++)
			{
				liste.add(stringArray[x]);
			}			
				Object[] ob = liste.toArray();
					for(int x = 0; x < d; x++)
					{
						arrayList[x] = (String)ob[x].toString();
					}
			return arrayList;
	}
```
hier sollte die fertige Liste als Array ausgeben werden.
	
	
	
	





```
public void aufrufenExecuteQueryKawa(NewContact newCon)
	{
		Vector<String> vec = executeQueryAdressen();						
			Enumeration<String> en = vec.elements();						
				String[] stringIntern = new String[i];							
					for(int x = 0; x < i; x++)
					{
						stringIntern[x] = en.nextElement();
					}					
				String[] ein = listeErzeugen(stringIntern);//befindet sich über dieser Methode				
				for(int x = 0; x < i; x++)
				{
					System.out.println("Es sind : " + ein[x] + " Elemte in der Liste vorhanden");//eigentliche Ausgabe
				}
	}
```
Die Ausgabe sieht so aus

```
Es sind : Yamaha Elemte in der Liste vorhanden
```
Ich bekomme einfach nicht die gesamte Zeile aus der Datenbank in diesen Vector.
Wenn ich aber nur eine Spalte in dieser Form ausgebe, dann klappt das aber eine Zeile...:bahnhof:

Oder bleibt mir nichts anderes übrig als die erste Variante in betracht zu ziehen (ganz oben die Methode) Oder muss ich mehrer Instanzen der Klasse Vector bilden?

danke, nickname

Sorry für so viel Code


----------



## SlaterB (30. Dez 2009)

die Methode listeErzeugen() macht gar nichts sinnvolles, soweit ich das sehe,
aus einem Array a, b, c wird genau wieder ein gleiches Array a, b, c erstellt,
was soll da passieren?

----

ansonsten scheint mir, dass der Vector vec ordentlich gefüllt wird, 
und i auf 1 steht, da nur ein Ergebnis zurückkommt, (ein Ergebnis mit 10 Attributen oder so -> 10 Elemente im Vector)

also füllst du das Array stringIntern genau mit dem ersten Element von vec, den Rest ignorierst du,
am Ende erscheint in der Ausgabe dieses erste Element

----

mit System.out.println() überall zwischendurch einfachst möglich selber nachzuvollziehen


----------



## nickname (30. Dez 2009)

Hi SlaterB,

danke für deine Anregungnen!

Hab jetzt wohl den Fehler entdeckt (eigentlich Zufall, wie vielen Erfinfungen...)

Nochmal der Code, der meine Veränderung enthält
	
	
	
	





```
public void aufrufenExecuteQueryAdressen(NewContact newCon)
	{
		Vector<String> vec = executeQueryAdressen();		
			
			Enumeration<String> en = vec.elements();
				
						int i = vec.size();//Hier habe ich das eingefügt! Und jetzt läuft es
                                                                     //genauso, wie ich es wollte.
				String[] stringIntern = new String[i];
				
					for(int x = 0; x < i; x++)
					{
						stringIntern[x] = en.nextElement();
					}					
				for(int x = 0; x < i; x++)
				{					
					System.out.println(x + " - " + stringIntern[x]);
				}
	}
```
Hier ist auch ein Fehler gewesen

```
for(int x = 0; x < i; x++)
{
    stringIntern[x] = en.nextElement();
}
```
Das "i" habe ich als eine public Variable definiert. Das du ja sagtes, dass i = 1 ist, hat dieses i der for-Schleife auf das public "i" zugegriffen und somit nur einen Durchgang gestartet. Durch die lokale Variable "i" wurde die Vectorgröße ermittelt und somit konnte natürlich die for-schleife mehrmals durchlaufen.



			
				SlaterB hat gesagt.:
			
		

> die Methode listeErzeugen() macht gar nichts sinnvolles, soweit ich das sehe,


jetzt sehe ich es auch

danke nochmal!!

gruß nickname


----------

