# Problem mit ResultSetMetaData



## Airwolf89 (15. Jan 2010)

Hi,

habe da ein Problem. Habe hier folgenden Code für eine Abfrage:


```
public ArrayList<ArrayList> lesen(String query) throws SQLException {

        ResultSet rs = null;

        this.query = query;

        rs = getObjekte(this.query);
        ResultSetMetaData rsmd = rs.getMetaData();

        int columnCount = rsmd.getColumnCount();

        while (rs.next()) {            

            for (int i = 0; i < columnCount; i++) {
                list.add(rs.getString(i));
            }
            listGesamt.add(list);
        }

        return listGesamt;
    }
```

Beim ResultSetMetaData bekomme ich eine:

```
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
```

Was kann da schief gegangen sein?

Danke im voraus.


----------



## X3TitanCore (16. Jan 2010)

rs.getString(i) fängt bei 1 an und nicht bei 0.
Änder das mal in deiner Schleife.


----------



## Airwolf89 (16. Jan 2010)

Verstehe ich nicht, warum soll das bei 1 anfangen? Definiere i doch mit 0? Hab ich da jetzt nen grundsätzliches Verständnisproblem?

Aber der kommt im Code ja gar nicht erst bis zur Schleife, der bricht ja schon vorher ab, bei rsmd.


----------



## X3TitanCore (16. Jan 2010)

Na so steht es in der Doku drin.

String java.sql.ResultSet.getString(int columnIndex) throws SQLException
Retrieves the value of the designated column in the current row of this ResultSet object as a String in the Java programming language.

Parameters:
columnIndex the first column is 1, the second is 2, ...


----------



## Airwolf89 (16. Jan 2010)

Ach das hattest du gemeint. Ich dachte ich hätte die Schleife irgendwie falsch geschrieben und das mein i irgendwie 1 wäre und nit 0.


----------



## X3TitanCore (16. Jan 2010)

Ne einfach die Schleife bei 1 anfangen lassen und dann i <= columnCount


----------



## Airwolf89 (16. Jan 2010)

Hm, das resultset ist gefüllt, aber trotzdem bleiben die Listen leer.
Problem könnte sein dass ich ne möglichst generische Lösung haben möchte. In der Liste will ich erstmal alles als String haben, aber in den Ergebnissen können ja sowohl Zahlen als auch Zeichenketten vorkommen. Kriegt da getString nen Problem wenn da Zahlen stehen oder kann der das gleich als String interpretieren? Hat da auch der Typ des Felds in der Datanbank mit zu tun?


----------



## X3TitanCore (16. Jan 2010)

Soweit ich weiß wird gibt es da keine Probleme mit Zahlen. Kannst da auch getString verwenden. 
Wenn das nicht funktioniert dann halt mit 


```
String.valueOf(rs.getInt(i))
```

ein String daraus machen. Finde ich ist die sauberste und sicherste Variante.

Gruß


----------



## Airwolf89 (17. Jan 2010)

Hmm, Problem bleibt weiterhin bestehen. Das ResultSet ist gefüllt, aber in den Listen landet nix. Was mach ich falsch?


----------



## X3TitanCore (17. Jan 2010)

Dazu müßtest du mal mehr Code posten. Z.B. was macht rs = getObjekte(this.query);?
Oder was in dem ResultSet drin ist. Ich nehme mal an das du deine Listen außerhalb der lesen Methode initialisiert hast.


----------



## Airwolf89 (18. Jan 2010)

Hi,

also die Methode getObjekte macht im Grunde genommen folgendes:


```
state = conn.createStatement();
rset = state.executeQuery(query);
conn.commit();
```
Rest ist Exception Handling.
Am Ende liefere ich das ResultSet zurück.

Die Listen sind globale Variablen.

Das Resultset ist auf jeden Fall nicht leer, so viel kann ich sagen. Aus dem Debugger, bzw. der Darstellung des Resultset finde ich mich nicht heraus.


----------



## Airwolf89 (18. Jan 2010)

Habe das Problem gelöst.

Habe dummerweise vergessen die Listen zu deklarieren, bzw. mit = null definiert. Nu funktionierts. Nochmal danke.


----------

