English 中文(简体)
DBUtils - AsyncQueryRunner interface
  • 时间:2024-09-17

AsyncQueryRunner interface


Previous Page Next Page  

The org.apache.commons.dbutils.AsyncQueryRunner class helps to execute long running SQL queries with async support. This class is thread safe. This class supports same methods as QueryRunner but it return Callable objects which can be used later to retrieve the result.

Class Declaration

Following is the declaration for org.apache.commons.dbutils.AsyncQueryRunner class −


pubpc class AsyncQueryRunner
   extends AbstractQueryRunner

Usage

    Step 1 − Create a connection object.

    Step 2 − Use AsyncQueryRunner object methods to make database operations.

Example

Following example will demonstrate how to update a record using AsyncQueryRunner class. We ll update one of the available record in employee Table.

Syntax


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

Where,

    updateQuery − Update query having placeholders.

    asyncQueryRunner − asyncQueryRunner object to update employee object in database.

    future − Future object to retrieve result later.

To understand the above-mentioned concepts related to DBUtils, let us write an example which will run an update query in async mode. To write our example, let us create a sample apppcation.

Step Description
1 Update the file MainApp.java created under chapter DBUtils - First Apppcation.
2 Compile and run the apppcation as explained below.

Following is the content of the Employee.java.


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

Following is the content of the MainApp.java file.


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;

pubpc 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";

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

Once you are done creating the source files, let us run the apppcation. If everything is fine with your apppcation, it will print the following message.


1 record(s) updated.
Advertisements