Apache Commons DBUtils - Hızlı Kılavuz
Apache Commons DbUtils kitaplığı, kaynak sızıntısı olmadan JDBC çağrı işlemeyi kolaylaştırmak ve daha temiz bir koda sahip olmak için tasarlanmış oldukça küçük bir sınıf kümesidir. JDBC kaynak temizliği oldukça sıkıcı ve hataya açık olduğundan, DBUtils sınıfları kazan plakası kodunun soyutlanmasına yardımcı olur, böylece geliştiriciler yalnızca veritabanıyla ilgili işlemlere odaklanabilir.
DBUtils'in Avantajları
Apache Commons DBUtils kullanmanın avantajları aşağıda açıklanmıştır -
No Resource Leakage - DBUtils sınıfları, kaynak sızıntısı olmamasını sağlar.
Clean & Clear code - DBUtils sınıfları, bir temizleme veya kaynak sızıntısı önleme kodu yazmaya gerek kalmadan veritabanı işlemlerini yapmak için temiz ve açık kod sağlar.
Bean Mapping - DBUtils sınıfı, bir sonuç kümesinden javabe'ları otomatik olarak doldurmayı destekler.
DBUtils Tasarım İlkeleri
Apache Commons DBUtils'in tasarım ilkeleri aşağıdaki gibidir -
Small - DBUtils kitaplığı daha az sınıfla çok küçük boyuttadır, bu nedenle anlaşılması ve kullanılması kolaydır.
Transparent- DBUtils kitaplığı perde arkasında fazla çalışma yapmıyor. Sadece sorgu alır ve çalıştırır.
Fast - DBUtils kitaplık sınıfları çok sayıda arka plan nesnesi oluşturmaz ve veritabanı işlem yürütmelerinde oldukça hızlıdır.
DBUtils ile geliştirmeye başlamak için, aşağıda gösterilen adımları izleyerek DBUtils ortamınızı kurmalısınız. Bir Windows platformunda çalıştığınızı varsayıyoruz.
Java'yı yükleyin
Java Resmi Sitesinden J2SE Geliştirme Kiti 5.0'ı (JDK 5.0) yükleyin .
Aşağıdaki ortam değişkenlerinin aşağıda açıklandığı gibi ayarlandığından emin olun -
JAVA_HOME - Bu ortam değişkeni, JDK'yı kurduğunuz dizini göstermelidir, örneğin C: \ Program Files \ Java \ jdk1.5.0.
CLASSPATH - Bu ortam değişkeninin uygun yolları ayarlanmış olmalıdır, örneğin C: \ Program Files \ Java \ jdk1.5.0_20 \ jre \ lib.
PATH - Bu ortam değişkeni uygun JRE bölmesine işaret etmelidir, örneğin C: \ Program Files \ Java \ jre1.5.0_20 \ bin.
Bu değişken setine zaten sahip olmanız mümkündür, ancak burada nasıl kontrol edeceğinizden emin olmak için.
Kontrol paneline gidin ve Sistem'e çift tıklayın. Windows XP kullanıcısıysanız, Sistem simgesini görmeden önce Performans ve Bakım'ı açmanız gerekebilir.
Gelişmiş sekmesine gidin ve Ortam Değişkenleri'ne tıklayın.
Şimdi yukarıda belirtilen tüm değişkenlerin doğru ayarlanıp ayarlanmadığını kontrol edin.
Veritabanını Kur
Elbette ihtiyacınız olan en önemli şey, sorgulayabileceğiniz ve değiştirebileceğiniz bir tabloya sahip gerçek bir çalışan veritabanıdır.
Size en uygun veritabanını kurun. Pek çok seçeneğiniz olabilir ve en yaygın olanları -
MySQL DB:MySQL açık kaynaklı bir veritabanıdır. MySQL Resmi Sitesinden indirebilirsiniz . Tam Windows kurulumunu indirmenizi öneririz.
Ek olarak, MySQL Administrator ve MySQL Query Browser'ı indirip yükleyin . Bunlar, geliştirmenizi çok daha kolaylaştıracak GUI tabanlı araçlardır.
Son olarak, MySQL Connector / J'yi (MySQL JDBC sürücüsü) indirip uygun bir dizine açın. Bu öğreticinin amacı için, sürücüyü C: \ Program Files \ MySQL \ mysql-connector-java-5.1.8 konumuna yüklediğinizi varsayacağız.
Buna göre, CLASSPATH değişkenini C: \ Program Files \ MySQL \ mysql-connector-java-5.1.8 \ mysql-connector-java-5.1.8-bin.jar olarak ayarlayın. Sürücü sürümünüz, kurulumunuza bağlı olarak değişebilir.
PostgreSQL DB:PostgreSQL, açık kaynaklı bir veritabanıdır. PostgreSQL Resmi Sitesinden indirebilirsiniz .
Postgres kurulumu, pgAdmin III adlı GUI tabanlı bir yönetim aracı içerir. JDBC sürücüleri de kurulumun bir parçası olarak dahildir.
Oracle DB- Oracle DB, Oracle tarafından satılan ticari bir veritabanıdır. Yüklemek için gerekli dağıtım ortamına sahip olduğunuzu varsayıyoruz.
Oracle kurulumu, Enterprise Manager adlı GUI tabanlı bir yönetim aracı içerir. JDBC sürücüleri de kurulumun bir parçası olarak dahildir.
Veritabanı Sürücülerini Kurun
En yeni JDK, JDBC API kullanan programcıların çoğu Açık Veritabanı Bağlantısı (ODBC) sürücüsünü kullanıma sunan bir JDBC-ODBC Bridge sürücüsünü içerir.
Günümüzde, Veritabanı satıcılarının çoğu, Veritabanı kurulumuyla birlikte uygun JDBC sürücülerini sağlıyor. Yani bu kısım için endişelenmemelisiniz.
Veritabanı Kimlik Bilgisini Ayarlayın
Bu eğitim için MySQL veritabanını kullanacağız. Yukarıdaki veritabanlarından herhangi birini kurduğunuzda, yönetici kimliği şu şekilde ayarlanır:root ve seçtiğiniz bir şifre belirlemenizi sağlar.
Kök kimliği ve parolayı kullanarak başka bir kullanıcı kimliği ve parolası oluşturabilir ya da JDBC uygulamanız için kök kimliği ve parola kullanabilirsiniz.
Yönetici kimliği ve parolası gerektiren veritabanı oluşturma ve silme gibi çeşitli veritabanı işlemleri vardır.
JDBC öğreticisinin geri kalanı için MySQL Veritabanını kullanacağız username kimlik olarak ve password şifre olarak.
Yeni kullanıcılar oluşturmak için yeterli ayrıcalığa sahip değilseniz, Veritabanı Yöneticinizden (DBA) sizin için bir kullanıcı kimliği ve parola oluşturmasını isteyebilirsiniz.
Veritabanı yarat
Oluşturmak için emp veritabanı, aşağıdaki adımları kullanın -
Aşama 1
Bir Command Prompt ve aşağıdaki gibi kurulum dizinine geçin -
C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>
Note: Yol mysqld.exeMySQL'in sisteminizdeki kurulum konumuna bağlı olarak değişebilir. Veritabanı sunucunuzu nasıl başlatıp durduracağınıza ilişkin belgeleri de kontrol edebilirsiniz.
Adım 2
Zaten çalışmıyorsa aşağıdaki komutu uygulayarak veritabanı sunucusunu başlatın.
C:\Program Files\MySQL\bin>mysqld
C:\Program Files\MySQL\bin>
Aşama 3
Oluştur emp aşağıdaki komutu yürüterek veritabanı -
C:\Program Files\MySQL\bin> mysqladmin create emp -u root -p
Enter password: ********
C:\Program Files\MySQL\bin>
Tablo Oluştur
Oluşturmak için Employees emp veritabanındaki tablo için aşağıdaki adımları kullanın -
Aşama 1
Bir Command Prompt ve aşağıdaki gibi kurulum dizinine geçin -
C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>
Adım 2
Veritabanına aşağıdaki şekilde giriş yapın -
C:\Program Files\MySQL\bin>mysql -u root -p
Enter password: ********
mysql>
Aşama 3
Tabloyu oluşturun Employee aşağıdaki gibi -
mysql> use emp;
mysql> create table Employees
-> (
-> id int not null,
-> age int not null,
-> first varchar (255),
-> last varchar (255)
-> );
Query OK, 0 rows affected (0.08 sec)
mysql>
Veri Kayıtları Oluşturun
Son olarak, Employee tablosunda aşağıdaki gibi birkaç kayıt oluşturursunuz -
mysql> INSERT INTO Employees VALUES (100, 18, 'Zara', 'Ali');
Query OK, 1 row affected (0.05 sec)
mysql> INSERT INTO Employees VALUES (101, 25, 'Mahnaz', 'Fatma');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO Employees VALUES (102, 30, 'Zaid', 'Khan');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO Employees VALUES (103, 28, 'Sumit', 'Mittal');
Query OK, 1 row affected (0.00 sec)
mysql>
MySQL veritabanı hakkında tam bir anlayış için, MySQL Eğitimi'ni inceleyin .
Commons DBUtils Arşivini İndirin
Apache Common DBUtils jar dosyasının en son sürümünü commons-dbutils-1.7-bin.zip , MySql connector mysql-connector-java-5.1.28-bin.jar , Apache Commons DBCP commons-dbcp2-2.1.1-bin'den indirin. zip , Apache Commons Pool commons-pool2-2.4.3-bin.zip ve Apache Commons Logging commons-logging-1.2-bin.zip . Bu öğretici yazma zamanda, indirdiğiniz commons-dbutils-1.7-bin.zip , mysql-connector-java-5.1.28-bin.jar , commons-dbcp2-2.1.1-bin.zip , commons-pool2 -2.4.3-bin.zip , commons-logging-1.2-bin.zip ve C: \> Apache klasörüne kopyaladı.
işletim sistemi | Arşiv adı |
---|---|
pencereler | commons-dbutils-1.7-bin.zip |
Linux | commons-dbutils-1.7-bin.tar.gz |
Mac | commons-dbutils-1.7-bin.tar.gz |
Apache Ortak DBUtils Ortamını Ayarlayın
Yı kur APACHE_HOMEortam değişkeni, makinenizde Apache jar'inin depolandığı temel dizin konumunu işaret eder. Varsayalım ki, Commons-dbutils-1.7-bin.zip'i çeşitli İşletim Sistemlerinde Apache klasörüne aşağıdaki gibi çıkardık.
işletim sistemi | Çıktı |
---|---|
pencereler | APACHE_HOME ortam değişkenini C: \ Apache olarak ayarlayın |
Linux | APACHE_HOME = / usr / local / Apache'yi dışa aktar |
Mac | dışa aktar APACHE_HOME = / Kitaplık / Apache |
CLASSPATH Değişkenini Ayarla
Yı kur CLASSPATHOrtak GÇ kavanoz konumuna işaret edecek ortam değişkeni. Commons-dbutils-1.7-bin.zip dosyasını çeşitli İşletim Sistemlerinde Apache klasöründe aşağıdaki gibi sakladığınızı varsayarsak.
işletim sistemi | Çıktı |
---|---|
pencereler | CLASSPATH ortam değişkenini% CLASSPATH%;% APACHE_HOME% \ commons-dbutils-1.7.jar; mysql-connector-java-5.1.28.jar; commons-dbcp2-2.1.1.jar; commons-pool2-2.4 olarak ayarlayın. 3. jar; commons-logging-1.2.jar; |
Linux | dışa aktar CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-dbutils-1.7.jar: mysql-connector-java-5.1.28.jar: commons-dbcp2-2.1.1: commons-pool2-2.4.3.jar: commons-logging -1.2.jar. |
Mac | dışa aktarma CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-dbutils-1.7.jar: mysql-connector-java-5.1.28: commons-dbcp2-2.1.1.jar: commons-pool2-2.4.3.jar; ortak günlük kaydı -1.2.jar. |
Artık DBUtils ile denemeye başlamaya hazırsınız. Sonraki bölüm size DBUtils Programlama hakkında örnek bir örnek verir.
Bu bölüm, DBUtils kitaplığını kullanarak basit bir JDBC uygulamasının nasıl oluşturulacağına dair bir örnek sağlar. Bu size bir veritabanı bağlantısının nasıl açılacağını, bir SQL sorgusunun nasıl yürütüleceğini ve sonuçları gösterecektir.
Bu şablon örneğinde bahsedilen tüm adımlar, bu eğitimin sonraki bölümlerinde açıklanacaktır.
JDBC Uygulaması Oluşturma
Bir JDBC uygulaması oluşturmanın altı adımı vardır:
Import the packages- Veritabanı programlaması için gerekli olan JDBC sınıflarını içeren paketleri eklemenizi gerektirir. Çoğu zaman,import java.sql.* yeterli olacaktır.
Register the JDBC driver - Bir sürücüyü başlatmanızı gerektirir, böylece veritabanıyla bir iletişim kanalı açabilirsiniz.
Open a connection - DriverManager.getConnection() veritabanıyla fiziksel bir bağlantıyı temsil eden bir Connection nesnesi oluşturma yöntemi.
Execute a query - SQL deyimi oluşturmak ve veritabanına göndermek için Statement türünde bir nesne kullanmayı gerektirir.
Extract data from result set - Uygun olanı kullanmanızı gerektirir ResultSet.getXXX() Sonuç kümesinden verileri alma yöntemi.
Clean up the environment - JVM'nin çöp toplama işlemine bağlı olarak tüm veritabanı kaynaklarının açıkça kapatılmasını gerektirir.
Basit kod
Bu örnek örnek, gelecekte kendi JDBC uygulamanızı oluşturmanız gerektiğinde bir şablon görevi görebilir.
Bu örnek kod, önceki bölümde yapılan ortam ve veritabanı kurulumuna göre yazılmıştır.
Aşağıdaki örneği MainApp.java içine kopyalayıp yapıştırın, aşağıdaki gibi derleyin ve çalıştırın -
MainApp.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
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;
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 {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
try {
Employee emp = queryRunner.query(conn,
"SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} finally {
DbUtils.close(conn);
}
}
}
Employee.java
Program aşağıda verilmiştir -
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;
}
}
Şimdi yukarıdaki örneği şu şekilde derleyelim -
C:\>javac MainApp.java Employee.java
C:\>
Koştuğun zaman MainApp, aşağıdaki sonucu verir -
C:\>java MainApp
Connecting to database...
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>
Aşağıdaki örnek, DBUtils yardımıyla Ekle sorgusu kullanılarak bir kaydın nasıl oluşturulacağını gösterecektir. Çalışanlar Tablosuna bir kayıt ekleyeceğiz.
Sözdizimi
Bir sorgu oluşturmak için sözdizimi aşağıda verilmiştir -
String insertQuery ="INSERT INTO employees(id,age,first,last) VALUES (?,?,?,?)";
int insertedRecords = queryRunner.update(conn, insertQuery,104,30, "Sohan","Kumar");
Nerede,
insertQuery - Yer tutuculara sahip sorgu ekleyin.
queryRunner - Çalışan nesnesini veritabanına eklemek için QueryRunner nesnesi.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için, bir insert 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 - İlk Uygulama 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.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
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 {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
int insertedRecords = queryRunner.update(conn,
"INSERT INTO employees(id,age,first,last) VALUES (?,?,?,?)",
104,30, "Sohan","Kumar");
System.out.println(insertedRecords + " record(s) inserted");
} 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) inserted.
Aşağıdaki örnek, DBUtils yardımıyla Read sorgusunu kullanarak bir kaydın nasıl okunacağını gösterecektir. Çalışanlar Tablosundan bir kayıt okuyacağız.
Sözdizimi
Okuma sorgusu sözdizimi aşağıda belirtilmiştir -
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
Nerede,
resultHandler - Sonuç kümesini Employee nesnesine eşlemek için ResultSetHandler nesnesi.
queryRunner - Bir çalışan nesnesini veritabanından okumak için QueryRunner nesnesi.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için, bir okuma 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 - İlk Uygulama 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.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
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 {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler =
new BeanHandler<Employee>(Employee.class);
try {
Employee emp = queryRunner.query(conn,
"SELECT * FROM employees WHERE id=?", resultHandler, 104);
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} 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:
ID: 104, Age: 30, First: Sohan, Last: Kumar
Aşağıdaki örnek, DBUtils yardımıyla Güncelleme sorgusu kullanılarak bir kaydın nasıl güncelleneceğini gösterecektir. Çalışanlar Tablosunda bir kaydı güncelleyeceğiz.
Sözdizimi
Güncelleme sorgusu için sözdizimi aşağıdaki gibidir -
String updateQuery = "UPDATE employees SET age=? WHERE id=?";
int updatedRecords = queryRunner.update(conn, updateQuery, 33,104);
Nerede,
updateQuery - Yer tutucular içeren sorguyu güncelleyin.
queryRunner - Veritabanındaki çalışan nesnesini güncellemek için QueryRunner nesnesi.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için, 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 - İlk Uygulama 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.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
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 {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
int updatedRecords = queryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,104);
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.
Aşağıdaki örnek, DBUtils yardımıyla Delete sorgusunu kullanarak bir kaydın nasıl silineceğini gösterecektir. Çalışanlar Tablosundaki bir kaydı sileceğiz.
Sözdizimi
Silme sorgusu için sözdizimi aşağıda belirtilmiştir -
String deleteQuery = "DELETE FROM employees WHERE id=?";
int deletedRecords = queryRunner.delete(conn, deleteQuery, 33,104);
Nerede,
deleteQuery - Yer tutuculara sahip sorgu SİL.
queryRunner - Veritabanındaki çalışan nesnesini silmek için QueryRunner nesnesi.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için, silme 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 - İlk Uygulama 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.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
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 {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
int deletedRecords = queryRunner.update(conn,
"DELETE from employees WHERE id=?", 104);
System.out.println(deletedRecords + " record(s) deleted.");
} 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) deleted.
org.apache.commons.dbutils.QueryRunnersınıfı, DBUtils kitaplığındaki merkezi sınıftır. Sonuç Kümelerini işlemek için takılabilir stratejilerle SQL sorgularını yürütür. Bu sınıf iş parçacığı açısından güvenlidir.
Sınıf Beyanı
Org.apache.commons.dbutils.QueryRunner sınıfının bildirimi aşağıdadır -
public class QueryRunner
extends AbstractQueryRunner
Kullanım
Step 1 - Bir bağlantı nesnesi oluşturun.
Step 2 - Veritabanı işlemleri yapmak için QueryRunner nesne yöntemlerini kullanın.
Misal
Aşağıdaki örnek, QueryRunner sınıfı kullanılarak bir kaydın nasıl okunacağını gösterecektir. Çalışan Tablosundaki mevcut kayıtlardan birini okuyacağız.
Sözdizimi
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp =
queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
Nerede,
resultHandler - Sonuç kümesini Employee nesnesine eşlemek için ResultSetHandler nesnesi.
queryRunner - Çalışan nesnesini veritabanından okumak için QueryRunner nesnesi.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için, bir okuma 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 - İlk Uygulama 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.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
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 {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
try {
Employee emp = queryRunner.query(conn,
"SELECT * FROM employees WHERE id=?", resultHandler, 103);
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} 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.
ID: 103, Age: 28, First: Sumit, Last: Mittal
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 - İlk Uygulama 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.
org.apache.commons.dbutils.ResultSetHandler arabirim, ResultSets'i nesnelere dönüştürmekle sorumludur.
Sınıf Beyanı
Org.apache.commons.dbutils.ResultSetHandler sınıfının bildirimi aşağıdadır -
public interface ResultSetHandler<T>
Kullanım
Step 1 - Bir bağlantı nesnesi oluşturun.
Step 2 - ResultSetHandler uygulamasını oluşturun.
Step 3 - resultSetHandler'ı QueryRunner nesnesine geçirin ve veritabanı işlemleri yapın.
Misal
Aşağıdaki örnek, ResultSetHandler sınıfını kullanarak bir kaydın nasıl eşleneceğini gösterecektir. Çalışan Tablosundaki mevcut kayıtlardan birini okuyacağız.
Sözdizimi
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
Nerede,
resultHandler - Sonuç kümesini Employee nesnesine eşlemek için ResultSetHandler nesnesi.
queryRunner - Çalışan nesnesini veritabanından okumak için QueryRunner nesnesi.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için, bir okuma 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 - İlk Uygulama 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 java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Arrays;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
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 {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Object[]> handler = new ResultSetHandler<Object[]>() {
public Object[] handle(ResultSet rs) throws SQLException {
if (!rs.next()) {
return null;
}
ResultSetMetaData meta = rs.getMetaData();
int cols = meta.getColumnCount();
Object[] result = new Object[cols];
for (int i = 0; i < cols; i++) {
result[i] = rs.getObject(i + 1);
}
return result;
}
};
try {
Object[] result = queryRunner.query(conn, "SELECT * FROM employees WHERE id=?",
handler, 103);
//Display values
System.out.print("Result: " + Arrays.toString(result));
} 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.
Connecting to database...
Result: [103, 33, Sumit, Mittal]
org.apache.commons.dbutils.BeanHandlerResultSetHandler arabiriminin uygulamasıdır ve ilk ResultSet satırını JavaBean'a dönüştürmekten sorumludur. Bu sınıf iş parçacığı açısından güvenlidir.
Sınıf Beyanı
Org.apache.commons.dbutils.BeanHandler sınıfı için bildirim aşağıdadır -
public class BeanHandler<T>
extends Object implements ResultSetHandler<T>
Kullanım
Step 1 - Bir bağlantı nesnesi oluşturun.
Step 2 - ResultSetHandler uygulamasının BeanHandler nesnesi olarak uygulanmasını alın.
Step 3 - resultSetHandler'ı QueryRunner nesnesine geçirin ve veritabanı işlemleri yapın.
Misal
Aşağıdaki örnek, BeanHandler sınıfını kullanarak bir kaydın nasıl okunacağını gösterecektir. Çalışanlar Tablosundaki mevcut kayıtlardan birini okuyacağız ve bunu Çalışan fasulyesi ile eşleştireceğiz.
Sözdizimi
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
Nerede,
resultHandler - Sonuç kümesini Employee nesnesine eşlemek için BeanHandler nesnesi.
queryRunner - Çalışan nesnesini veritabanından okumak için QueryRunner nesnesi.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için, bir okuma 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 - İlk Uygulama 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.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
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 {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler
= new BeanHandler<Employee>(Employee.class);
try {
Employee emp = queryRunner.query(conn,
"SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} 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.
ID: 103, Age: 28, First: Sumit, Last: Mittal
org.apache.commons.dbutils.BeanListHandlerResultSetHandler arabiriminin uygulamasıdır ve ResultSet satırlarını Java Bean listesine dönüştürmekten sorumludur. Bu sınıf iş parçacığı açısından güvenlidir.
Sınıf Beyanı
Org.apache.commons.dbutils.BeanListHandler sınıfının bildirimi aşağıdadır -
public class BeanListHandler<T>
extends Object implements ResultSetHandler<List<T>>
Kullanım
Step 1 - Bir bağlantı nesnesi oluşturun.
Step 2 - ResultSetHandler uygulamasını BeanListHandler nesnesi olarak alın.
Step 3 - resultSetHandler'ı QueryRunner nesnesine geçirin ve veritabanı işlemleri yapın.
Misal
Aşağıdaki örnek, BeanListHandler sınıfı kullanılarak bir kayıt listesinin nasıl okunacağını gösterecektir. Çalışanlar Tablosundaki mevcut kayıtları okuyacağız ve bunları Çalışan fasulye listesiyle eşleştireceğiz.
Sözdizimi
List<Employee> empList = queryRunner.query(conn, "SELECT * FROM employees", resultHandler);
Nerede,
resultHandler - Sonuç kümelerini Employee nesnelerinin listesiyle eşlemek için BeanListHandler nesnesi.
queryRunner - Çalışan nesnesini veritabanından okumak için QueryRunner nesnesi.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için, bir okuma 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 - İlk Uygulama 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 java.util.List;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
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 {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle List of Employee Beans
ResultSetHandler<List<Employee>> resultHandler = new BeanListHandler<Employee>(Employee.class);
try {
List<Employee> empList = queryRunner.query(conn, "SELECT * FROM employees", resultHandler);
for(Employee emp: empList ) {
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
}
} 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.
ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
org.apache.commons.dbutils.ArrayListHandlerResultSetHandler arabiriminin uygulamasıdır ve ResultSet satırlarını bir nesneye [] dönüştürmekten sorumludur. Bu sınıf iş parçacığı açısından güvenlidir.
Sınıf Beyanı
Org.apache.commons.dbutils.ArrayListHandler sınıfının bildirimi aşağıdadır -
public class ArrayListHandler
extends AbstractListHandler<Object[]>
Kullanım
Step 1 - Bir bağlantı nesnesi oluşturun.
Step 2 - ResultSetHandler uygulamasının ArrayListHandler nesnesi olarak uygulanmasını alın.
Step 3 - resultSetHandler'ı QueryRunner nesnesine geçirin ve veritabanı işlemleri yapın.
Misal
Aşağıdaki örnek, ArrayListHandler sınıfı kullanılarak bir kayıt listesinin nasıl okunacağını gösterecektir. Çalışanlar Tablosundaki mevcut kayıtları nesne [] olarak okuyacağız.
Sözdizimi
List<Object> result = queryRunner.query(conn, "SELECT * FROM employees", new ArrayListHandler());
Nerede,
resultHandler - Sonuç kümelerini [] nesnesinin listesi ile eşlemek için ArrayListHandler nesnesi.
queryRunner - Çalışan nesnesini veritabanından okumak için QueryRunner nesnesi.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için, bir okuma 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 - İlk Uygulama 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 java.util.Arrays;
import java.util.List;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
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 {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
List<Object[]> result = queryRunner.query(conn, "SELECT * FROM employees"
, new ArrayListHandler());
for(Object[] objects : result) {
System.out.println(Arrays.toString(objects));
}
} 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.
[100, 18, Zara, Ali]
[101, 25, Mahnaz, Fatma]
[102, 30, Zaid, Khan]
[103, 28, Sumit, Mittal]
org.apache.commons.dbutils.MapListHandlerResultSetHandler arayüzünün uygulanmasıdır ve ResultSet satırlarını Haritalar listesine dönüştürmekten sorumludur. Bu sınıf iş parçacığı açısından güvenlidir.
Sınıf Beyanı
Org.apache.commons.dbutils.MapListHandler sınıfının bildirimi aşağıdadır -
public class MapListHandler
extends AbstractListHandler<Map<String,Object>>
Kullanım
Step 1 - Bir bağlantı nesnesi oluşturun.
Step 2 - ResultSetHandler uygulamasını MapListHandler nesnesi olarak alın.
Step 3 - resultSetHandler'ı QueryRunner nesnesine geçirin ve veritabanı işlemleri yapın.
Misal
Aşağıdaki örnek, MapListHandler sınıfı kullanılarak bir kayıt listesinin nasıl okunacağını gösterecektir. Çalışanlar Tablosundaki mevcut kayıtları harita listesi olarak okuyacağız.
Sözdizimi
List<Map<String, Object>> result = queryRunner.query(conn, "SELECT * FROM employees", new MapListHandler());
Nerede,
resultHandler - Sonuç kümelerini harita listesine eşlemek için MapListHandler nesnesi.
queryRunner - Çalışan nesnesini veritabanından okumak için QueryRunner nesnesi.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için, bir okuma 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 - İlk Uygulama 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 java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler;
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 {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
List<Map<String, Object>> result = queryRunner.query(
conn, "SELECT * FROM employees", new MapListHandler());
System.out.println(result);
} 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.
Connecting to database...
[{id=100, age=18, first=Zara, last=Ali},
{id=101, age=25, first=Mahnaz, last=Fatma},
{id=102, age=30, first=Zaid, last=Khan},
{id=103, age=33, first=Sumit, last=Mittal}]
ResultSetHandler arayüzünü uygulayarak veya mevcut ResultSetHandler uygulamasından herhangi birini genişleterek kendi özel işleyicimizi oluşturabiliriz. Aşağıda verilen örnekte, BeanHandler sınıfını genişleterek bir Özel İşleyici, EmployeeHandler oluşturduk.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için, bir okuma 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 - İlk Uygulama 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;
private String name;
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;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Aşağıdakilerin içeriği EmployeeHandler.java dosya.
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class EmployeeHandler extends BeanHandler<Employee> {
public EmployeeHandler() {
super(Employee.class);
}
@Override
public Employee handle(ResultSet rs) throws SQLException {
Employee employee = super.handle(rs);
employee.setName(employee.getFirst() +", " + employee.getLast());
return employee;
}
}
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.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
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 {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
EmployeeHandler employeeHandler = new EmployeeHandler();
try {
Employee emp = queryRunner.query(conn,
"SELECT * FROM employees WHERE first=?", employeeHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", Name: " + emp.getName());
} 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.
ID: 103, Age: 28, Name: Sumit, Mittal
Bir veritabanı tablosundaki sütun adları ile eşdeğer javabean nesne adlarının benzer olmaması durumunda, bunları özelleştirilmiş BasicRowProcessor nesnesini kullanarak eşleyebiliriz. Aşağıdaki örneğe bakın.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için, bir okuma 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 - İlk Uygulama 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;
private String name;
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;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Aşağıdakilerin içeriği EmployeeHandler.java dosya.
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.BeanProcessor;
import org.apache.commons.dbutils.BasicRowProcessor;
public class EmployeeHandler extends BeanHandler<Employee> {
public EmployeeHandler() {
super(Employee.class, new BasicRowProcessor(new BeanProcessor(mapColumnsToFields())));
}
@Override
public Employee handle(ResultSet rs) throws SQLException {
Employee employee = super.handle(rs);
employee.setName(employee.getFirst() +", " + employee.getLast());
return employee;
}
public static Map<String, String> mapColumnsToFields() {
Map<String, String> columnsToFieldsMap = new HashMap<>();
columnsToFieldsMap.put("ID", "id");
columnsToFieldsMap.put("AGE", "age");
return columnsToFieldsMap;
}
}
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.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
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 {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
EmployeeHandler employeeHandler = new EmployeeHandler();
try {
Employee emp = queryRunner.query(conn,
"SELECT * FROM employees WHERE first=?", employeeHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", Name: " + emp.getName());
} 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.
ID: 103, Age: 28, Name: Sumit, Mittal
Şimdiye kadar QueryRunner'ı kullanırken bağlantı nesnesini kullandık. Veri kaynağını da görünüşe göre kullanabiliriz. Aşağıdaki örnek, QueryRunner ve veri kaynağı yardımıyla Oku sorgusunu kullanarak bir kaydın nasıl okunacağını gösterecektir. Çalışanlar Tablosundan bir kayıt okuyacağız.
Sözdizimi
QueryRunner queryRunner = new QueryRunner( dataSource );
Employee emp = queryRunner.query("SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
Nerede,
dataSource - DataSource nesnesi yapılandırıldı.
resultHandler - Sonuç kümesini Employee nesnesine eşlemek için ResultSetHandler nesnesi.
queryRunner - Çalışan nesnesini veritabanından okumak için QueryRunner nesnesi.
DBUtils ile ilgili yukarıda bahsedilen kavramları anlamak için, bir okuma 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 - İlk Uygulama 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 CustomDatasource.java.
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
public class CustomDataSource {
// 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";
private static DataSource datasource;
private static final BasicDataSource basicDataSource;
static {
basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName(JDBC_DRIVER);
basicDataSource.setUsername(USER);
basicDataSource.setPassword(PASS);
basicDataSource.setUrl(DB_URL);
}
public static DataSource getInstance() {
return basicDataSource;
}
}
Aşağıdakilerin içeriği MainApp.java dosya.
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class MainApp {
public static void main(String[] args) throws SQLException {
DbUtils.loadDriver(JDBC_DRIVER);
QueryRunner run = new QueryRunner(CustomDataSource.getInstance());
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp = queryRunner.query("SELECT * FROM employees WHERE id=?",
resultHandler, 103);
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
}
}
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.
ID: 103, Age: 33, First: Sumit, Last: Mittal