Rückgabetypen für integrierte Methoden zum Abfragen von Datenbanken

Wenn Sie die query()-Methoden der Schnittstelle Data zum Abfragen von Datenbanken verwenden, können diese Methoden vollständige Abfrageergebnisse in Objekten der folgenden Typen zurückgeben.

Tabelle 2 zeigt die Rückgabetypen für jede Abfragemethode der Schnittstelle Data.

Tabelle 1. Schlüssel zur Tabelle der Rückgabetypen
Abkürzung Bedeutung
I Iterator
L List
M Map
O Object
RS ResultSet
S String
T generische Klasse, die eine Wrapperklasse für einen Java-Basiselementtyp oder eine Bean sein kann
Tabelle 2. Rückgabetypen für die einzelnen queryXxx()-Methoden in der Schnittstelle Data.
  Rückgabetypen
queryXxx()-Methoden RS L<M<S,O>> L<T> M<S,O> M<S,O>[] <T> <T>[] I<M<S,O>> I<T>
Data.queryArray()         X        
Data.queryArray() mit returnClass             X    
Data.queryArray() mit RowHandler             X    
Data.queryList()   X              
Data.queryList() mit returnClass     X            
Data.queryList() mit RowHandler     X            
Data.queryIterator()               X  
Data.queryIterator() mit returnClass                 X
Data.queryIterator() mit RowHandler                 X
Data.queryFirst()       X          
Data.queryFirst() mit returnClass           X      
Data.queryFirst() mit RowHandler           X      
Data.queryResults() X                
Data.query() mit ResultHandler           X      

In der folgenden Liste werden die grundlegenden Rückgabetypen beschrieben:

Iterator<T>

Gibt an, dass ein Objekt Iterator zurückgegeben wird, wobei jedes Element einer Zeile entspricht. Der parametrisierte Typ T muss angegeben werden.

Iteratoren in pureQuery weisen den Typ ResultIterator auf. Sie müssen Iteratoren mit der Methode ResultIterator.close() schließen, wenn Sie sie nicht mehr verwenden.

List<T>
Gibt an, dass ein Objekt List des Typs T zurückgegeben wird. Wenn die angegebene SQL-Anweisung eine Abfrage ist, entspricht jedes Element einer Zeile des Abfrageergebnisses.
Alle Zeilen des Abfrageergebnisses werden gespeichert, wenn die Methode aufgerufen wird, und jedes zugrunde liegende Datenbankobjekt ResultSet wird geschlossen.
Map<String,Object>
Gibt an, dass ein Objekt Map erstellt und zurückgegeben wird. Die Kennungen der Rückkehrspalten der SQL-Anweisung werden zu den Schlüsseln der Map. Die Spaltenkennungen werden in Kleinbuchstaben umgesetzt, um eine höhere Übereinstimmung mit der allgemeinen Java-Codedarstellung zu erreichen. Die entsprechenden Spaltenwerte aus einer Zeile des Abfrageergebnisses nehmen die Werte des Objekts Map an.

Wenn die angegebene SQL-Anweisung eine Abfrage ist und mehrere Zeilen zutreffen, wird der Wert aus der ersten Zeile zurückgegeben.

Jedes zugrunde liegende Datenbankobjekt ResultSet wird geschlossen.

<T>

Gibt an, dass ein Skalar oder eine Bean zurückgegeben wird. Ein Skalar könnte ein Wrapper wie z. B. Double sein oder ein Typ String (Zeichenfolge), Date (Datum) oder Timestamp (Zeitmarke).

Wenn mehrere Zeilen zutreffen, wird der Wert aus der ersten Zeile zurückgegeben.

Jedes zugrunde liegende Datenbankobjekt ResultSet wird geschlossen.

<T>[]
Gibt an, dass ein Array des Typs T zurückgegeben wird, wie z. B. Employee[], Integer[] oder String[]. Jedes Element entspricht einer Zeile des Abfrageergebnisses.
Alle Zeilen des Abfrageergebnisses werden gespeichert, wenn die Methode aufgerufen wird, und jedes zugrunde liegende Datenbankobjekt ResultSet wird geschlossen.

Einschränkung für die Rückgabe von <T>-Objekten

Wenn Sie eine Methode der Schnittstelle Data verwenden, geben Sie keine generische Klasse <T> an, bei der es sich um eine der <Java-Basiselementtyp>-.class-Klassen handelt, etwa int.class.

Die Informationen hinsichtlich SQL-Nullwerten gehen verloren, wenn aus SQL abgefragte Informationen in einem Java-Basiselementtyp gespeichert werden. Außerdem erfordert Java, dass eine generische Methode, die eine generische Klasse <T> von <Java-Basiselementtyp>.class angibt, eine Instanz der Wrapperklasse zurückgeben muss, die für den Java-Basiselementtyp geeignet ist.

Java lässt z. B. keine Methodenaufrufe wie die folgenden zu:
int tCount = data.queryFirst("select ...", int.class, p);
Dies deshalb, weil die Methode queryFirst() wie folgt definiert ist:
<T> T data.queryFirst(String sql, Class<T> returnType, Object... params);
Die deklarierte Klasse von tCount muss Integer sein.
Integer tCount = data.queryFirst("select ...", Integer.class, p);

Feedback