# Aus ResultSetMetaData Klasse dynamisch erzeugen



## saibo (30. Nov 2008)

Hallo ist es möglich aus ResultSetMetaData dynamische eine Klasse zu erzeugen und sich so das Manuelle erstellen der Klasse zu ersparen. Die MetaDaten liefnern ja im Prinzip alles was ich benötige: variablentyp und variablen name. 

Ich möchte für jede Zeile der Datenbank eine Objekt der dynamisch erzeugten Klasse erstellen, was mit den Werten der Datenbank befüllt ist.

wie macht man sowas. kennt ihr eine gute anleitung. 

```
String sql = "SELECT * FROM TEST"; 
		ResultSet rset = null;
		ResultSetMetaData rsetmd = null;
		try
		{
			rset = stmt.executeQuery(sql);
			rsetmd = rset.getMetaData(); //Metadaten Holen
				
			
			int numberOfColumns = rsetmd.getColumnCount();
			for (int i = 1; i <= numberOfColumns; i++)
			{
				System.out.println(rsetmd.getColumnName(i)+" : "+rsetmd.getColumnTypeName(i));
// Daraus soll dann eine Variable in der Klasse erzeugt werden
			}
```


----------



## HoaX (30. Nov 2008)

dynamisch geht doch da nicht wirklich, da ja bei der kompilierung nicht klar ist was das SELECT * alles zurückliefert. d.h. der kompiler kann nicht entscheiden ob dyn.getName() gültig ist oder nicht.

möglichkeiten:
 a) nimm eine scriptsprache, die meißten können das
 b) nimm hibernate,toplink,...


----------



## SlaterB (30. Nov 2008)

zu welchem Zweck brauchst du das denn?
dynamisch direkt im Programm kannst du die neue Klasse doch eh nicht benutzen, oder wie stellst du dir das vor?
da ist es schon besser, die Daten in einer Art Map zu speichern

wenn du die Klasse einmalig erzeugen willst um sie später beim weiteren Programmieren zu verwenden, 
quasi nur eine Verkürzung der Tipparbeit, dann musst du ja nur eine Textdatei zusammen bauen,
public class + Name,
private Felder mit richtigen Typ und dazu einfache getter und setter,
klingt doch machbar?


----------



## semi (30. Nov 2008)

Hier hast du ein Beispiel.
http://www.java-forum.org/de/topic78629_resultset-variabel-auslesen.html

Übrigens, man muss die Daten einer Tabelle nicht immer statisch in speziell dafür vorgesehenen Klassen 
(z.B. Person, Adresse etc.) abbilden. Das Stichwort hast du ja schon gegeben: Metadaten ... und dazu 
eine andere, generische Art der Datenhaltung (Map, wie in meinem Beispiel, ist eine, wenn auch nicht 
die beste, Alternative).


----------

