tl  tr
  Home | Tutorials | Articles | Videos | Products | Tools | Search
Interviews | Open Source | Tag Cloud | Follow Us | Bookmark | Contact   
 Spring > JDBC > ResultSet Extractor

ResultSet Extractor 

Spring JDBC Framework simplifies the use of JDBC and helps to avoid common errors. The following example shows using ResultSetExtractor interface. This callback interface is useful for processing the entire resultset. The RowLimitResultSetExtractor given in this examples limits the number of records to process by user given value.

  

File Name  :  
/SpringJDBC001/conf/basic/applicationContext.xml 

File Name  :  
com/bethecoder/tutorials/spring3/basic/User.java 
   
package com.bethecoder.tutorials.spring3.basic;

public class User {

  private int userId;
  private String userName;
  private int age;
  private long salary;
  
  public User() {
  }

  public User(int userId, String userName, int age, long salary) {
    super();
    this.userId = userId;
    this.userName = userName;
    this.age = age;
    this.salary = salary;
  }
  
  public int getUserId() {
    return userId;
  }
  public void setUserId(int userId) {
    this.userId = userId;
  }
  public String getUserName() {
    return userName;
  }
  public void setUserName(String userName) {
    this.userName = userName;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public long getSalary() {
    return salary;
  }
  public void setSalary(long salary) {
    this.salary = salary;
  }
  
  public String toString() {
    return "User[" + userId + ", " + userName + ", " + age + ", " + salary + "]";
  }
}
   

File Name  :  
com/bethecoder/tutorials/spring3/basic/BugStat.java 
   
package com.bethecoder.tutorials.spring3.basic;

public class BugStat {

  private int bugStatId;
  private String bugStatus;
  private int bugCount;
  
  public BugStat() {
  }

  public BugStat(int bugStatId, String bugStatus, int bugCount) {
    super();
    this.bugStatId = bugStatId;
    this.bugStatus = bugStatus;
    this.bugCount = bugCount;
  }
  
  public int getBugStatId() {
    return bugStatId;
  }
  public void setBugStatId(int bugStatId) {
    this.bugStatId = bugStatId;
  }
  public String getBugStatus() {
    return bugStatus;
  }
  public void setBugStatus(String bugStatus) {
    this.bugStatus = bugStatus;
  }
  public int getBugCount() {
    return bugCount;
  }
  public void setBugCount(int bugCount) {
    this.bugCount = bugCount;
  }
  
  public String toString() {
    return "[" + bugStatId + "," + bugStatus + ", " + bugCount + "]";
  }
}
   

File Name  :  
com/bethecoder/tutorials/spring3/tests/ResultSetExtractorTest.java 
Author  :  Sudhakar KV
Email  :  [email protected]
   
package com.bethecoder.tutorials.spring3.tests;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.core.RowMapper;

import com.bethecoder.tutorials.spring3.basic.BugStat;
import com.bethecoder.tutorials.spring3.basic.User;

public class ResultSetExtractorTest {

  /**
   @param args
   */
  public static void main(String[] args) {
    
    /**
     * Initialize context and get the JdbcTemplate
     */
    ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    DataSource dataSource = (DataSourceappContext.getBean("dataSource");
    JdbcTemplate template = new JdbcTemplate(dataSource);

    int limitRowsBy = 2;
    List<User> users = template.query(
        "select ID as userId, NAME as userName, age, salary from USER"
        new RowLimitResultSetExtractor<User>(
          new BeanPropertyRowMapper<User>(User.class), limitRowsBy));
        
    System.out.println(users);
    
    List<BugStat> stats = template.query(
        "select ID as bugStatId, STATUS as bugStatus, COUNT as bugCount from BUG_STAT"
        new RowLimitResultSetExtractor<BugStat>(
          new BeanPropertyRowMapper<BugStat>(BugStat.class), limitRowsBy));
        
    System.out.println(stats);
  }
}

class RowLimitResultSetExtractor<T> implements ResultSetExtractor<List<T>> {

  private RowMapper<T> rowMapper;
  private int limitBy;
  
  public RowLimitResultSetExtractor(RowMapper<T> rowMapper, int limitBy) {
    this.rowMapper = rowMapper;
    this.limitBy = limitBy;
  }
  
  //Invoked only once for processing the entire result set.
  @Override
  public List<T> extractData(ResultSet rsthrows SQLException, DataAccessException {
    List<T> results =  new ArrayList<T>();
    int rowNum = 0;
    while (rs.next() && rowNum < limitBy) {
      results.add(this.rowMapper.mapRow(rs, rowNum++));
    }
    return results;
  }
}
   

It gives the following output,
[User[1, Sriram, 2, 20000000], User[2, Anu, 28, 4800000]]
[[1,NEW, 8], [2,ASSIGNED, 12]]



 
  


  
bl  br