AsyncQueryRunner arabirimi
org.apache.commons.dbutils.AsyncQueryRunnerclass, async desteği ile uzun süre çalışan SQL sorgularını yürütmeye yardımcı olur. Bu sınıf iş parçacığı açısından güvenlidir. Bu sınıf, QueryRunner ile aynı yöntemleri destekler ancak daha sonra sonucu almak için kullanılabilecek Çağrılabilir nesneleri döndürür.
Sınıf Beyanı
Org.apache.commons.dbutils.AsyncQueryRunner sınıfının bildirimi aşağıdadır -
public class AsyncQueryRunner
extends AbstractQueryRunner
Kullanım
Step 1 - Bir bağlantı nesnesi oluşturun.
Step 2 - Veritabanı işlemleri yapmak için AsyncQueryRunner nesne yöntemlerini kullanın.
Misal
Aşağıdaki örnek, AsyncQueryRunner sınıfı kullanılarak bir kaydın nasıl güncelleneceğini gösterecektir. Çalışan Tablosundaki mevcut kayıtlardan birini güncelleyeceğiz.
Sözdizimi
String updateQuery = "UPDATE employees SET age=? WHERE id=?";
future = asyncQueryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,103);
Nerede,
updateQuery - Yer tutucular içeren sorguyu güncelleyin.
asyncQueryRunner - veritabanındaki çalışan nesnesini güncellemek için asyncQueryRunner nesnesi.
future - Sonucu daha sonra almak için gelecekteki nesne.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için zaman uyumsuz modda bir güncelleme sorgusu çalıştıracak bir örnek yazalım. Örneğimizi yazmak için örnek bir uygulama oluşturalım.
Adım | Açıklama |
---|---|
1 | DBUtils - First Application bölümünde oluşturulan MainApp.java dosyasını güncelleyin . |
2 | Uygulamayı aşağıda açıklandığı gibi derleyin ve çalıştırın. |
Aşağıdakilerin içeriği 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;
}
}
Aşağıdakilerin içeriği MainApp.java dosya.
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);
}
}
}
Kaynak dosyaları oluşturmayı tamamladığınızda uygulamayı çalıştırmamıza izin verin. Uygulamanızda her şey yolundaysa, aşağıdaki mesajı yazdıracaktır.
1 record(s) updated.