Interfaz AsyncQueryRunner

los org.apache.commons.dbutils.AsyncQueryRunnerLa clase ayuda a ejecutar consultas SQL de larga ejecución con soporte asincrónico. Esta clase es segura para subprocesos. Esta clase admite los mismos métodos que QueryRunner pero devuelve objetos invocables que se pueden usar más tarde para recuperar el resultado.

Declaración de clase

A continuación se muestra la declaración de la clase org.apache.commons.dbutils.AsyncQueryRunner:

public class AsyncQueryRunner
   extends AbstractQueryRunner

Uso

  • Step 1 - Crea un objeto de conexión.

  • Step 2 - Utilice los métodos de objeto AsyncQueryRunner para realizar operaciones en la base de datos.

Ejemplo

El siguiente ejemplo demostrará cómo actualizar un registro usando la clase AsyncQueryRunner. Actualizaremos uno de los registros disponibles en la tabla de empleados.

Sintaxis

String updateQuery = "UPDATE employees SET age=? WHERE id=?";
future = asyncQueryRunner.update(conn,
            "UPDATE employees SET age=? WHERE id=?", 33,103);

Dónde,

  • updateQuery - Actualización de la consulta con marcadores de posición.

  • asyncQueryRunner - objeto asyncQueryRunner para actualizar el objeto del empleado en la base de datos.

  • future - Objeto futuro para recuperar el resultado más tarde.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de actualización en modo asíncrono. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la 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;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

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

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException; 
import java.util.concurrent.ExecutorCompletionService; 
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; 
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

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, InterruptedException, 
      ExecutionException, TimeoutException {
      Connection conn = null;

      AsyncQueryRunner asyncQueryRunner = new AsyncQueryRunner( Executors.newCachedThreadPool());

      DbUtils.loadDriver(JDBC_DRIVER);       
      conn = DriverManager.getConnection(DB_URL, USER, PASS);
      Future<Integer> future = null;
      try {
         future = asyncQueryRunner.update(conn, 
            "UPDATE employees SET age=? WHERE id=?", 33,103);         
         Integer updatedRecords = future.get(10, TimeUnit.SECONDS);
         System.out.println(updatedRecords + " record(s) updated.");
      } finally {
         DbUtils.close(conn);
      }  
   }
}

Una vez que haya terminado de crear los archivos fuente, ejecutemos la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje.

1 record(s) updated.