# Java-Objekt dynamisch aus Datenbanktabelle erzeugen?



## Nodiraa (14. Sep 2012)

Hallo zusammen,

ich habe folgendes vor:

Java-Programm zur Anbindung an verschiedene relationale DB. Abfrage von Tabellen nach Vorgabe.
Meine Frage ist nun: Wenn ich nur den Namen der Tabelle kenne, aber nicht die Struktur, besteht die Möglichkeit zur Laufzeit ein Objekt zu erstellen, dass dann in eine Liste überführt wird und die Tabelle so repräsentiert? Wichtig ist, ich möchte die Datentypen möglichst beibehalten, also nicht alles als Strings etc., da später noch eine weitere Verarbeitung erfolgen soll.

Vielleicht noch ein wenig ausführlicher: Ich habe das ganze schon programmiert und mir eine Testklasse zu meiner bekannten Tabelle geschrieben (da kenne ich ja die Struktur). Die packe ich in einen Vector und gut ist. Nun kann ich nicht jedes Mal die Klasse dafür schreiben, weil es möglich ist, dass ich dir Struktur nicht kenne. Gibt es dafür eine Lösung und wenn ja, gebt mir bitte einen Hinweis, wonach ich suchen soll. 

Danke und viele Grüße
Nodiraa


----------



## JimPanse (14. Sep 2012)

Ich vermute du suchst eine O/R-Mapper API bzw. Framework, d.h.

JPA-API

bzw.

JPA_wikipedia

Bsp.

hibernate/

oder

TopLink


----------



## SlaterB (14. Sep 2012)

anderenfalls kann man fast das ResultSet nehmen, aber lieber nicht,
aber die Übertragung mit einfachem Code auch überschaubar,

eine Klasse mit einer Liste/ Map von Attributen mit Typ + Wert,
aus Metadaten erfährt man den Typ, dann richtig aus dem ResultSet abfragen usw.


----------



## Templarthelast (14. Sep 2012)

Rein theoretisch könntest die die Datenbankstruktur abfragen, dann daraus eine JPA-Entity entwickeln und diese dann per javac compilen.


----------



## turtle (15. Sep 2012)

Ich werfe mal wieder meinen myBATIS Hut in den Ring 

Damit kannst Du einen SQL absetzen und auf ALLE Spalten über eine Map zugreifen. Das ist üblicherweise NICHT was man möchte. Aber gehen tuts trotzdem ;-)

Hier mal ein kleines Beispiel, das eine Tabelle ausliest und alle Werte daraus ausgibt. Mit der Map kannst Du natürlich machen, was Du möchtest.


```
<select id="turtle" resultType="HashMap">
		select * from project
	</select>
```
Benutzen geht dann so

```
SqlSession session = sqlSessionFactory.openSession();
		try {
			Map<?, ?> selectMap = session.selectMap("turtle", "ID");
			System.out.println(selectMap);
		} finally {
			session.close();
		}
```
Und gibt als Resultat-Map. Meine Tabelle ist sehr klein und hat nur zwei Spalten ID und Name.


```
{1={NAME=Projekt-1, ID=1}, 2={NAME=Projekt-2, ID=2}, 3={NAME=Projekt-3, ID=3}, 10={NAME=ABC, ID=10}, 14={NAME=Hugo, ID=14}}
```


----------

