# ResultSet in Tabelle schreiben ...



## Bernard (28. Mrz 2004)

hallo allerseits, 

mal kurz vorweg, sehr auskunftsfreudig scheinen einige hier nciht zu sein,
ich hab hier schon zwei einträge zu dem thema gelesen und bei beiden stehen anstatt handfeste
hilfestellungen verweise zu API oder sun tutorials!
also ich weiss nicht wie die unwissenden vormir das handhaben, aber ich hab mich schon 2 tage damit
auseinandergesetzt bevor ich hier etwas frage und hab eben keine antwort gefunden ...

aber ich denke es gibt hier auch leute die einem gerne weiterhelfen und an die wende ich mich hier:

ja die überschrift sagt eh schon alles ...
ich weiss nicht wie ich dynamisch das resultset in eine tabelle bekomme ... das heisst ich habs schon geschafft,
jedoch mich einigen einschränkungen.

konkret:

```
String select1 = "SELECT Lastname, Firstname FROM employees";                   
            ResultSet statementResult = statement1.executeQuery(select1);            
            ResultSetMetaData statementResultMD = statementResult.getMetaData();

            int columns = statementResultMD.getColumnCount();

// FRAGE !!!! wie dimensioniere ich den object array dynamisch richtig !!!
// ich finde keine information über die anzahl der einträge der spalte ...
// wie man sieht gebe ich die zahl 10 fix vor ...
            Object[][] selectData = new Object[10][columns];

            String[] selectDataStr = new String[columns];

            // die spaltennamen auslesen
            for (i=0; i<columns; i++)
            {
                selectDataStr[i] = statementResultMD.getColumnName(i+1);
            }

            // aus dem ResultSet die daten in einen object array schreiben 
            while (statementResult.next())
            {
                for (i=0; i<columns; i++)
                {
                    selectData[ii][i] = statementResult.getObject(i+1);
                }
                ii++;                
            }

            // nun den object array übergeben samt spaltenüberschriften
            jTable1.setModel(new javax.swing.table.DefaultTableModel(
                selectData, selectDataStr ));
```

nunja ... ich hab nur das notwendigste rausgenommen ... und hoffe das zeigt euch schon die mängel

es erscheint mir auch ein wenig komisch diese lösung, denn um in der tabelle das richtige ergebnis
zu bekommen muss das resultset in den object array (den ich später an die tabelle als model übergebe)
recht kryptisch einlesen ... anstatt alle werte einer spalte aus dem resultset in eine "spalte" des arrays zu
lesen muss ich die spalten des resultsets immer in den ersten index der spalten des object arrays schreiben
um dann in der tabelle eine korrekte spalte zu bekommen (also die einträge untereinandern)
hoffe das war halbwegs verständlich*G



wenn jemand eine noch elegantere lösung hat ... ich bitte darum

mfg besten dank und guter hoffnung,
bernard


----------



## Beni (28. Mrz 2004)

Verwende doch eine java.util.LinkedList um die Daten auszulesen:

```
LinkedList list = new LinkedList();

while (statementResult.next()){
  Object[] data = new Object[ columns ];
  list.addLast( data );

  for (i=0; i<columns; i++){
    data[i] = statementResult.getObject(i+1);
  }
}

Object [][] data = (Object[][]) list.toArray( new Object[ list.size() ][] );
```

Beni


----------



## citizen_erased (29. Mrz 2004)

hmm.. also wenn es darum geht, zu ermitteln, wieviele objekte im resultset enthalten sind, und wie groß du darauf hin deine sammlung dimensionieren musst... stell doch eine anfrage an die datenbank. "SELECT(*) COUNT..." oder wie immer das ging.


----------



## Guest (30. Mrz 2004)

```
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE);
ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");

//zeiger auf den letzten schieben
rs.last();
//die letzte zeilenzahl soll auch die gleiche mit der Gesamtzeilenzahl sein
int rows = rs.getRow();
//zeiger wieder auf den anfang
rs.first();

//daten verarbeiten
//..
```


ps: müßte so gehen
hab auch lange gesucht 

wie es mit Geschwindigkeiteinbüßen aussieht, wegen der Scrollableeigenschaft weiß ich nicht


----------



## echnaton12 (16. Apr 2004)

citizen_erased hat gesagt.:
			
		

> hmm.. also wenn es darum geht, zu ermitteln, wieviele objekte im resultset enthalten sind, und wie groß du darauf hin deine sammlung dimensionieren musst... stell doch eine anfrage an die datenbank. "SELECT(*) COUNT..." oder wie immer das ging.


Geht aber auch über die Metadaten vom Statement da kannst du alles rauslesen.


----------

