Java JDBC: ResultSet Metadata -> Der Sinn dahinter

nintendoluk

Commander
Registriert
Mai 2014
Beiträge
2.124
Hi zusammen,

ich les mich zurzeit in das Thema JDBC ein und bin dabei unweigerlich auf die Klasse ResultSet gestoßen.
Wenn man jetzt aus einem ResultSet Objekt bestimmte Informationen herauskitzeln will muss man dieses ein ein ResultSetMetaData Objekt umwandeln, zB. um die Anzahl der Spalten zu erfahren:

Code:
ResultSet rs = st.executeQuery(myCommand);
ResultSetMetaData rsMetaData = rs.getMetaData();
int numberOfColumns = rsMetaData.getColumnCount();

Nun interessiert es mich warum man das nicht alles in ein Objekt/eine Klasse gepackt hat.
Was haben sich die Schreiber von JDBC dabei gedacht, solche Funktionen vom eigentlichen Objekt zu trennen?
Oder verstehe ich da was komplett falsch?

Danke & Gruß
Lukas
 
Naja man wollte das Objekt wohl schlank halten. Bei einer normalen DB Abfrage musst du die Spaltenanzahl ja nicht im Code abfragen.
 
Du wandelst doch kein Objekt um?! getMetaData() liefert dir ein Objekt vom Typ ResultSetMetaData, welches im Objekt ResultSet existiert.

Keine Ahnung was du erwatest aus den Metadaten einer Abfrage für spektakuläre Dinge zu sehen.
 
Zuletzt bearbeitet:
Nachdem die Metadaten ja nicht unmittelbar zur Abfrage gehören, sondern ebenm wie der Name schon sagt, nur Metadaten sind, wurden sie in eine eigene Klasse ausgelagert. Im ResultSet sind sie aber trotzdem enthalten, wie du ja am Aufruf rs.getMetaData() sehen kannst.

Interessante Methoden für die Metadata-Klasse sind z.B. isNullable(i) (kann die Spalte i NULL-Werte enthalten?) oder auch getColumnType(i) (welchen SQL-Typ hat die Spalte i?).
 
Ich würde mich dringend mit den SOLID Paradigmen auseinandersetzen. Dann wird dir auch klar, warum man nicht alles in ein Objekt packt.
 
Zuletzt bearbeitet:
Ich würde dir JOOQ als alternative zum direkten JDBC Zugriff empfehlen.
Wenn du ohne Hibernate direkt SQL schreiben willst, wird dein Code leserlicher und sauberer.
 

Ähnliche Themen

Antworten
37
Aufrufe
2.519
A
Zurück
Oben