AsyncQueryRunner-Schnittstelle
Das org.apache.commons.dbutils.AsyncQueryRunnerKlasse hilft bei der Ausführung lang laufender SQL-Abfragen mit asynchroner Unterstützung. Diese Klasse ist threadsicher. Diese Klasse unterstützt dieselben Methoden wie QueryRunner, gibt jedoch aufrufbare Objekte zurück, die später zum Abrufen des Ergebnisses verwendet werden können.
Klassenerklärung
Es folgt die Deklaration für die Klasse org.apache.commons.dbutils.AsyncQueryRunner -
public class AsyncQueryRunner
extends AbstractQueryRunner
Verwendung
Step 1 - Erstellen Sie ein Verbindungsobjekt.
Step 2 - Verwenden Sie AsyncQueryRunner-Objektmethoden, um Datenbankoperationen durchzuführen.
Beispiel
Das folgende Beispiel zeigt, wie ein Datensatz mithilfe der AsyncQueryRunner-Klasse aktualisiert wird. Wir werden einen der verfügbaren Datensätze in der Mitarbeitertabelle aktualisieren.
Syntax
String updateQuery = "UPDATE employees SET age=? WHERE id=?";
future = asyncQueryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,103);
Wo,
updateQuery - Aktualisieren Sie die Abfrage mit Platzhaltern.
asyncQueryRunner - asyncQueryRunner-Objekt zum Aktualisieren des Mitarbeiterobjekts in der Datenbank.
future - Zukünftiges Objekt, um das Ergebnis später abzurufen.
Um die oben genannten Konzepte für DBUtils zu verstehen, schreiben wir ein Beispiel, in dem eine Aktualisierungsabfrage im asynchronen Modus ausgeführt wird. Um unser Beispiel zu schreiben, erstellen wir eine Beispielanwendung.
Schritt | Beschreibung |
---|---|
1 | Aktualisieren Sie die Datei MainApp.java, die unter Kapitel DBUtils - Erste Anwendung erstellt wurde . |
2 | Kompilieren Sie die Anwendung und führen Sie sie wie unten erläutert aus. |
Es folgt der Inhalt der 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;
}
}
Es folgt der Inhalt der MainApp.java Datei.
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);
}
}
}
Wenn Sie mit dem Erstellen der Quelldateien fertig sind, lassen Sie uns die Anwendung ausführen. Wenn mit Ihrer Anwendung alles in Ordnung ist, wird die folgende Meldung gedruckt.
1 record(s) updated.