Hướng dẫn jdbc for mysql - jdbc cho mysql



Để kết nối Java với MySQL bằng JDBC, giả sử bạn đã tạo bảng trong MySQL, bạn cần làm theo 4 bước sau: kết nối Java với MySQL bằng JDBC, giả sử bạn đã tạo bảng trong MySQL, bạn cần làm theo 4 bước sau:

  1. Tải file mysql-connector-java-x.y.zz.zip về máy tại https://dev.mysql.com/downloads/connector/j/, giải nén ra được file mysql-connector-java-x.y.zz-bin.jar. mysql-connector-java-x.y.zz.zip về máy tại https://dev.mysql.com/downloads/connector/j/, giải nén ra được file mysql-connector-java-x.y.zz-bin.jar.
  2. Add thư viện JDBC Driver mysql-connector-java-x.y.zz-bin.jar vào project. mysql-connector-java-x.y.zz-bin.jar vào project.
  3. Gọi phương thức Class.forName("com.mysql.jdbc.Driver"). forName("com.mysql.jdbc.Driver").
  4. Gọi phương thức DriverManager.getConnection() để kết nối đến cơ sở dữ liệu MySQL. getConnection() để kết nối đến cơ sở dữ liệu MySQL.

Chi tiết về việc kết nối ứng dụng Java với cơ sở dữ liệu MySQL bằng JDBC được thể hiển trong ví dụ dưới đây.


Tạo bảng 'student' trong cơ sở dữ liệu có tên 'testdb' trong MySQL với câu lệnh như sau:

CREATE TABLE student (
   id   INT              NOT NULL,
   name VARCHAR (32)     NOT NULL,
   address  VARCHAR (32) NOT NULL,
   PRIMARY KEY (id)
);

Insert vài dòng dữ liệu cho bảng 'student'

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")

Sau khi thực thi các câu lệnh trên chúng ta có được dữ liệu như sau:

Hướng dẫn jdbc for mysql - jdbc cho mysql

Tạo chương trình để kết nối và hiển thị dữ liệu của bảng 'student' ra màn hình như sau:

File: ConnectMysqlExample.java

package vn.viettuts.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class ConnectMysqlExample {
    private static String DB_URL = "jdbc:mysql://localhost:3306/testdb";
    private static String USER_NAME = "root";
    private static String PASSWORD = "1234567890";

    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        try {
            // connnect to database 'testdb'
            Connection conn = getConnection(DB_URL, USER_NAME, PASSWORD);
            // crate statement
            Statement stmt = conn.createStatement();
            // get data from table 'student'
            ResultSet rs = stmt.executeQuery("select * from student");
            // show data
            while (rs.next()) {
                System.out.println(rs.getInt(1) + "  " + rs.getString(2) 
                        + "  " + rs.getString(3));
            }
            // close connection
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    /**
     * create connection 
     * 
     * @author viettuts.vn
     * @param dbURL: database's url
     * @param userName: username is used to login
     * @param password: password is used to login
     * @return connection
     */
    public static Connection getConnection(String dbURL, String userName, 
            String password) {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dbURL, userName, password);
            System.out.println("connect successfully!");
        } catch (Exception ex) {
            System.out.println("connect failure!");
            ex.printStackTrace();
        }
        return conn;
    }
}

Kết quả:

connect successfully!
1  Công  Hanoi
2  Dung  Vinhphuc
3  Ngôn  Danang
4  Hạnh  Hanoi

Tham khảo bài học: Cài đặt MySQL



Xóa một record

Xem toàn bộ code tại đây

Khóa học Java FullStack dành cho người mới bắt đầu

Chi tiết: https://java.techmaster.vn/

Liên hệ hỗ trợ: Ms Mẫn - 0963023185 (zalo)

  • Hiện nay hầu hết các ứng dụng Java hay các framework của nó đều dần chuyển sang các ORM(Object Relational Mapping) để làm việc với database, có thể kể đến là hibernate được sử dụng rộng rãi. Thế nên mọi người có xu hướng dần quên đi JDBC, thế nhưng các bạn có biết rằng bên dưới hibernate đang sử dụng JDBC để để kết nối đến database và thực thi các lệnh SQL được nó tạo ra.
  • Trong loạt bài viết này, chúng ta sẽ cùng tìm hiểu về JDBC và cách sử dụng chúng.
  • 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.
    • 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ả. Một số lớp và interface quan trọng được định nghĩa trong JDBC API như sau:
    • 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 hiệu quả các ứng dụng doanh nghiệp 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
  • 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
  • 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)

Tạo project ví dụ JDBC

Chuẩn bị database

Trong ví dụ này mình sẽ sử dụng MySQL. Mình có một bảng

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
3 với cấu trúc sau:

Hướng dẫn jdbc for mysql - jdbc cho mysql

Thêm một số dữ liệu vào bảng users

Cài đặt thư viện

Ở đây mình sẽ sử dụng Maven để quản lý chương trình Java

Add 2

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
4 vào file pom.xml

<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc10 -->
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc10</artifactId>
    <version>19.13.0.0.1</version>
</dependency>

<!-- 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

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
4 khác

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

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

Sử dụng JDBC API để truy vấn dữ liệu

Lấy ra toàn bộ thông tin users

public class Main {
    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ả:

Kết nối thành công
1 - ngoc - 12345 - ngoc@gmail.com
2 - hoang - 12345 - hoang@gmail.com
3 - linh - 12345 - linh@gmail.com
4 - quan - 12345 - quan@gmail.com

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,…

public class Main {
    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ả:

Kết nối thành công
1 - ngoc - 12345 - ngoc@gmail.com

Chỉ định tham số đầu vào với PreparedStatement

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
0

Kết quả:

Chỉ định tham số đầu vào với PreparedStatement

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
1

Kết quả:

Chỉ định tham số đầu vào với PreparedStatement

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
2

Kết quả:

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,…

Thêm dữ liệu mới

Update password