# Wie übergebe ich Datenbankobjekte aus einer sql-Datenbank einer Java Klasse bzw. Instanz



## Madddin90 (9. Jul 2015)

Die Idee ist es mithilfe einer grafischen Benutzeroberfläche Daten aus einer Datenbank zu verwalten (auswählen, speichern, löschen).
Meine Frage hierzu ist, wie kann ich die Daten aus der Datenbank einer Klasse übergeben?
Ich habe bspw. eine Tabelle 'Fußballspieler', die sich aus den Attributen 'Name', 'Alter', 'Größe' zusammensetzt.
Wie kann ich dann der Klasse 'Fußballspieler' in Java die Daten aus der sql-Tabelle übergeben?

Vielen Dank im voraus für die Hilfe!


----------



## Maggot (9. Jul 2015)

Hallo. Schau dir mal Hibernate und JPA an. Da arbeitest du dann mit Klassen die genau die Tabelle representieren.


----------



## Tom299 (9. Jul 2015)

Stichwort: ResultSet


----------



## Dompteur (9. Jul 2015)

Für einfache Fälle - also wenige Tabellen und nicht all zu viele Attribute - kannst du JDBC (Java Database Connectivity) verwenden.
Ein Einführung findest du hier : http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_24_001.htm Ich habe hier bewußt die ältere Ausgabe des Buches verlinkt, weil hier das Kapitel noch ausführlicher ist.
Bei JDBC programmierst du das Mapping zwischen Datenbanktabellen und Java-Objekten einfach aus. Der Vorteil ist, dass du den Programmfluss leichter nachvollziehen kannst. Der Nachteil ist, dass du da eine Menge Schreibarbeit (bei vielen Tabellen, Attributen) haben kannst.

Wenn deine Datenbank eine gewisse Größe überschritten hat, dann lohnt es sich, ein Object-Relational-Mapping Framework einzusetzen. Hibernate und JPA wurden hier ja schon erwähnt.
Der Nachteil dieser Frameworks ist, dass sie natürlich eine gewisse Einarbeitungszeit erfordern. Dadurch, dass da einiges deklarativ definiert wird, kann es anfangs schwerer sein, den Programmablauf zu verstehen.


----------



## Joose (9. Jul 2015)

Madddin90 hat gesagt.:


> Ich habe bspw. eine Tabelle 'Fußballspieler', die sich aus den Attributen 'Name', 'Alter', 'Größe' zusammensetzt.
> Wie kann ich dann der Klasse 'Fußballspieler' in Java die Daten aus der sql-Tabelle übergeben?



Die Daten stehen in einem ResultSet und können von dort Spalte für Spalte ausgelesen werden.
Biete in der Klasse Fußballspieler einfach einen Konstruktor an der alle benötigten Werte entgegennimmt und fertig ist dein Fußballspieler-Objekt 
Oder erstellst ein Fußballspieler-Objekt (Defaultkonstruktor) und setzt alle Werte per setter Methoden.

Hibernate und JPA nehmen einem diesbezüglich natürlich Arbeit ab, dafür sind das Frameworks, welche für Anfänger nicht immer leicht verständlich sind.


----------



## Madddin90 (10. Jul 2015)

Noch eine weitere Frage: wann lasse ich mir Daten bzw. Objekte einer Datenbank aus einer SELECT-Abfrage als Instanz einer Klasse ausgeben und wann als ArrayList?


----------



## Dompteur (10. Jul 2015)

Wenn du sicher bist, dass das SELECT 0 oder 1 Datensätze findet, dann kannst du ein einzelnes Objekt (oder null) zurückgeben.
Dies ist immer dann gewährlistet, wenn du nach einem Primär-oder einem anderen eindeutigen Schlüssel suchst.

Wenn das SELECT mehr Sätze liefert (oder du nicht weißt, wieviele es werden), dann verwendest du eine ArrayList.


----------



## ARadauer (11. Jul 2015)

Madddin90 hat gesagt.:


> Noch eine weitere Frage: wann lasse ich mir Daten bzw. Objekte einer Datenbank aus einer SELECT-Abfrage als Instanz einer Klasse ausgeben und wann als ArrayList?



Das kommt darauf an was du fachlich machst..
Schreibst du eine Methode die dir einen bestimmten Datensatz lädt?
public Customer getCustomerById(String customerKey){
....
}
dann lieferst du nur eine Instanz zurück. zusätzlich sollst du halt auch irgendwie sinnvoll sicherstellen, dass nur einer gefunden wird... zb mit datenbank constraints...

suchst du hingegen etwas und weißt das es mehrere sind, lieferst du eine Liste
public List<Customer findCumstomersByName(String name){
...
}
sowas wäre eine liste...

ob jetzt nur einer, keiner oder mehrere gefunden werden ist egal.. können es mehrere sein gibst du eine liste zurück, soll es nur einer sein ein objekt...


----------

