2016-03-30 10 views
1

私は、この要求があります。BPartnerMapper春: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; 
    } 

を、私は次の操作を実行したい:

実際のラインと比較した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 

は、どのように私はそれが現在の行のために事前に初期化としてあなたがResultSetにprev()またはnext()を呼び出すことはできませんresultSet

+0

'Statement'を作成しているコードを投稿してください – Rehman

+0

' RowMapper'の最初の部分で 'next()'や 'previous()'をしてはいけません。あなたは 'ResultSetExtractor'を使用し、結果を繰り返し処理します(最後のものを保持し、次のものと比較する)。前後に行くのではなく。必要なときには 'JdbcTemplate'も作成してはいけません。パフォーマンス面ではそれほどスマートではありません。 –

+0

あなたのユースケースは何ですか、なぜこの比較を行う必要がありますか? –

答えて

0

previous要素を取得することを修正することができます。 mapRow()の春ドキュメントから

実装は、ResultSet内のデータの各行をマッピングするために、このメソッドを実装しなければなりません。このメソッドは、ResultSetのnext()を呼び出すべきではありません。現在の行の値をマップすることのみが想定されています。

あなたが代わりにやるべきことは次のとおりです。

  1. あなたquery()のうち、ArrayListを取得します。
  2. このリストを反復し、必要な比較を行います。
関連する問題