Problem bei der Ausgabe eines Arrays

maikmaik

Grünschnabel
Hallo,

ich habe ein Problem mit der Ausgabe eines Array.
In der Funktion einlesen() habe ich u.a. Daten aus einem SQL Resultset in einen vector row gespeichert, welchen ich wieder in einen vector result speichere. Diesen habe ich dann in einen Array Resultat kopiert und returne ihn an main().

in main() (siehe unten) kann ich aber den Array Resultat nicht ausgeben. Ich denke dass eine for-Schleife allein nicht ausreicht. Kann mir da bitte jemand helfen?

Gruß Maik

Code:
***************************Funktion**************************************** 
static String[] einlesen (java.sql.ResultSet ergebnis,Vector result, int spaltenzahl)throws SQLException
 {
   String resultat[]; 
   while (ergebnis.next())
    {
    Vector row = new Vector();
    for (int i=1; i<= spaltenzahl; ++i)
    {
    //Alle Typen in String konvertieren
    System.out.print(ergebnis.getString(i) + "\t");
    row.add(ergebnis.getString(i));
    }
    System.out.println("");

    result.add(row);
    }
   resultat =new String[result.size()];
   result.copyInto(resultat);
   
   return resultat;
 }
********************************************************************************
*************************main()***********************************************
[...]
String resultat[]= einlesen(ergebnis,result,spaltenzahl); 
  for (int j=0; j!=resultat.length; ++j)
  {
  System.out.print(resultat[j]);
  }

[...]
 
Zuletzt bearbeitet von einem Moderator:
Moin,
unabhängig vom Sinn dieser Vorgehensweise und erneuter static-Verwendung:
Du ahnst sicher schon, wo es Probleme gibt?

result.copyInto(resultat);

result ist ein Vector, der wiederum Vectoren enthält. Und das versuchst Du in ein String-Array zu quetschen? Alle Achtung. :)
Übrigens wäre hier die Verwendung z.B. von Eclipse hilfreich gewesen, da wird sofort die Stelle angemeckert und das Programm beendet sich entsprechend mit einer Exception. Lange Rede kurzer Sinn, ich habe Deine methoden mal etwas modifiziert, s.u. Du musst nur noch wieder Dein ResultSet einbauen und die Übergabeparameter anpassen:

Code:
package arrayTest;

import java.util.Vector;

public class ArrayTest
{
	static Vector[] einlesen(Vector result, int spaltenzahl)
	{
		Vector[] vResultat;
		for (int j = 0; j < 5; j++)
		{
			Vector row = new Vector();
			for (int i = 1; i <= spaltenzahl; ++i)
			{
				//	  Alle Typen in String konvertieren
				// Ich habe wegen fehlendesm ResultSets einfach den Schleifenzähler genommen
				System.out.print("i = " + String.valueOf(i) + "\t");
				row.add(String.valueOf(i));
			}
			System.out.println("");

			result.add(row);
		}
		// Also wenn schon dann auch kopieren in ein Vector-Array:
		vResultat = new Vector[result.size()];
		result.copyInto(vResultat);

		return vResultat;
	}

	public void printOutput()
	{
		// Wir bekommen erst ein Vector-Array zurück
		Vector resultat[] = einlesen(new Vector(), 5);
		for (int j = 0; j != resultat.length; ++j)
		{
			// jedes Vector-Element beinhaltet einen String, also einzeln auslesen:
			Vector tempVector = resultat[j];
			for (int i = 0; i < tempVector.size(); i++)
			{
				System.out.println("Ausgabewert: " + tempVector.elementAt(i));
			}
		}
	}

	public static void main(String[] args)
	{
		new ArrayTest().printOutput();
	}
}

Ausgabe:
i = 1 i = 2 i = 3 i = 4 i = 5
i = 1 i = 2 i = 3 i = 4 i = 5
i = 1 i = 2 i = 3 i = 4 i = 5
i = 1 i = 2 i = 3 i = 4 i = 5
i = 1 i = 2 i = 3 i = 4 i = 5
Ausgabewert: 1
Ausgabewert: 2
Ausgabewert: 3
Ausgabewert: 4
Ausgabewert: 5
Ausgabewert: 1
Ausgabewert: 2
Ausgabewert: 3
Ausgabewert: 4
Ausgabewert: 5
Ausgabewert: 1
Ausgabewert: 2
Ausgabewert: 3
Ausgabewert: 4
Ausgabewert: 5
Ausgabewert: 1
Ausgabewert: 2
Ausgabewert: 3
Ausgabewert: 4
Ausgabewert: 5
Ausgabewert: 1
Ausgabewert: 2
Ausgabewert: 3
Ausgabewert: 4
Ausgabewert: 5
 
Sinn der Vorgehensweise

Hallo Snape,

vielen Dank für die viele Mühe die Du dir gemacht hast. Ich werde das gleich ausprobieren.

Der Sinn:
Ich habe den vector in einen String Array kopiert, weil ich diesen dann anschließend in einer Corba IDL verarbeiten will. (Bin gerade dabei mir das beizubringen).

Ich habe gelesen, das man in IDL-Sprache keine java.util.vectoren hat, sondern diese in eine
typedef sequence< datentyp>sequenzname
umwandeln muss.
Ich dachte, wenn ich ohnehin nur Strings in meinem java.util.vector habe, dann wandle ich den in einen String Array um ihn dann in IDL definieren zu können. Hoffentlich klappt es so!

Viele Grüße
Maik
 
Zurück