2017-01-04 5 views
0

Springを使用するJdbcTemplateこのようにselect文を実行します。JdbcTemplate.query(String query、ResultSetExtractor rs)メソッドを使用してspringでselectステートメントが動作する方法

JdbcTemplate jTemplate = container.getBean("jt", JdbcTemplate.class); 
String query = "select *from TB_CUMM_DEAL_CCY_DET where REF_NUM ='1452454'"; 
jTemplate.query(query, new MyResultSetExtractor()); 

このコードでは、jTemplate.query(query, new MyResultSetExtractor());が実行されます。いずれかを説明してください。

ありがとうございます。

MyResultSetExtractor.java:

public class MyResultSetExtractor implements ResultSetExtractor { 

    @Override 
    public Object extractData(ResultSet rs) throws SQLException, 
      DataAccessException { 
     String refNo = null; 
     while(rs.next()) { 
      refNo = rs.getString(2); 
      System.out.println(refNo); 
     } 

     return refNo; 
    } 
} 

答えて

0

ResultSetExtractorはちょうど全体のResultSetのための1つの結果オブジェクトを返します。行ごとに1つのオブジェクトを取得するRowMappeとの主な違いです。

ResultSetExtractorで行っていることは、各行(rs.next())を繰り返し処理しています。一度そこに行全体を表すオブジェクトを作成する必要があります。そのためには、ある特定のデータ型を提供するgetメソッドと、列番号を示すintまたは列名を示すStringの両方を引数として受け取るメソッドがあります。

簡単な例を示しましょう。 Personという名前のデータベースに、名前と姓の2つの文字列を持つ表があるとします。

あなたのオブジェクトは、次のとおりです。

public class Person { 

    private String name; 
    private String surname; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getSurname() { 
     return surname; 
    } 

    public void setSurname(String surname) { 
     this.surname = surname; 
    } 

} 

あなたResultSetExctractor:

public class MyResultSetExtractor implements ResultSetExtractor<List<Person>> { 

    @Override 
    public List<Person> extractData(ResultSet rs) throws SQLException, 
      DataAccessException { 
     List<Person> result = new ArrayList<>(); 
     while(rs.next()) { 
      Person person = new Person(); 
      person.setName(rs.getString(1)); 
      person.setSurname(rs.getString("surname")); 
      result.add(person); 
     } 

     return result; 
    } 
} 

シンプルな代替、RowMapperの持つ:

public class MyRowMapper implements RowMapper<Person> { 

    @Override 
    public Person mapRow(ResultSet rs, int rownumber) throws SQLException { 
     Person person = new Person(); 
     person.setName(rs.getString(1)); 
     person.setSurname(rs.getString("surname")); 
     return person; 
    };   
} 
関連する問題