2014-06-14 15 views
10

Kann ich queryForMap verwenden, wenn mehrere Zeilen von der Abfrage zurückgegeben werden.JDBCTemplate queryForMap zum Abrufen mehrerer Zeilen

Für eine einzelne Zeile funktioniert der folgende Code einwandfrei.

public Map<String, Object> retrieveMultipleRowsColumns(String deptName){ 
    return jdbcTemplate.queryForMap("SELECT DEPT_ID,DEPT_NAME FROM DEPT WHERE DEPT_NAME = ?", deptName); 
} 

Wie ändert man das für mehrere Zeilen?

+0

Welche Datenbank verwenden Sie? –

+0

Ich benutze Oracle 10g; ist es datenbankabhängig? – user182944

Antwort

12

Verwenden Sie queryForListsee the javadoc for full details. Es gibt List<Map<String,Object>>

public List<Map<String, Object>> retrieveMultipleRowsColumns(String deptName){ 
    return jdbcTemplate.queryForList("SELECT DEPT_ID,DEPT_NAME FROM DEPT WHERE DEPT_NAME = ?", deptName); 
} 
+4

Eine Liste von Karten ist nicht sehr nützlich. –

+1

Falsch, eine Liste von Karten kann je nach Kontext sehr nützlich sein. –

-2
public <T> List<T> queryForList(String sql, 
          Class<T> elementType, 
          Object... args) 
       throws DataAccessException 

Beschreibung von Schnittstelle kopiert: JdbcOperations Abfrage angegeben SQL eine vorbereitete Anweisung von SQL und eine Liste von Argumenten für die Abfrage, erwartet eine Ergebnisliste zu binden, zu erstellen. Die Ergebnisse werden einer Liste (ein Eintrag für jede Zeile) von Ergebnisobjekten zugeordnet, von denen jedes dem angegebenen Elementtyp entspricht.

definiert durch: queryForList in Schnittstelle JdbcOperations, Parameters:sql - SQL-Abfrage element auszuführen - die erforderliche Art von Elemente in der Ergebnisliste (zB Integer.class) args - Argumente, um die Abfrage zu binden (so dass es zu PreparedStatement, um den entsprechenden SQL-Typ zu erraten); möglicherweise auch contain SqlParameterValue Objekte, die nicht nur den Argumentwert angeben, sondern auch den SQL-Typ und optional die Skalierung. Rückgabewerte: a Liste der Objekte, die dem angegebenen Elementtyp entsprechen Auslöser: DataAccessException - wenn die Abfrage fehlschlägt Siehe auch: JdbcOperations.queryForList (String, Class) , SingleColumnRowMapper

15

Ich weiß, das ist wirklich alt, aber es gibt eine viel einfachere Möglichkeit, dies zu tun, wenn Sie nach einer Karte suchen.

Implementieren Sie einfach die Schnittstelle ResultSetExtractor, um den Typ zu definieren, den Sie zurückgeben möchten. Im Folgenden finden Sie ein Beispiel für die Verwendung. Sie werden es manuell zuordnen, aber für eine einfache Karte sollte es einfach sein.

jdbcTemplate.query("select string1,string2 from table where x=1", new ResultSetExtractor<Map>(){ 
    @Override 
    public Map extractData(ResultSet rs) throws SQLException,DataAccessException { 
     HashMap<String,String> mapRet= new HashMap<String,String>(); 
     while(rs.next()){ 
      mapRet.put(rs.getString("string1"),rs.getString("string2")); 
     } 
     return mapRet; 
    } 
}); 

Dies gibt Ihnen einen Rückgabetyp von Karte, die mehrere Zeilen (aber viele Ihrer Abfrage zurückgegeben) und nicht eine Liste von Karten hat. Sie können die Dokumentation zu ResultSetExtractor hier anzeigen: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/ResultSetExtractor.html

Verwandte Themen