2016-03-30 6 views
1

Ich habe diese Anfrage:Spring: vorherige Zeile in jdbc Vorlage

private List<IWsResponse> getBPartnerDetails(String valueNetwork, String reportLevel2) { 
     JdbcTemplate tm = new JdbcTemplate(ds.getDataSource()); 
     StringBuffer sql = new StringBuffer("SELECT * FROM XRV_BPARTNERDETAILS where rownum < 10 order by BPartner_ID"); 
     response = tm.query(sql.toString(), new BPartnerMapper()); 
     return response; 
    } 

im BPartnerMapper, ich folgendes tun:

erhalten die bisherigen Elemente im ResultSet vergleichen es mit der tatsächlichen Linie

@Override 
    public IWsResponse mapRow(ResultSet rs, int rowNum) throws SQLException { 
     rs.previous(); 
     int prev_Bpartner_ID = rs.getInt("BPARTNER_ID"); 
     int prev_Location_ID = rs.getInt("BPARTNER_LOCATION_ID"); 
     int prev_User_ID = rs.getInt("User_ID"); 
     rs.next(); 
     int Bpartner_ID = rs.getInt("BPARTNER_ID"); 
     int Location_ID = rs.getInt("BPARTNER_LOCATION_ID"); 
     int User_ID = rs.getInt("User_ID"); 
     // My code 
    } 

ich erhalte den Fehler in rs.previous():

wie kann ich beheben, dass die previous Elemente resultSet

+0

Geben Sie den Code ein, in dem Sie das 'Statement' erstellen – Rehman

+0

Sie sollten' next() 'oder' previous() 'nicht an erster Stelle in einem' RowMapper' ausführen. Sie sollten einen 'ResultSetExtractor' verwenden und einfach über die Ergebnisse iterieren (behalten Sie den letzten und vergleichen Sie ihn mit dem nächsten). Anstatt vorwärts und rückwärts zu gehen. Sie sollten auch nicht jedes Mal ein 'JdbcTemplate' erstellen, wenn Sie ein solches benötigen. Dies ist nicht sehr intelligent, da es sich um ein schweres Objekt handelt. –

+0

Was ist Ihr Anwendungsfall, warum müssen Sie diesen Vergleich durchführen? –

Antwort

0

bekommen Sie nicht prev() oder next() auf der ResultSet nennen kann, wie es für die aktuelle Zeile vorinitialisiert.

Vom Frühling Dokumentation von mapRow():

Implementationen müssen diese Methode implementieren jede Zeile von Daten in der ResultSet abzubilden. Diese Methode sollte next() im ResultSet nicht aufrufen. es soll nur Werte der aktuellen Zeile abbilden.

Was sollten Sie stattdessen tun ist:

  1. eine ArrayList aus Ihrem query() holen.
  2. Iterieren Sie diese Liste und führen Sie die erforderlichen Vergleiche durch.
Verwandte Themen