
- Spring JDBC - Home
- Spring JDBC - Overview
- Spring JDBC - Environment Setup
- Spring JDBC - Configure Data Source
- Spring JDBC - First Application
- Basic CRUD Examples
- Spring JDBC - Create Query
- Spring JDBC - Read Query
- Spring JDBC - Update Query
- Spring JDBC - Delete Query
- Advanced JDBC Examples
- Calling Stored Procedure
- Spring JDBC - Calling Stored Function
- Spring JDBC - Handling BLOB
- Spring JDBC - Handling CLOB
- Spring JDBC Batch Examples
- Spring JDBC - Batch Operation
- Objects Batch Operation
- Multiple Batches Operation
- Spring JDBC Objects
- Spring JDBC - JdbcTemplate
- PreparedStatementSetter
- Spring JDBC - ResultSetExtractor
- Spring JDBC - RowMapper
- NamedParameterJdbcTemplate
- Spring JDBC - SimpleJdbcInsert
- Spring JDBC - SimpleJdbcCall
- Spring JDBC - SqlQuery
- Spring JDBC - SqlUpdate
- Spring JDBC - StoredProcedure
- Spring JDBC Useful Resources
- Spring JDBC - Quick Guide
- Spring JDBC - Useful Resources
- Spring JDBC - Discussion
Spring JDBC - ResultSetExtractor Interface
Overview
The org.springframework.jdbc.core.ResultSetExtractor interface is a callback interface used by JdbcTemplate's query methods. Implementations of this interface perform the actual work of extracting results from a ResultSet, but don't need to worry about exception handling.
SQLExceptions will be caught and handled by the calling JdbcTemplate. This interface is mainly used within the JDBC framework itself. A RowMapper is usually a simpler choice for ResultSet processing, mapping one result object per row instead of one result object for the entire ResultSet.
Interface Declaration
Following is the declaration for org.springframework.jdbc.core.ResultSetExtractor interface −
public interface ResultSetExtractor
Usage
Step 1 − Create a JdbcTemplate object using a configured datasource.
Step 2 − Use JdbcTemplate object methods to make database operations while parsing the resultset using ResultSetExtractor.
Example
Following example will demonstrate how to read a query using JdbcTemplate class and ResultSetExtractor interface. We'll read available record of a student in Student Table.
Syntax
public List<Student> listStudents() { String SQL = "select * from Student"; List <Student> students = jdbcTemplateObject.query( SQL, new ResultSetExtractor<List<Student>>(){ public List<Student> extractData(ResultSet rs) throws SQLException, DataAccessException { List<Student> list = new ArrayList<Student>(); while(rs.next()){ Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setAge(rs.getInt("age")); student.setDescription(rs.getString("description")); student.setImage(rs.getBytes("image")); list.add(student); } return list; } } ); return students; }
Where,
SQL − Select query to read students.
jdbcTemplateObject − StudentJDBCTemplate object to read student object from database.
ResultSetExtractor − ResultSetExtractor object to parse resultset object.
To understand the above-mentioned concepts related to Spring JDBC, let us write an example which will select a query. To write our example, let us have a working Eclipse IDE in place and use the following steps to create a Spring application.
Step | Description |
---|---|
1 | Update the project Student created under chapter Spring JDBC - First Application. |
2 | Update the bean configuration and run the application as explained below. |
StudentDAO.java
Following is the content of the Data Access Object interface file StudentDAO.java.
package com.tutorialspoint; import java.util.List; import javax.sql.DataSource; public interface StudentDAO { /** * This is the method to be used to initialize * database resources ie. connection. */ public void setDataSource(DataSource ds); /** * This is the method to be used to list down * all the records from the Student table. */ public List<Student> listStudents(); }
Student.java
Following is the content of the Student.java file.
package com.tutorialspoint; // Student POJO for Student Table public class Student { private Integer age; private String name; private Integer id; // setter/getter methods public void setAge(Integer age) { this.age = age; } public Integer getAge() { return age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setId(Integer id) { this.id = id; } public Integer getId() { return id; } }
StudentJDBCTemplate.java
Following is the implementation class file StudentJDBCTemplate.java for the defined DAO interface StudentDAO.
package com.tutorialspoint; import java.util.List; import java.util.ArrayList; import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate; // DAO instance to persist Student values public class StudentJDBCTemplate implements StudentDAO { private DataSource dataSource; private JdbcTemplate jdbcTemplateObject; // set the datasource and jdbctemplate public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; this.jdbcTemplateObject = new JdbcTemplate(dataSource); } // get all the students from the database public List<Student> listStudents() { String SQL = "select * from Student"; List <Student> students = jdbcTemplateObject.query(SQL, new ResultSetExtractor<List<Student>>(){ public List<Student> extractData(ResultSet rs) throws SQLException, DataAccessException { List<Student> list = new ArrayList<Student>(); while(rs.next()){ Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setAge(rs.getInt("age")); student.setDescription(rs.getString("description")); student.setImage(rs.getBytes("image")); list.add(student); } return list; } }); return students; } }
MainApp.java
Following is the content of the MainApp.java file.
package com.tutorialspoint; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { // Create the application context by reading Beans.xml ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); // Create the JDBCTemplate instance from spring context StudentJDBCTemplate studentJDBCTemplate = (StudentJDBCTemplate)context.getBean("studentJDBCTemplate"); // get all the students List<Student> students = studentJDBCTemplate.listStudents(); // print all the students for(Student student: students){ System.out.print("ID : " + student.getId() ); System.out.println(", Age : " + student.getAge()); } } }
Beans.xml
Following is the configuration file Beans.xml.
<?xml version = "1.0" encoding = "UTF-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd "> <!-- Initialization for data source --> <bean id = "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name = "driverClassName" value = "com.mysql.cj.jdbc.Driver"/> <property name = "url" value = "jdbc:mysql://localhost:3306/TEST"/> <property name = "username" value = "root"/> <property name = "password" value = "admin"/> </bean> <!-- Definition for studentJDBCTemplate bean --> <bean id = "studentJDBCTemplate" class = "com.tutorialspoint.StudentJDBCTemplate"> <property name = "dataSource" ref = "dataSource" /> </bean> </beans>
Output
Once you are done creating the source and bean configuration files, let us run the application. If everything is fine with your application, it will print the following message.
ID : 1, Age : 17 ID : 3, Age : 18