Use JdbcTemplate To Execute Aggregate Function : JdbcTemplate « Spring « Java Tutorial






File: EmployeeDaoImpl.java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback;
import org.springframework.jdbc.core.support.AbstractLobStreamingResultSetExtractor;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.object.MappingSqlQuery;
import org.springframework.jdbc.object.SqlUpdate;
import org.springframework.jdbc.object.StoredProcedure;
import org.springframework.jdbc.support.lob.DefaultLobHandler;
import org.springframework.jdbc.support.lob.LobCreator;
import org.springframework.jdbc.support.lob.LobHandler;
import org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor;
import org.springframework.util.FileCopyUtils;

//import org.apache.commons.dbcp.BasicDataSource;


public class EmployeeDaoImpl extends JdbcDaoSupport{
  protected void initDao() throws Exception {
    super.initDao();
    getJdbcTemplate().setNativeJdbcExtractor(new SimpleNativeJdbcExtractor());

  }

  public int getTotalNumberOfEmployees() {
    return getJdbcTemplate().queryForInt("SELECT COUNT(0) FROM employees");
  }
  public long getTotalAge() {
    return getJdbcTemplate().queryForLong("SELECT SUM(age) FROM employee");
  }

  public long getAverageAge() {
    return getJdbcTemplate().queryForLong("SELECT AVG(age) FROM employee");
  }

  public long getOldestAge() {
    return getJdbcTemplate().queryForLong("SELECT MAX(age) FROM employee");
  }

  public long getYoungestAge() {
    return getJdbcTemplate().queryForLong("SELECT MIN(age) FROM employee");
  }

}


class Employee {
  private Integer id;

  private Name name = new Name();

  private Integer age;

  private Sex sex;

  private Address address = new Address();

  private List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>();

  public Employee() {
  }

  public Employee(String firstName, String lastName) {
    this.getName().setFirst(firstName);
    this.getName().setLast(lastName);
  }

  void setId(Integer id) {
    this.id = id;
  }

  public Integer getId() {
    return id;
  }

  public Address getAddress() {
    return address;
  }

  public Integer getAge() {
    return age;
  }

  public void setAge(Integer age) {
    this.age = age;
  }

  public Name getName() {
    return name;
  }

  public List<PhoneNumber> getPhoneNumbers() {
    return Collections.unmodifiableList(phoneNumbers);
  }

  public void addPhoneNumber(PhoneNumber phoneNumber) {
    this.phoneNumbers.add(phoneNumber);
  }

  public void removePhoneNumber(PhoneNumber phoneNumber) {
    this.phoneNumbers.remove(phoneNumber);
  }

  public void removePhoneNumber(int index) {
    this.phoneNumbers.remove(index);
  }

  public Sex getSex() {
    return sex;
  }

  public void setSex(Sex sex) {
    this.sex = sex;
  }
}

abstract class Sex {

  public static final Sex MALE = new Male();

  public static final Sex FEMALE = new Female();

  public boolean equals(Object o) {
    if (o == null) {
      return false;
    }
    return getClass().equals(o.getClass());
  }
}

class PhoneNumber {

}

class Address {
  private String line1;

  private String line2;

  private String city;

  private String state;

  private String zip;

  public void setLine1(String line1) {
    this.line1 = line1;
  }

  public String getLine1() {
    return this.line1;
  }

  public void setLine2(String line2) {
    this.line2 = line2;
  }

  public String getLine2() {
    return this.line2;
  }

  public void setCity(String city) {
    this.city = city;
  }

  public String getCity() {
    return this.city;
  }

  public void setState(String state) {
    this.state = state;
  }

  public String getState() {
    return this.state;
  }

  public void setZip(String zip) {
    this.zip = zip;
  }

  public String getZip() {
    return this.zip;
  }
}

final class Male extends Sex {
  protected Male() {

  }
}

final class Female extends Sex {
  protected Female() {

  }
}


class Name {
  private String first;

  private String middle;

  private String last;

  public void setFirst(String first) {
    this.first = first;
  }

  public String getFirst() {
    return this.first;
  }

  public void setMiddle(String middle) {
    this.middle = middle;
  }

  public String getMiddle() {
    return this.middle;
  }

  public void setLast(String last) {
    this.last = last;
  }

  public String getLast() {
    return this.last;
  }
}

File: Main.java

import java.util.Date;
import java.util.GregorianCalendar;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

class Main {
  public static void main(String args[]) throws Exception {
    ApplicationContext ctx = new ClassPathXmlApplicationContext(
        "context.xml");
    EmployeeDaoImpl ws = (EmployeeDaoImpl) ctx.getBean("employeeDao");

  }
}

File: context.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
  <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
  <property name="url" value="jdbc:hsqldb:mem:."/>
  <property name="username" value="sa"/>
  <property name="password" value=""/>
</bean>

<bean id="employeeDao" class="EmployeeDaoImpl">
  <property name="dataSource" ref="dataSource"/>
</bean>

</beans>
  Download:  Spring-UseJdbcTemplateToExecuteAggregateFunction.zip( 3,660 k)








28.21.JdbcTemplate
28.21.1.Use QueryForInt To Execute Aggregate Function
28.21.2.Use JdbcTemplate To Execute Aggregate Function
28.21.3.Use Jdbc Template To Create Table
28.21.4.Use batchUpdate To Execute Two Update Statements
28.21.5.Update, Delete Statements With Jdbc Template
28.21.6.Execute DeleteStatement
28.21.7.Query For Object, Return String
28.21.8.Query For Map
28.21.9.Query For List, Returns List Of LinkedHashMap
28.21.10.Query For List
28.21.11.Pass RowCallbackHandler Into Query Method In JdbcTemplate
28.21.12.Pass ResultSetExtractor To Query Method In JdbcTemplate
28.21.13.Pass Parameter As Object Array
28.21.14.Pass Object Array To Query Method In JdbcTemplate
28.21.15.Number Of Row Affected