Spring JDBC - ResultSetExtractor-Schnittstelle

Das org.springframework.jdbc.core.ResultSetExtractorinterface ist eine Rückrufschnittstelle, die von den Abfragemethoden von JdbcTemplate verwendet wird. Implementierungen dieser Schnittstelle führen die eigentliche Arbeit zum Extrahieren von Ergebnissen aus einem ResultSet aus, müssen sich jedoch nicht um die Ausnahmebehandlung kümmern.

SQLExceptions werden vom aufrufenden JdbcTemplate abgefangen und verarbeitet. Diese Schnittstelle wird hauptsächlich im JDBC-Framework selbst verwendet. Ein RowMapper ist normalerweise eine einfachere Wahl für die ResultSet-Verarbeitung, da ein Ergebnisobjekt pro Zeile anstelle eines Ergebnisobjekts für das gesamte ResultSet zugeordnet wird.

Schnittstellendeklaration

Es folgt die Deklaration für die Schnittstelle org.springframework.jdbc.core.ResultSetExtractor -

public interface ResultSetExtractor

Verwendung

Step 1 - Erstellen Sie ein JdbcTemplate-Objekt mit einer konfigurierten Datenquelle.

Step 2 - Verwenden Sie JdbcTemplate-Objektmethoden, um Datenbankoperationen durchzuführen, während Sie die Ergebnismenge mit ResultSetExtractor analysieren.

Beispiel

Das folgende Beispiel zeigt, wie eine Abfrage mithilfe der JdbcTemplate-Klasse und der ResultSetExtractor-Schnittstelle gelesen wird. Wir werden die verfügbaren Aufzeichnungen eines Schülers in der Schülertabelle lesen.

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;
}

Wo,

  • SQL - Wählen Sie die Abfrage aus, um die Schüler zu lesen.

  • jdbcTemplateObject - StudentJDBCTemplate-Objekt zum Lesen des Schülerobjekts aus der Datenbank.

  • ResultSetExtractor - ResultSetExtractor-Objekt zum Analysieren des Ergebnismengenobjekts.

Um die oben genannten Konzepte im Zusammenhang mit Spring JDBC zu verstehen, schreiben wir ein Beispiel, in dem eine Abfrage ausgewählt wird. Um unser Beispiel zu schreiben, lassen Sie uns eine funktionierende Eclipse-IDE einrichten und führen Sie die folgenden Schritte aus, um eine Spring-Anwendung zu erstellen.

Schritt Beschreibung
1 Aktualisieren Sie das unter Student Spring JDBC - First Application erstellte Projekt Student .
2 Aktualisieren Sie die Bean-Konfiguration und führen Sie die Anwendung wie unten erläutert aus.

Im Folgenden finden Sie den Inhalt der Data Access Object-Schnittstellendatei 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();
}

Es folgt der Inhalt der Student.java Datei.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   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;
   }
}

Es folgt die Implementierungsklassendatei StudentJDBCTemplate.java für die definierte DAO-Schnittstelle StudentDAO.

package com.tutorialspoint;

import java.util.List;
import java.util.ArrayList;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   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;
   }
}

Es folgt der Inhalt der MainApp.java Datei.

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) {
      ApplicationContext context = 
         new ClassPathXmlApplicationContext("Beans.xml");
      
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");

      List<Student> students = studentJDBCTemplate.listStudents();

      for(Student student: students){
         System.out.print("ID : " + student.getId() );
         System.out.println(", Age : " + student.getAge()); 
      }
   }
}

Es folgt die Konfigurationsdatei 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.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>

Nachdem Sie die Quell- und Bean-Konfigurationsdateien erstellt haben, lassen Sie uns die Anwendung ausführen. Wenn mit Ihrer Anwendung alles in Ordnung ist, wird die folgende Meldung gedruckt.

ID : 1, Age : 17
ID : 3, Age : 18