Interface AsyncQueryRunner

le org.apache.commons.dbutils.AsyncQueryRunnerLa classe aide à exécuter des requêtes SQL de longue durée avec prise en charge asynchrone. Cette classe est thread-safe. Cette classe prend en charge les mêmes méthodes que QueryRunner mais elle renvoie des objets Callable qui peuvent être utilisés plus tard pour récupérer le résultat.

Déclaration de classe

Voici la déclaration de la classe org.apache.commons.dbutils.AsyncQueryRunner -

public class AsyncQueryRunner
   extends AbstractQueryRunner

Usage

  • Step 1 - Créez un objet de connexion.

  • Step 2 - Utilisez les méthodes d'objet AsyncQueryRunner pour effectuer des opérations de base de données.

Exemple

L'exemple suivant montre comment mettre à jour un enregistrement à l'aide de la classe AsyncQueryRunner. Nous mettrons à jour l'un des enregistrements disponibles dans la table des employés.

Syntaxe

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

Où,

  • updateQuery - Mettre à jour la requête ayant des espaces réservés.

  • asyncQueryRunner - Objet asyncQueryRunner pour mettre à jour l'objet employé dans la base de données.

  • future - Objet futur pour récupérer le résultat plus tard.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de mise à jour en mode asynchrone. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé sous le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la MainApp.java fichier.

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

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant.

1 record(s) updated.