Giao diện AsyncQueryRunner

Các org.apache.commons.dbutils.AsyncQueryRunnerlớp giúp thực thi các truy vấn SQL đang chạy dài với hỗ trợ không đồng bộ. Lớp này là luồng an toàn. Lớp này hỗ trợ các phương thức tương tự như QueryRunner nhưng nó trả về các đối tượng Callable có thể được sử dụng sau này để truy xuất kết quả.

Khai báo lớp học

Sau đây là khai báo cho lớp org.apache.commons.dbutils.AsyncQueryRunner:

public class AsyncQueryRunner
   extends AbstractQueryRunner

Sử dụng

  • Step 1 - Tạo đối tượng kết nối.

  • Step 2 - Sử dụng các phương thức đối tượng AsyncQueryRunner để thực hiện các thao tác với cơ sở dữ liệu.

Thí dụ

Ví dụ sau sẽ trình bày cách cập nhật bản ghi bằng lớp AsyncQueryRunner. Chúng tôi sẽ cập nhật một trong những bản ghi có sẵn trong Bảng nhân viên.

Cú pháp

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

Ở đâu,

  • updateQuery - Cập nhật truy vấn có trình giữ chỗ.

  • asyncQueryRunner - Đối tượng asyncQueryRunner để cập nhật đối tượng nhân viên trong cơ sở dữ liệu.

  • future - Đối tượng tương lai để lấy kết quả sau này.

Để hiểu các khái niệm được đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn cập nhật ở chế độ không đồng bộ. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

1 record(s) updated.