MetaDaten

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
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
 
S

SlaterB

Gast
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

Top Contributor
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...
 
G

Gast

Gast
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.
 
S

SlaterB

Gast
> 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..
 
G

Guest

Gast
Ups, war wohl blind ...

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

Code:
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)
 
G

Gast

Gast
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?
 
S

SlaterB

Gast
wohl immer noch blind ;)

Code:
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)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben