2016-03-30 2 views
1

У меня есть этот запрос:Spring: предыдущая строка в JDBC шаблона

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; 
    } 

в BPartnerMapper, я хочу сделать следующее:

получить предыдущие элементов в ResultSet, чтобы сравнить его с фактической линией

@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 
    } 

Я получаю ошибку в rs.previous():

java.sql.SQLException: Invalid operation for forward only resultset : previous 

как я могу исправить это, чтобы получить previous элементы resultSet

+0

Сообщите код, в котором вы создаете 'Statement' – Rehman

+0

Вы не должны выполнять' next() 'или' previous() 'в первую очередь в' RowMapper'. Вы должны использовать 'ResultSetExtractor' и просто перебирать результаты (сохранять последний и сравнивать со следующим). Вместо того, чтобы возвращаться и двигаться вперед. Вы также не должны создавать 'JdbcTemplate' каждый раз, когда вам это нужно, производительность не очень умная, поскольку это тяжелый объект для построения. –

+0

Каков ваш прецедент, зачем вам это сравнение? –

ответ

0

Вы не можете позвонить prev() или next() на ResultSet, как это предварительно инициализируется для текущей строки.

Из Spring документирования mapRow():

Реализации должны реализовать этот метод для отображения каждой строки данных в ResultSet. Этот метод не должен вызывать next() в ResultSet; он должен только отображать значения текущей строки.

То, что вы должны делать вместо этого:

  1. Получить ArrayList из вашего query().
  2. Итерируйте этот список и выполните необходимые сравнения.
Смежные вопросы