Interfaccia AsyncQueryRunner
Il org.apache.commons.dbutils.AsyncQueryRunnerclass aiuta a eseguire query SQL di lunga durata con supporto asincrono. Questa classe è thread-safe. Questa classe supporta gli stessi metodi di QueryRunner ma restituisce oggetti Callable che possono essere utilizzati in seguito per recuperare il risultato.
Dichiarazione di classe
Di seguito è riportata la dichiarazione per la classe org.apache.commons.dbutils.AsyncQueryRunner -
public class AsyncQueryRunner
extends AbstractQueryRunner
Utilizzo
Step 1 - Crea un oggetto di connessione.
Step 2 - Utilizzare i metodi dell'oggetto AsyncQueryRunner per eseguire operazioni sul database.
Esempio
L'esempio seguente mostrerà come aggiornare un record usando la classe AsyncQueryRunner. Aggiorneremo uno dei record disponibili nella tabella dei dipendenti.
Sintassi
String updateQuery = "UPDATE employees SET age=? WHERE id=?";
future = asyncQueryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,103);
Dove,
updateQuery - Aggiorna query con segnaposto.
asyncQueryRunner - Oggetto asyncQueryRunner per aggiornare l'oggetto dipendente nel database.
future - Oggetto futuro per recuperare il risultato in un secondo momento.
Per comprendere i concetti sopra menzionati relativi a DBUtils, scriviamo un esempio che eseguirà una query di aggiornamento in modalità asincrona. Per scrivere il nostro esempio, creiamo un'applicazione di esempio.
Passo | Descrizione |
---|---|
1 | Aggiorna il file MainApp.java creato nel capitolo DBUtils - Prima applicazione . |
2 | Compilare ed eseguire l'applicazione come spiegato di seguito. |
Di seguito è riportato il contenuto del file 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;
}
}
Di seguito è riportato il contenuto del file 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);
}
}
}
Una volta che hai finito di creare i file sorgente, eseguiamo l'applicazione. Se tutto va bene con la tua applicazione, verrà stampato il seguente messaggio.
1 record(s) updated.