# Spaltennamen einer Tabelle zurückgeben lassen



## Airwolf89 (9. Mai 2010)

Hi,

ich hätte da mal eine Frage.
Ist es irgendwie möglich mit ner Methode oder so mir die Spaltennamen einer Tabelle zurückgeben zu lassen. Also dass ich die Namen dann in nem Array oder sonst was habe.
Gibt es sowas?

Danke im voraus.


----------



## eRaaaa (9. Mai 2010)

Mhmm mit [c]ResultSetMetaData[/c] und [c]getColumnName(index)[/c] sollte das gehen:

```
ResultSet rs = stmt.executeQuery("SELECT * FROM TABLENAME");
        ResultSetMetaData md = rs.getMetaData();
        for (int i = 1; i <= md.getColumnCount(); i++){
          System.out.println(md.getColumnName(i));
        }
```


----------



## Airwolf89 (9. Mai 2010)

OK, klar, über die MetaDaten.

Dank dir.


----------



## Airwolf89 (10. Mai 2010)

Hi,

habe folgendes ausprobiert:


```
public String[] getColumnNames(String tblName) {

        String[] arr = null;
        String query = "Select * from " + tblName;
        ResultSet rs = null;

        try {
            rs = getObjekte(query); //Methode für die Abfrage, query ist die SQL-Abfrage
            ResultSetMetaData rsmd = rs.getMetaData();
            arr = new String[rsmd.getColumnCount()];
            
            for (int i = 0; i < rsmd.getColumnCount(); i++) {
                arr[i] = rsmd.getColumnName(i);
            }

        } catch (SQLException ex) {
            Logger.getLogger(DBConn.class.getName()).log(Level.SEVERE, null, ex);
        }
        return arr;
    }
```

Problem ist aber dass ich bei getColumnName nix kriege, bekomme da ne Exception:


```
>Exception occurred in target VM: Column index out of range.
```

Im ResultSet und auch in den Metadaten sind aber alle daten korrekt vorhanden. Was ist da los?

Danke im voraus.


----------



## eRaaaa (10. Mai 2010)

Du musst beim Index 1 anfangen, nicht bei 0 
Schau dir mal meine Schleife oben an...und dann halt arr[i-1] =


----------



## Airwolf89 (10. Mai 2010)

Danke, funktioniert. Ist aber wie ich finde schon reichlich komisch, im debugger werden die auch bei 0 beginnend aufgezählt.


----------



## Michael... (10. Mai 2010)

Im Gegensatz zu den Indizes bei Arrays fangen die Indizes bei ResultSets mit *1* und nicht mit 0 an.

Noch als Info:
Abhängig von der DB gibt's u.U. auch Systemtabellen, die Dir die Spaltennamen und sonstige Infos zu den Tabellen liefern.


----------



## Airwolf89 (10. Mai 2010)

Hmm, ok danke, gut zu wissen.

Zu den Systemtabellen, habe für meine DB sowas noch nicht gefunden, benutze MySQL, mit XAMPP installiert, gibt's da sowas? Wie könnte ich da drauf zugreifen?


----------



## Michael... (10. Mai 2010)

Habe hauptsächlich mit Oracle zu tun und bin daher in mySql nicht so bewandert, aber es gibt da ein Information_Schema mit diversen Tabellen.
Kannst ja mal probieren, was z.B. folgendes liefert:

```
Select * From Information_Schema.Columns
```


----------



## Airwolf89 (10. Mai 2010)

Ja, das geht. Danke für den Tipp.


----------

