Interface AsyncQueryRunner

o org.apache.commons.dbutils.AsyncQueryRunnerclasse ajuda a executar consultas SQL de longa duração com suporte assíncrono. Esta classe é thread-safe. Esta classe suporta os mesmos métodos de QueryRunner, mas retorna objetos Callable que podem ser usados ​​posteriormente para recuperar o resultado.

Declaração de Classe

A seguir está a declaração para a classe org.apache.commons.dbutils.AsyncQueryRunner -

public class AsyncQueryRunner
   extends AbstractQueryRunner

Uso

  • Step 1 - Crie um objeto de conexão.

  • Step 2 - Use métodos de objeto AsyncQueryRunner para fazer operações de banco de dados.

Exemplo

O exemplo a seguir demonstrará como atualizar um registro usando a classe AsyncQueryRunner. Atualizaremos um dos registros disponíveis na Tabela de funcionários.

Sintaxe

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

Onde,

  • updateQuery - Atualizar a consulta com marcadores.

  • asyncQueryRunner - objeto asyncQueryRunner para atualizar o objeto funcionário no banco de dados.

  • future - Objeto futuro para recuperar o resultado mais tarde.

Para entender os conceitos mencionados acima relacionados aos DBUtils, vamos escrever um exemplo que executará uma consulta de atualização no modo assíncrono. Para escrever nosso exemplo, vamos criar um aplicativo de amostra.

Degrau Descrição
1 Atualize o arquivo MainApp.java criado no capítulo DBUtils - Primeiro Aplicativo .
2 Compile e execute o aplicativo conforme explicado a seguir.

A seguir está o conteúdo do 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 seguir está o conteúdo do MainApp.java Arquivo.

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

Quando terminar de criar os arquivos de origem, vamos executar o aplicativo. Se tudo estiver bem com o seu aplicativo, ele imprimirá a seguinte mensagem.

1 record(s) updated.