AsyncQueryRunner接口

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

1 QueryRunner的语法

String updateQuery = "UPDATE customer SET name=? WHERE id=?";
future = asyncQueryRunner.update(conn,
            updateQuery , "rolse",14);

2 QueryRunner的示例

2.1 编写Customer实体类

package com.yiidian.domain;

/**
 * 一点教程网 - http://www.yiidian.com
 */
public class Customer {
    private Integer id;
    private String name;
    private String gender;
    private String telephone;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

2.2 编写核心类

MainApp:

package com.yiidian.dbutils;

import com.yiidian.domain.Customer;
import org.apache.commons.dbutils.AsyncQueryRunner;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

/**
 * 一点教程网 - http://www.yiidian.com
 */
public class MainApp {
    // 驱动程序
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    // URL连接
    static final String DB_URL = "jdbc:mysql://localhost:3306/test";

    //数据库信息
    static final String USER = "root";
    static final String PASS = "root";

    public static void main(String[] args) throws SQLException {
        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 customer SET name=? WHERE id=?", "rose",4);

            Integer updatedRecords = future.get(10, TimeUnit.SECONDS);
            System.out.println("更新了 "+updatedRecords + " 条记录!");

        } catch(Exception e){
            System.out.println(e);
        }finally {
            DbUtils.close(conn);
        }
    }
}

2.3 运行测试

热门文章

优秀文章