# MetaDaten



## Guest (25. Aug 2008)

Guten Abend zusammen,

kann mir zufällig jemand verraten wie ich an eine Auflistung der Felder in der Tabelle "MeineTabelle" in einer DerbyDB komme? Das SQL-typische "SHOW FIELDS FROM ...." wird im Derby Referenzhandbuch (http://db.apache.org/derby/docs/10.4/ref/) nicht erwähnt.

THX A LOT


----------



## SlaterB (25. Aug 2008)

du meinst über Java-Wege, JDBC?
eine Connection hat DatabaseMetaData,
ein ResultSet ResultSetMetaData

vielleicht funktionieren die aber auch nur wenn die entsprechenden Queries unterstützt werden,,


----------



## Oli (26. Aug 2008)

Hallo,

mit Feldern meinst du doch die Spaltennamen. 

Die kannst du mit Hilfe der ResultSetMetaData auslesen.

for(int i = 0; i< rd.getColumnCount(); i++){
System.out.println(rd.getColumnName(i);
}

Wenn ich dich jetzt richtig verstanden habe...


----------



## Gast (28. Aug 2008)

Hallo Oli,

ich bin zwar nicht derjenige mit der gestellten Frage, aber ich habe ein ähnliches Problem.

Was ist denn bei dir rd? und wie kommst du dazu? Ist das, das Connection-Object?

Und gleich eine zweite Frage. Ich brauche nicht nur den Spaltennamen aus der Tabelle XYZ ich brauche zu dem Spaltennamen auch den Datentyp z.B. VARCHAR(30), etc.

Und weil aller guten Dinge drei sind, brauche ich aus der Tabelle XYZ die Felder die den Primärschlüssel bilden.

Wäre nett wenn du mir auf die Sprünge helfen kannst. Ich bin es in mySQL etwas anders gewohnt.

Danke für deine Hilfe.


----------



## SlaterB (28. Aug 2008)

> Was ist denn bei dir rd?

hmm, in dem Posting wurde genau eine Klasse genannt,
die wirds ganz bestimmt nicht sein 

> und wie kommst du dazu?



			
				SlaterB hat gesagt.:
			
		

> ein ResultSet [hat] ResultSetMetaData


schau dir mal alle Methoden von ResultSet an?!

--------

> ich brauche zu dem Spaltennamen auch den Datentyp

siehe API, das gibts da auch

-----

>  brauche ich aus der Tabelle XYZ die Felder die den Primärschlüssel bilden

das dürfte in ResultSetMeteData nicht drinstehen, ein ResultSet muss ja nicht einen PrimaryKey enthalten oder sich nur eine Tabelle ziehen,
aber es gibt noch ein MetaData-Objekt, welches in diesem Thread schon genannt wurde..


----------



## Guest (28. Aug 2008)

Ups, war wohl blind ...

Ich habe das mal wie folgt umgesetzt. Leider bekomme ich eine Exception:


```
String sql = "SELECT * FROM " + tableName;
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(sql);
			ResultSetMetaData rd = rs.getMetaData();
			for(int i = 0; i< rd.getColumnCount(); i++){  // Hier eine Exception
				System.out.println(rd.getColumnName(i) + " = " + rd.getColumnType(i));
			}
```



> Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
> at org.apache.derby.impl.jdbc.EmbedResultSetMetaData.getColumnName(Unknown Source)


----------



## Gast (28. Aug 2008)

Ich habe den Fehler gefunden. Ich darf nicht bei 0 anfangen zu Zählen sondern muss bei 1 beginnen!

Allerdings werde ich aus der Rückgabe rd.getColumnType(i) nicht so ganz schlau. Hier erhalte ich z.B.

FELD1 = 12

Was ist 12?


----------



## SlaterB (28. Aug 2008)

wohl immer noch blind 


```
getColumnType
public int getColumnType(int column)
                  throws SQLException
Retrieves the designated column's SQL type. 

Parameters:
column - the first column is 1, the second is 2, ... 
Returns:
SQL type from java.sql.Types 
Throws: 
SQLException - if a database access error occurs
See Also:
Types
```
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSetMetaData.html#getColumnType(int)


----------

