Interfaccia ResultSetHandler

Il org.apache.commons.dbutils.ResultSetHandler l'interfaccia è responsabile della conversione dei ResultSet in oggetti.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per la classe org.apache.commons.dbutils.ResultSetHandler -

public interface ResultSetHandler<T>

Utilizzo

  • Step 1 - Crea un oggetto di connessione.

  • Step 2 - Crea l'implementazione di ResultSetHandler.

  • Step 3 - Passa resultSetHandler all'oggetto QueryRunner ed effettua operazioni sul database.

Esempio

L'esempio seguente dimostrerà come mappare un record utilizzando la classe ResultSetHandler. Leggeremo uno dei record disponibili nella tabella Employee.

Sintassi

Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

Dove,

  • resultHandler - Oggetto ResultSetHandler per mappare il set di risultati all'oggetto Employee.

  • queryRunner - Oggetto QueryRunner per leggere l'oggetto dipendente dal database.

Per comprendere i concetti sopra menzionati relativi a DBUtils, scriviamo un esempio che eseguirà una query di lettura. Per scrivere il nostro esempio, creiamo un'applicazione di esempio.

Passo Descrizione
1 Aggiorna il file MainApp.java creato nel capitolo DBUtils - Prima applicazione .
2 Compilare ed eseguire l'applicazione come spiegato di seguito.

Di seguito è riportato il contenuto del file Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

Di seguito è riportato il contenuto del file MainApp.java file.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Arrays;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";

   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();
      
      //Step 1: Register JDBC driver
      DbUtils.loadDriver(JDBC_DRIVER);

      //Step 2: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);

      //Step 3: Create a ResultSet Handler to handle Employee Beans
      ResultSetHandler<Object[]> handler = new ResultSetHandler<Object[]>() {
         public Object[] handle(ResultSet rs) throws SQLException {
            if (!rs.next()) {
               return null;
            }
            ResultSetMetaData meta = rs.getMetaData();
            int cols = meta.getColumnCount();
            Object[] result = new Object[cols];

            for (int i = 0; i < cols; i++) {
               result[i] = rs.getObject(i + 1);
            }
            return result;
         }
      };

      try {
         Object[] result  = queryRunner.query(conn, "SELECT * FROM employees WHERE id=?",
            handler, 103);
         //Display values
         System.out.print("Result: " + Arrays.toString(result));            
      } finally {
         DbUtils.close(conn);
      }              
   }
}

Una volta che hai finito di creare i file sorgente, eseguiamo l'applicazione. Se tutto va bene con la tua applicazione, verrà stampato il seguente messaggio.

Connecting to database...
Result: [103, 33, Sumit, Mittal]