Dbutils 简明教程

AsyncQueryRunner interface

org.apache.commons.dbutils.AsyncQueryRunner 类可帮助以异步支持执行长时间运行的 SQL 查询。该类是线程安全的。该类支持与 QueryRunner 相同的方法,但它返回 Callable 对象,可用于稍后检索结果。

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

以下是 org.apache.commons.dbutils.AsyncQueryRunner 类的声明 −

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

public class AsyncQueryRunner
   extends AbstractQueryRunner

Usage

  1. Step 1 − Create a connection object.

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

Example

下面的示例将演示如何使用 AsyncQueryRunner 类更新记录。我们将更新 employee 表中可用的一个记录。

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,

  1. updateQuery − Update query having placeholders.

  2. asyncQueryRunner − asyncQueryRunner object to update employee object in database.

  3. future − Future object to retrieve result later.

为了了解与 DBUtils 相关的上述概念,让我们编写一个将以异步模式运行更新查询的示例。为了编写我们的示例,让我们创建一个示例应用程序。

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 application.

Step

Description

1

Update the file MainApp.java created under chapter DBUtils - First Application.

2

Compile and run the application as explained below.

以下是 Employee.java 的内容。

Following is the content of the 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;
   }
}

以下是 MainApp.java 文件的内容。

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;

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

一旦你创建好源文件,让我们运行应用程序。如果你的应用程序没有问题,它将打印以下消息。

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

1 record(s) updated.