Apache Commons DBUtils - Hướng dẫn nhanh

Thư viện Apache Commons DbUtils là một tập hợp các lớp khá nhỏ, được thiết kế để giúp xử lý cuộc gọi JDBC dễ dàng hơn mà không bị rò rỉ tài nguyên và có mã sạch hơn. Vì việc dọn dẹp tài nguyên JDBC khá tẻ nhạt và dễ xảy ra lỗi, các lớp DBUtils giúp trừu tượng hóa mã đĩa của chương trình, để các nhà phát triển chỉ có thể tập trung vào các hoạt động liên quan đến cơ sở dữ liệu.

Ưu điểm của DBUtils

Những lợi thế của việc sử dụng Apache Commons DBUtils được giải thích dưới đây:

  • No Resource Leakage - Các lớp DBUtils đảm bảo rằng không xảy ra rò rỉ tài nguyên.

  • Clean & Clear code - Các lớp DBUtils cung cấp mã sạch và rõ ràng để thực hiện các hoạt động cơ sở dữ liệu mà không cần phải viết mã dọn dẹp hoặc ngăn chặn rò rỉ tài nguyên.

  • Bean Mapping - Lớp DBUtils hỗ trợ tự động điền javabeans từ một tập kết quả.

Nguyên tắc thiết kế DBUtils

Các nguyên tắc thiết kế của Apache Commons DBUtils như sau:

  • Small - Thư viện DBUtils có dung lượng rất nhỏ với ít lớp hơn nên dễ hiểu và dễ sử dụng.

  • Transparent- Thư viện DBUtils không thực hiện nhiều công việc đằng sau hậu trường. Nó chỉ cần truy vấn và thực thi.

  • Fast - Các lớp thư viện DBUtils không tạo nhiều đối tượng nền và khá nhanh trong việc thực thi hoạt động cơ sở dữ liệu.

Để bắt đầu phát triển với DBUtils, bạn nên thiết lập môi trường DBUtils của mình bằng cách làm theo các bước được hiển thị bên dưới. Chúng tôi giả định rằng bạn đang làm việc trên nền tảng Windows.

Cài đặt Java

Cài đặt Bộ phát triển J2SE 5.0 (JDK 5.0) từ Trang web chính thức của Java .

Đảm bảo rằng các biến môi trường sau được đặt như mô tả bên dưới:

  • JAVA_HOME - Biến môi trường này phải trỏ đến thư mục mà bạn đã cài đặt JDK, ví dụ C: \ Program Files \ Java \ jdk1.5.0.

  • CLASSPATH - Biến môi trường này phải được đặt đường dẫn thích hợp, ví dụ C: \ Program Files \ Java \ jdk1.5.0_20 \ jre \ lib.

  • PATH - Biến môi trường này phải trỏ đến bin JRE thích hợp, ví dụ C: \ Program Files \ Java \ jre1.5.0_20 \ bin.

Có thể bạn đã đặt các biến này, nhưng chỉ cần đảm bảo đây là cách kiểm tra.

  • Đi tới bảng điều khiển và nhấp đúp vào Hệ thống. Nếu bạn là người dùng Windows XP, có thể bạn phải mở Hiệu suất và Bảo trì trước khi nhìn thấy biểu tượng Hệ thống.

  • Chuyển đến tab Nâng cao và nhấp vào Biến môi trường.

  • Bây giờ hãy kiểm tra xem tất cả các biến được đề cập ở trên đã được đặt đúng chưa.

Cài đặt cơ sở dữ liệu

Tất nhiên, điều quan trọng nhất bạn cần là một cơ sở dữ liệu đang chạy thực tế với một bảng mà bạn có thể truy vấn và sửa đổi.

Cài đặt cơ sở dữ liệu phù hợp nhất với bạn. Bạn có thể có nhiều sự lựa chọn và phổ biến nhất là -

  • MySQL DB:MySQL là một cơ sở dữ liệu mã nguồn mở. Bạn có thể tải xuống từ MySQL Official Site . Chúng tôi khuyên bạn nên tải xuống bản cài đặt Windows đầy đủ.

    Ngoài ra, hãy tải xuống và cài đặt MySQL Administrator cũng như MySQL Query Browser . Đây là những công cụ dựa trên GUI sẽ giúp bạn phát triển dễ dàng hơn nhiều.

    Cuối cùng, tải xuống và giải nén MySQL Connector / J (trình điều khiển MySQL JDBC) trong một thư mục thuận tiện. Đối với mục đích của hướng dẫn này, chúng tôi sẽ giả định rằng bạn đã cài đặt trình điều khiển tại C: \ Program Files \ MySQL \ mysql-connector-java-5.1.8.

    Theo đó, đặt biến CLASSPATH thành C: \ Program Files \ MySQL \ mysql-connector-java-5.1.8 \ mysql-connector-java-5.1.8-bin.jar. Phiên bản trình điều khiển của bạn có thể thay đổi tùy theo cài đặt của bạn.

  • PostgreSQL DB:PostgreSQL là một cơ sở dữ liệu mã nguồn mở. Bạn có thể tải xuống từ Trang web chính thức của PostgreSQL .

    Cài đặt Postgres chứa một công cụ quản trị dựa trên GUI được gọi là pgAdmin III. Trình điều khiển JDBC cũng được bao gồm như một phần của cài đặt.

  • Oracle DB- Oracle DB là một cơ sở dữ liệu thương mại được bán bởi Oracle. Chúng tôi giả định rằng bạn có phương tiện phân phối cần thiết để cài đặt nó.

    Cài đặt Oracle bao gồm một công cụ quản trị dựa trên GUI được gọi là Enterprise Manager. Trình điều khiển JDBC cũng được bao gồm như một phần của cài đặt.

Cài đặt trình điều khiển cơ sở dữ liệu

JDK mới nhất bao gồm trình điều khiển Cầu JDBC-ODBC giúp hầu hết các trình điều khiển Kết nối Cơ sở dữ liệu Mở (ODBC) khả dụng cho các lập trình viên sử dụng JDBC API.

Ngày nay, hầu hết các nhà cung cấp Cơ sở dữ liệu đang cung cấp trình điều khiển JDBC thích hợp cùng với cài đặt Cơ sở dữ liệu. Vì vậy, bạn không nên lo lắng về phần này.

Đặt thông tin đăng nhập cơ sở dữ liệu

Đối với hướng dẫn này, chúng tôi sẽ sử dụng cơ sở dữ liệu MySQL. Khi bạn cài đặt bất kỳ cơ sở dữ liệu nào ở trên, ID quản trị viên của nó được đặt thànhroot và cung cấp điều khoản để đặt mật khẩu bạn chọn.

Sử dụng mã gốc và mật khẩu, bạn có thể tạo ID người dùng và mật khẩu khác hoặc bạn có thể sử dụng ID và mật khẩu gốc cho ứng dụng JDBC của mình.

Có nhiều hoạt động cơ sở dữ liệu khác nhau như tạo và xóa cơ sở dữ liệu, sẽ cần ID và mật khẩu quản trị viên.

Đối với phần còn lại của hướng dẫn JDBC, chúng tôi sẽ sử dụng Cơ sở dữ liệu MySQL với username làm ID và password làm mật khẩu.

Nếu bạn không có đủ đặc quyền để tạo người dùng mới, thì bạn có thể yêu cầu Quản trị viên cơ sở dữ liệu (DBA) tạo ID người dùng và mật khẩu cho bạn.

Tạo nên cơ sở dữ liệu

Để tạo emp cơ sở dữ liệu, sử dụng các bước sau:

Bước 1

Mở một Command Prompt và thay đổi thư mục cài đặt như sau:

C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>

Note: Con đường dẫn đến mysqld.execó thể khác nhau tùy thuộc vào vị trí cài đặt MySQL trên hệ thống của bạn. Bạn cũng có thể kiểm tra tài liệu về cách khởi động và dừng máy chủ cơ sở dữ liệu của mình.

Bước 2

Khởi động máy chủ cơ sở dữ liệu bằng cách thực hiện lệnh sau, nếu nó chưa chạy.

C:\Program Files\MySQL\bin>mysqld
C:\Program Files\MySQL\bin>

Bước 3

Tạo emp cơ sở dữ liệu bằng cách thực hiện lệnh sau:

C:\Program Files\MySQL\bin> mysqladmin create emp -u root -p
Enter password: ********
C:\Program Files\MySQL\bin>

Tạo bảng

Để tạo Employees trong cơ sở dữ liệu emp, sử dụng các bước sau:

Bước 1

Mở một Command Prompt và thay đổi thư mục cài đặt như sau:

C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>

Bước 2

Đăng nhập vào cơ sở dữ liệu như sau:

C:\Program Files\MySQL\bin>mysql -u root -p
Enter password: ********
mysql>

Bước 3

Tạo bảng Employee như sau -

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>

Tạo bản ghi dữ liệu

Cuối cùng, bạn tạo một vài bản ghi trong bảng Nhân viên như sau:

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>

Để hiểu đầy đủ về cơ sở dữ liệu MySQL, hãy nghiên cứu Hướng dẫn sử dụng MySQL .

Tải xuống Kho lưu trữ DBUtils của Commons

Tải xuống phiên bản mới nhất của tệp jar Apache Common DBUtils từ 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. zip , Apache Commons Pool commons-pool2-2.4.3-bin.zip và, Apache Commons Ghi nhật ký commons-logging-1.2-bin.zip . Tại thời điểm viết hướng dẫn này, chúng tôi đã tải xuống 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 và sao chép nó vào C: \> thư mục Apache.

Hệ điều hành Tên lưu trữ
các cửa sổ commons-dbutils-1.7-bin.zip
Linux commons-dbutils-1.7-bin.tar.gz
Mac commons-dbutils-1.7-bin.tar.gz

Đặt Môi trường DBUtils Chung của Apache

Đặt APACHE_HOMEbiến môi trường để trỏ đến vị trí thư mục cơ sở nơi lưu trữ jar Apache trên máy của bạn. Giả sử, chúng tôi đã giải nén commons-dbutils-1.7-bin.zip trong thư mục Apache trên các Hệ điều hành khác nhau như sau.

Hệ điều hành Đầu ra
các cửa sổ Đặt biến môi trường APACHE_HOME thành C: \ Apache
Linux xuất APACHE_HOME = / usr / local / Apache
Mac xuất APACHE_HOME = / Library / Apache

Đặt biến CLASSPATH

Đặt CLASSPATHbiến môi trường để trỏ đến vị trí jar IO chung. Giả sử, bạn đã lưu trữ commons-dbutils-1.7-bin.zip trong thư mục Apache trên các Hệ điều hành khác nhau như sau.

Hệ điều hành Đầu ra
các cửa sổ Đặt biến môi trường CLASSPATH thành% 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. 3.jar; commons-logging-1.2.jar;
Linux export 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 export 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; commons-logging -1,2.jar.

Bây giờ bạn đã sẵn sàng để bắt đầu thử nghiệm với DBUtils. Chương tiếp theo cung cấp cho bạn một ví dụ mẫu về Lập trình DBUtils.

Chương này cung cấp một ví dụ về cách tạo một ứng dụng JDBC đơn giản bằng thư viện DBUtils. Điều này sẽ chỉ cho bạn cách mở kết nối cơ sở dữ liệu, thực hiện truy vấn SQL và hiển thị kết quả.

Tất cả các bước được đề cập trong ví dụ mẫu này, sẽ được giải thích trong các chương tiếp theo của hướng dẫn này.

Tạo ứng dụng JDBC

Có sáu bước sau liên quan đến việc xây dựng một ứng dụng JDBC:

  • Import the packages- Yêu cầu bạn bao gồm các gói chứa các lớp JDBC cần thiết cho lập trình cơ sở dữ liệu. Thông thường, sử dụngimport java.sql.* sẽ đủ.

  • Register the JDBC driver - Yêu cầu bạn khởi tạo một trình điều khiển, để bạn có thể mở một kênh giao tiếp với cơ sở dữ liệu.

  • Open a connection - Yêu cầu sử dụng DriverManager.getConnection() để tạo một đối tượng Connection, đối tượng này đại diện cho một kết nối vật lý với cơ sở dữ liệu.

  • Execute a query - Yêu cầu sử dụng một đối tượng kiểu Statement để xây dựng và gửi một câu lệnh SQL vào cơ sở dữ liệu.

  • Extract data from result set - Yêu cầu bạn sử dụng thích hợp ResultSet.getXXX() phương pháp để lấy dữ liệu từ tập kết quả.

  • Clean up the environment - Yêu cầu đóng tất cả các tài nguyên cơ sở dữ liệu một cách rõ ràng thay vì dựa vào bộ sưu tập rác của JVM.

Mã mẫu

Ví dụ mẫu này có thể dùng như một mẫu, khi bạn cần tạo ứng dụng JDBC của riêng mình trong tương lai.

Mã mẫu này đã được viết dựa trên môi trường và thiết lập cơ sở dữ liệu được thực hiện trong chương trước.

Sao chép và dán ví dụ sau vào MainApp.java, biên dịch và chạy như sau:

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

Chương trình được đưa ra dưới đây -

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;
   }
}

Bây giờ chúng ta hãy biên dịch ví dụ trên như sau:

C:\>javac MainApp.java Employee.java
C:\>

Khi bạn chạy MainApp, nó tạo ra kết quả sau:

C:\>java MainApp
Connecting to database...
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>

Ví dụ sau sẽ trình bày cách tạo bản ghi bằng cách sử dụng truy vấn Chèn với sự trợ giúp của DBUtils. Chúng tôi sẽ chèn một bản ghi trong Bảng nhân viên.

Cú pháp

Cú pháp để tạo một truy vấn được đưa ra dưới đây:

String insertQuery ="INSERT INTO employees(id,age,first,last) VALUES (?,?,?,?)";
int insertedRecords = queryRunner.update(conn, insertQuery,104,30, "Sohan","Kumar");

Ở đâu,

  • insertQuery - Chèn truy vấn có trình giữ chỗ.

  • queryRunner - Đối tượng QueryRunner để chèn đối tượng nhân viên trong cơ sở dữ liệu.

Để hiểu các khái niệm đã đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn chèn. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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);
      }
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau:

1 record(s) inserted.

Ví dụ sau sẽ trình bày cách đọc bản ghi bằng cách sử dụng truy vấn Đọc với sự trợ giúp của DBUtils. Chúng tôi sẽ đọc một bản ghi từ Bảng nhân viên.

Cú pháp

Cú pháp cho truy vấn đọc được đề cập bên dưới:

ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

Ở đâu,

  • resultHandler - Đối tượng ResultSetHandler để ánh xạ tập kết quả thành đối tượng Employee.

  • queryRunner - Đối tượng QueryRunner để đọc một đối tượng nhân viên từ cơ sở dữ liệu.

Để hiểu các khái niệm đã đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn đọc. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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);
      }
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau:

ID: 104, Age: 30, First: Sohan, Last: Kumar

Ví dụ sau sẽ trình bày cách cập nhật bản ghi bằng cách sử dụng truy vấn Cập nhật với sự trợ giúp của DBUtils. Chúng tôi sẽ cập nhật hồ sơ trong Bảng nhân viên.

Cú pháp

Cú pháp cho truy vấn cập nhật như sau:

String updateQuery = "UPDATE employees SET age=? WHERE id=?";
int updatedRecords = queryRunner.update(conn, updateQuery, 33,104);

Ở đâu,

  • updateQuery - Cập nhật truy vấn có trình giữ chỗ.

  • queryRunner - Đối tượng QueryRunner để cập nhật đối tượng nhân viên trong cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn cập nhật. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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);
      }
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau:

1 record(s) updated.

Ví dụ sau sẽ trình bày cách xóa bản ghi bằng cách sử dụng truy vấn Xóa với sự trợ giúp của DBUtils. Chúng tôi sẽ xóa một bản ghi trong Bảng nhân viên.

Cú pháp

Cú pháp cho truy vấn xóa được đề cập bên dưới:

String deleteQuery = "DELETE FROM employees WHERE id=?";
int deletedRecords = queryRunner.delete(conn, deleteQuery, 33,104);

Ở đâu,

  • deleteQuery - XÓA truy vấn có trình giữ chỗ.

  • queryRunner - Đối tượng QueryRunner để xóa đối tượng nhân viên trong cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn xóa. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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);
      }
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau:

1 record(s) deleted.

Các org.apache.commons.dbutils.QueryRunnerlớp là lớp trung tâm trong thư viện DBUtils. Nó thực hiện các truy vấn SQL với các chiến lược có thể cắm được để xử lý các ResultSets. Lớp này là luồng an toàn.

Khai báo lớp học

Sau đây là khai báo cho lớp org.apache.commons.dbutils.QueryRunner -

public class QueryRunner
   extends AbstractQueryRunner

Sử dụng

  • Step 1 - Tạo đối tượng kết nối.

  • Step 2 - Sử dụng các phương thức đối tượng QueryRunner để thực hiện các thao tác với cơ sở dữ liệu.

Thí dụ

Ví dụ sau sẽ trình bày cách đọc một bản ghi bằng lớp QueryRunner. Chúng tôi sẽ đọc một trong những bản ghi có sẵn trong Bảng nhân viên.

Cú pháp

ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp = 
   queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

Ở đâu,

  • resultHandler - Đối tượng ResultSetHandler để ánh xạ tập kết quả thành đối tượng Employee.

  • queryRunner - Đối tượng QueryRunner để đọc đối tượng nhân viên từ cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn đọc. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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);
      }        
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

ID: 103, Age: 28, First: Sumit, Last: Mittal

Các org.apache.commons.dbutils.AsyncQueryRunnerlớp giúp thực thi các truy vấn SQL đang chạy dài với hỗ trợ không đồng bộ. Lớp này là luồng an toàn. Lớp này hỗ trợ các phương thức tương tự như QueryRunner nhưng nó trả về các đối tượng Callable có thể được sử dụng sau này để truy xuất kết quả.

Khai báo lớp học

Sau đây là khai báo cho lớp org.apache.commons.dbutils.AsyncQueryRunner:

public class AsyncQueryRunner
   extends AbstractQueryRunner

Sử dụng

  • Step 1 - Tạo đối tượng kết nối.

  • Step 2 - Sử dụng các phương thức đối tượng AsyncQueryRunner để thực hiện các thao tác với cơ sở dữ liệu.

Thí dụ

Ví dụ sau sẽ trình bày cách cập nhật bản ghi bằng lớp AsyncQueryRunner. Chúng tôi sẽ cập nhật một trong những bản ghi có sẵn trong Bảng nhân viên.

Cú pháp

String updateQuery = "UPDATE employees SET age=? WHERE id=?";
future = asyncQueryRunner.update(conn,
            "UPDATE employees SET age=? WHERE id=?", 33,103);

Ở đâu,

  • updateQuery - Cập nhật truy vấn có trình giữ chỗ.

  • asyncQueryRunner - Đối tượng asyncQueryRunner để cập nhật đối tượng nhân viên trong cơ sở dữ liệu.

  • future - Đối tượng tương lai để lấy kết quả sau này.

Để hiểu các khái niệm được đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn cập nhật ở chế độ không đồng bộ. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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);
      }  
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

1 record(s) updated.

Các org.apache.commons.dbutils.ResultSetHandler interface có nhiệm vụ chuyển đổi các ResultSets thành các đối tượng.

Khai báo lớp học

Sau đây là khai báo cho lớp org.apache.commons.dbutils.ResultSetHandler:

public interface ResultSetHandler<T>

Sử dụng

  • Step 1 - Tạo đối tượng kết nối.

  • Step 2 - Tạo hiện thực của ResultSetHandler.

  • Step 3 - Truyền resultSetHandler đến đối tượng QueryRunner và thực hiện các thao tác với cơ sở dữ liệu.

Thí dụ

Ví dụ sau sẽ trình bày cách ánh xạ một bản ghi bằng lớp ResultSetHandler. Chúng tôi sẽ đọc một trong những bản ghi có sẵn trong Bảng nhân viên.

Cú pháp

Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

Ở đâu,

  • resultHandler - Đối tượng ResultSetHandler để ánh xạ tập kết quả thành đối tượng Employee.

  • queryRunner - Đối tượng QueryRunner để đọc đối tượng nhân viên từ cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn đọc. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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);
      }              
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

Connecting to database...
Result: [103, 33, Sumit, Mittal]

Các org.apache.commons.dbutils.BeanHandlerlà sự triển khai của giao diện ResultSetHandler và chịu trách nhiệm chuyển đổi hàng ResultSet đầu tiên thành một JavaBean. Lớp này là luồng an toàn.

Khai báo lớp học

Sau đây là khai báo cho lớp org.apache.commons.dbutils.BeanHandler -

public class BeanHandler<T>
   extends Object implements ResultSetHandler<T>

Sử dụng

  • Step 1 - Tạo đối tượng kết nối.

  • Step 2 - Nhận thực thi ResultSetHandler dưới dạng đối tượng BeanHandler.

  • Step 3 - Truyền resultSetHandler đến đối tượng QueryRunner và thực hiện các thao tác với cơ sở dữ liệu.

Thí dụ

Ví dụ sau sẽ trình bày cách đọc một bản ghi bằng cách sử dụng lớp BeanHandler. Chúng tôi sẽ đọc một trong những bản ghi có sẵn trong Bảng Nhân viên và ánh xạ nó tới Hạt nhân viên.

Cú pháp

Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

Ở đâu,

  • resultHandler - Đối tượng BeanHandler để ánh xạ tập kết quả thành đối tượng Employee.

  • queryRunner - Đối tượng QueryRunner để đọc đối tượng nhân viên từ cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn đọc. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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);
      }              
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

ID: 103, Age: 28, First: Sumit, Last: Mittal

Các org.apache.commons.dbutils.BeanListHandlerlà sự triển khai của giao diện ResultSetHandler và chịu trách nhiệm chuyển đổi các hàng ResultSet thành danh sách của Java Bean. Lớp này là luồng an toàn.

Khai báo lớp học

Sau đây là khai báo cho lớp org.apache.commons.dbutils.BeanListHandler -

public class BeanListHandler<T>
   extends Object implements ResultSetHandler<List<T>>

Sử dụng

  • Step 1 - Tạo đối tượng kết nối.

  • Step 2 - Nhận thực thi ResultSetHandler dưới dạng đối tượng BeanListHandler.

  • Step 3 - Truyền resultSetHandler đến đối tượng QueryRunner và thực hiện các thao tác với cơ sở dữ liệu.

Thí dụ

Ví dụ sau sẽ trình bày cách đọc danh sách các bản ghi bằng cách sử dụng lớp BeanListHandler. Chúng tôi sẽ đọc các bản ghi có sẵn trong Bảng nhân viên và ánh xạ chúng thành danh sách các hạt Nhân viên.

Cú pháp

List<Employee> empList = queryRunner.query(conn, "SELECT * FROM employees", resultHandler);

Ở đâu,

  • resultHandler - Đối tượng BeanListHandler để ánh xạ bộ kết quả thành danh sách các đối tượng Nhân viên.

  • queryRunner - Đối tượng QueryRunner để đọc đối tượng nhân viên từ cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn đọc. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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);
      }        
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Các org.apache.commons.dbutils.ArrayListHandlerlà sự triển khai của giao diện ResultSetHandler và chịu trách nhiệm chuyển đổi các hàng ResultSet thành một đối tượng []. Lớp này là luồng an toàn.

Khai báo lớp học

Sau đây là khai báo cho lớp org.apache.commons.dbutils.ArrayListHandler -

public class ArrayListHandler
   extends AbstractListHandler<Object[]>

Sử dụng

  • Step 1 - Tạo đối tượng kết nối.

  • Step 2 - Nhận thực thi ResultSetHandler dưới dạng đối tượng ArrayListHandler.

  • Step 3 - Truyền resultSetHandler đến đối tượng QueryRunner và thực hiện các thao tác với cơ sở dữ liệu.

Thí dụ

Ví dụ sau sẽ trình bày cách đọc danh sách các bản ghi bằng lớp ArrayListHandler. Chúng tôi sẽ đọc các bản ghi có sẵn trong Bảng nhân viên dưới dạng đối tượng [].

Cú pháp

List<Object> result = queryRunner.query(conn, "SELECT * FROM employees", new ArrayListHandler());

Ở đâu,

  • resultHandler - Đối tượng ArrayListHandler để ánh xạ tập kết quả vào danh sách đối tượng [].

  • queryRunner - Đối tượng QueryRunner để đọc đối tượng nhân viên từ cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn đọc. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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);
      }        
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

[100, 18, Zara, Ali]
[101, 25, Mahnaz, Fatma]
[102, 30, Zaid, Khan]
[103, 28, Sumit, Mittal]

Các org.apache.commons.dbutils.MapListHandlerlà việc triển khai giao diện ResultSetHandler và chịu trách nhiệm chuyển đổi các hàng ResultSet thành danh sách Bản đồ. Lớp này là luồng an toàn.

Khai báo lớp học

Sau đây là khai báo cho lớp org.apache.commons.dbutils.MapListHandler -

public class MapListHandler
   extends AbstractListHandler<Map<String,Object>>

Sử dụng

  • Step 1 - Tạo đối tượng kết nối.

  • Step 2 - Nhận triển khai ResultSetHandler dưới dạng đối tượng MapListHandler.

  • Step 3 - Truyền resultSetHandler đến đối tượng QueryRunner và thực hiện các thao tác với cơ sở dữ liệu.

Thí dụ

Ví dụ sau sẽ trình bày cách đọc danh sách các bản ghi bằng lớp MapListHandler. Chúng tôi sẽ đọc các bản ghi có sẵn trong Bảng nhân viên dưới dạng danh sách bản đồ.

Cú pháp

List<Map<String, Object>> result = queryRunner.query(conn, "SELECT * FROM employees", new MapListHandler());

Ở đâu,

  • resultHandler - Đối tượng MapListHandler để ánh xạ bộ kết quả thành danh sách các bản đồ.

  • queryRunner - Đối tượng QueryRunner để đọc đối tượng nhân viên từ cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn đọc. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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);
      }        
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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}]

Chúng tôi có thể tạo trình xử lý tùy chỉnh của riêng mình bằng cách triển khai giao diện ResultSetHandler hoặc bằng cách mở rộng bất kỳ triển khai nào hiện có của ResultSetHandler. Trong ví dụ dưới đây, chúng tôi đã tạo một Trình xử lý tùy chỉnh, EmployeeHandler bằng cách mở rộng lớp BeanHandler.

Để hiểu các khái niệm được đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn đọc. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của EmployeeHandler.java tập tin.

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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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);
      }        
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

ID: 103, Age: 28, Name: Sumit, Mittal

Trong trường hợp tên cột trong bảng cơ sở dữ liệu và tên đối tượng javabean tương đương không giống nhau thì chúng ta có thể ánh xạ chúng bằng cách sử dụng đối tượng BasicRowProcessor tùy chỉnh. Xem ví dụ bên dưới.

Để hiểu các khái niệm được đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn đọc. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của EmployeeHandler.java tập tin.

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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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);
      }              
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

ID: 103, Age: 28, Name: Sumit, Mittal

Cho đến nay, chúng tôi đã sử dụng đối tượng kết nối trong khi sử dụng QueryRunner. Chúng tôi cũng có thể sử dụng nguồn dữ liệu một cách dễ dàng. Ví dụ sau sẽ trình bày cách đọc bản ghi bằng cách sử dụng Truy vấn đọc với sự trợ giúp của QueryRunner và nguồn dữ liệu. Chúng tôi sẽ đọc hồ sơ từ Bảng nhân viên.

Cú pháp

QueryRunner queryRunner = new QueryRunner( dataSource );
Employee emp = queryRunner.query("SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

Ở đâu,

  • dataSource - Đối tượng DataSource được cấu hình.

  • resultHandler - Đối tượng ResultSetHandler để ánh xạ tập kết quả thành đối tượng Employee.

  • queryRunner - Đối tượng QueryRunner để đọc đối tượng nhân viên từ cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến DBUtils, chúng ta hãy viết một ví dụ sẽ chạy một truy vấn đọc. Để viết ví dụ của chúng tôi, hãy để chúng tôi tạo một ứng dụng mẫu.

Bươc Sự miêu tả
1 Cập nhật tệp MainApp.java được tạo trong chương DBUtils - Ứng dụng đầu tiên .
2 Biên dịch và chạy ứng dụng như giải thích bên dưới.

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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());
   }
}

Khi bạn đã hoàn tất việc tạo các tệp nguồn, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

ID: 103, Age: 33, First: Sumit, Last: Mittal