Chào các bạn đã đến với chủ đề tiếp của mình. Ở chủ đề này, mình sẽ tiếp tục giới thiệu đến các bạn cách sử dụng JDBC để kết nối với database trong Java. Trong automation, mình cũng rất hay lấy dữ liệu từ database để verify với data hiển thị trên UI. Nào, chúng ta hãy bắt đầu nội dung của ngày hôm nay nhé.
Nội dung
1. JDBC là gì?
JDBC – Java Database Connectivity, là một API chuẩn để kết nối giữa ngôn ngữ lập trình Java và các database. Nó là một phần của JavaSE (Java Standard Edition). API JDBC sử dụng JDBC drivers để kết nối với cơ sở dữ liệu.
2. Kiến trúc JDBC
- JDBC API: Cho phép chương trình Java thực thi các câu lệnh SQL và truy xuất kết quả.
- DriverManager: Đóng vai trò quan trọng trong kiến trúc JDBC. Nó sử dụng một số quy trình điều khiển dành riêng cho cơ sở dữ liệu để kết nối với database
- JDBC Driver: Để giao tiếp với nguồn dữ liệu thông qua JDBC, bạn cần JDBC Driver để giao tiếp với nguồn dữ liệu tương ứng. Có 4 loại JDBC drivers:
- JDBC – ODBC Bridge Driver
- Native Drive
- Network Protocol Driver
- Thin driver
3. Các thành phần chính trong JDBC
- DriverManager: Là một class dùng để quản lý danh sách các Driver
- Driver: Là một interface, chịu trách nhiệm xử lý các hoạt động giao tiếp giữa ứng dụng và database
- Connection: Là một interface, cung cấp các phương thức cho việc thao tác với database
- Statement: Là một interface, để thực thi các câu lệnh SQL xuống database. Ví dụ như update, delete.
- ResultSet: Là một bảng dữ liệu mà biểu diễn tập kết quả từ cơ sở dữ liệu trả về bởi các lệnh SQL
- SQLException: Xử lý ngoại lệ xảy ra trong database
4. Các bước kết nối database với Java
- Load driver
- Tạo kết nối (Create Connection)
- Tạo câu lệnh truy vấn SQL (Statement)
- Thực thi câu lệnh truy vấn SQL (Excute query)
- Đóng kết nối (Close Connection)
5. Ví dụ
5.1. Chuẩn bị database
Trong ví dụ này mình sẽ sử dụng MySQL. Nếu bạn nào chưa biết cách cài đặt, thì hãy refer đến link này nhé: https://bizflycloud.vn/tin-tuc/huong-dan-cai-dat-mysql-tren-he-dieu-hanh-windows-don-gian-nhat-20210407181410254.htm
Mình có một bảng users
với cấu trúc sau:
Thêm một số dữ liệu vào bảng users
5.2. Cài đặt thư viện
Ở đây mình sẽ sử dụng Maven để quản lý chương trình Java. Nếu bạn nào chưa biết tạo project maven thì có thể xem ở đây nhé.
Add dependency
vào file pom.xml
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
Nếu bạn sử dụng database khác thay vì MySQL thì hãy sử dụng các dependency
khác
5.3. Tạo kết nối tới database
Để có thể kết nối tới database chúng ta cần chuẩn bị các thông tin như: hostname, username, password, database. Ví dụ chúng ta sẽ tạo class ConnectJDBC như sau:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectJDBC {
private String hostName = "localhost:8082";
private String dbName = "my_database";
private String username = "root";
private String password = "123";
private String connectionURL = "jdbc:mysql://"+hostName+"/"+dbName;
public Connection connect(){
//Tạo đối tượng Connection
Connection conn = null;
try {
conn = DriverManager.getConnection(connectionURL, username, password);
System.out.println("Kết nối thành công");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}
5.4. Sử dụng JDBC API để truy vấn dữ liệu
Mình sẽ tạo thêm class getAllUser để lấy toàn bộ thông user in ra màn hình
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class GetAllUser {
public static void main(String[] args) {
ConnectJDBC connectJDBC = new ConnectJDBC();
Connection conn = connectJDBC.connect();
String query = "SELECT * FROM users";
Statement stm = null;
try {
//Tạo đối tượng Statement
stm = conn.createStatement();
//Thực thi truy vấn và trả về đối tượng ResultSet
ResultSet rs = stm.executeQuery(query);
//Duyệt kết quả trả về
while (rs.next()){ //Di chuyển con trỏ xuống bản ghi kế tiếp
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
String email = rs.getString("email");
System.out.println(id + " - " + username + " - " + password + " - " + email);
}
//Đóng kết nối
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Kết quả
5.5. Chỉ định tham số đầu vào với PreparedStatement
Tham số được đại diện bởi dấu ?, bạn phải cung cấp giá trị cho tất cả các tham số trước khi thực hiện câu lệnh SQL. Mỗi tham số sẽ được đánh dấu bằng số thứ tự, tham số đầu tiên có vị trí là 1, kế tiếp là 2,…
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class PreparedStatement1 {
public static void main(String[] args) {
ConnectJDBC connectJDBC = new ConnectJDBC();
Connection conn = connectJDBC.connect();
String query = "SELECT * FROM users WHERE username = ?";
PreparedStatement pstm = null;
try {
//Tạo đối tượng Statement
pstm = conn.prepareStatement(query);
//gán các giá trị vào tham số
pstm.setString(1, "ngoc");
//Thực thi truy vấn và trả về đối tượng ResultSet
ResultSet rs = pstm.executeQuery();
//Duyệt kết quả trả về
while (rs.next()){
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
String email = rs.getString("email");
System.out.println(id + " - " + username + " - " + password + " - " + email);
}
//Đóng kết nối
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Kết quả:
5.6. Thêm dữ liệu mới
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class AddRecord {
public static void main(String[] args) {
ConnectJDBC connectJDBC = new ConnectJDBC();
Connection conn = connectJDBC.connect();
String query = "INSERT INTO users(id, username, password, email) " +
"VALUES (null, ?,?,?)";
PreparedStatement pstm = null;
try {
pstm = conn.prepareStatement(query);
pstm.setString(1, "hung");
pstm.setString(2, "123456789");
pstm.setString(3, "hung@gmail.com");
//Khi thực hiện các lệnh insert/update/delete sử dụng executeUpdate(), nó sẽ trả về số hàng bị tác động
int row = pstm.executeUpdate();
if(row != 0){
System.out.println("Thêm thành công " + row);
}
//Đóng kết nối
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Kết quả:
5.7. Update password
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Updatepassword {
public static void main(String[] args) {
ConnectJDBC connectJDBC = new ConnectJDBC();
Connection conn = connectJDBC.connect();
String query = "UPDATE users SET password = ? WHERE id = ?";
PreparedStatement pstm = null;
try {
pstm = conn.prepareStatement(query);
pstm.setString(1, "ngoc123");
pstm.setInt(2, 1);
//Khi thực hiện các lệnh insert/update/delete sử dụng executeUpdate, nó sẽ trả về số hàng bị tác động
int row = pstm.executeUpdate();
if(row != 0){
System.out.println("Cập nhật thành công " + row);
}
//Đóng kết nối
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Kết quả:
5.8. Xóa một record
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DeleteRecord {
public static void main(String[] args) {
ConnectJDBC connectJDBC = new ConnectJDBC();
Connection conn = connectJDBC.connect();
String query = "DELETE FROM users WHERE id = ?";
PreparedStatement pstm = null;
try {
pstm = conn.prepareStatement(query);
pstm.setInt(1, 1);
//Khi thực hiện các lệnh insert/update/delete sử dụng executeUpdate, nó sẽ trả về số hàng bị tác động
int row = pstm.executeUpdate();
if(row != 0){
System.out.println("Xóa thành công " + row);
}
//Đóng kết nối
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Kết quả:
6. Lời kết
Như vậy mình đã giới thiệu xong cách truy vấn dữ liệu database với MySQL trong Java. Cảm ơn các bạn đã theo dõi bài viết của mình. Chúc các bạn thành công. Hẹn gặp lại các bạn ở những chủ đề tiếp theo. Bái bai.
Nguồn:
https://techmaster.vn/posts/36976/huong-dan-su-dung-jdbc-ket-noi-co-so-du-lieu-trong-java