Để kết nối MySQL từ một ứng dụng Java, bạn cần thực hiện các bước cơ bản bao gồm:

  1. Cài đặt MySQL JDBC Driver.
  2. Kết nối ứng dụng Java với MySQL bằng JDBC API.
  3. Thực hiện các truy vấn SQL như SELECT, INSERT, UPDATE, hoặc DELETE.

Dưới đây là hướng dẫn chi tiết từ cơ bản đến nâng cao:


1. Cài đặt MySQL JDBC Driver

1.1. Tải và thêm MySQL JDBC Driver

MySQL JDBC Driver là một thư viện giúp ứng dụng Java có thể giao tiếp với cơ sở dữ liệu MySQL. Bạn có thể tải MySQL Connector/J từ trang chính thức của MySQL hoặc sử dụng Maven để tự động thêm thư viện này vào dự án.

Nếu bạn dùng Maven:

Chỉ cần thêm đoạn sau vào file pom.xml:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.34</version>
</dependency>

Nếu không dùng Maven:

  • Tải xuống MySQL Connector/J từ đây.
  • Thêm file .jar vào classpath của dự án Java.

2. Tạo kết nối với MySQL bằng JDBC

2.1. Chuẩn bị kết nối

Để kết nối, bạn cần chuẩn bị thông tin về:

  • URL của cơ sở dữ liệu: Bao gồm tên máy chủ (host), cổng (port), và tên cơ sở dữ liệu.
  • Tài khoản: Tên người dùng và mật khẩu để kết nối với MySQL.

Cấu trúc URL kết nối:

jdbc:mysql://hostname:port/dbname
  • hostname: Địa chỉ của máy chủ MySQL (ví dụ: localhost).
  • port: Cổng mặc định của MySQL là 3306.
  • dbname: Tên của cơ sở dữ liệu.

Ví dụ: Kết nối đến một cơ sở dữ liệu có tên testdb trên máy localhost với port 3306 sẽ có URL:

jdbc:mysql://localhost:3306/testdb

2.2. Tạo kết nối

Dưới đây là một ví dụ cơ bản để kết nối Java với MySQL:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MySQLConnection {

    public static void main(String[] args) {
        // Thông tin kết nối
        String url = "jdbc:mysql://localhost:3306/testdb";
        String user = "root";
        String password = "password";

        // Kết nối với MySQL
        try (Connection connection = DriverManager.getConnection(url, user, password)) {
            if (connection != null) {
                System.out.println("Kết nối thành công!");
            } else {
                System.out.println("Kết nối thất bại.");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Giải thích code:

  • DriverManager.getConnection(url, user, password): Tạo kết nối đến cơ sở dữ liệu MySQL.
  • try-with-resources: Đảm bảo rằng kết nối được tự động đóng sau khi hoàn tất công việc.

3. Thực hiện các truy vấn SQL

3.1. Thực hiện truy vấn SELECT

Sau khi kết nối thành công, bạn có thể thực hiện các truy vấn SQL bằng cách sử dụng các lớp StatementResultSet.

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

public class SelectExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/testdb";
        String user = "root";
        String password = "password";

        try (Connection connection = DriverManager.getConnection(url, user, password)) {
            String query = "SELECT * FROM users";

            // Tạo đối tượng Statement để thực hiện câu truy vấn
            Statement statement = connection.createStatement();

            // Thực hiện truy vấn và nhận kết quả vào ResultSet
            ResultSet resultSet = statement.executeQuery(query);

            // Lặp qua các hàng kết quả và hiển thị dữ liệu
            while (resultSet.next()) {
                System.out.println("User ID: " + resultSet.getInt("id"));
                System.out.println("Username: " + resultSet.getString("username"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Giải thích code:

  • Statement statement = connection.createStatement(): Tạo một đối tượng để thực thi câu truy vấn.
  • ResultSet resultSet = statement.executeQuery(query): Thực hiện câu truy vấn SELECT và nhận kết quả.
  • resultSet.next(): Lặp qua từng hàng của kết quả.
  • getInt()getString(): Lấy dữ liệu từ các cột của bảng.

3.2. Thực hiện truy vấn INSERT

Để thêm dữ liệu vào cơ sở dữ liệu, bạn có thể sử dụng phương thức executeUpdate() của Statement.

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

public class InsertExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/testdb";
        String user = "root";
        String password = "password";

        try (Connection connection = DriverManager.getConnection(url, user, password)) {
            String query = "INSERT INTO users (username, email) VALUES ('new_user', '[email protected]')";

            // Thực hiện câu lệnh INSERT
            Statement statement = connection.createStatement();
            int rowsInserted = statement.executeUpdate(query);

            if (rowsInserted > 0) {
                System.out.println("Thêm người dùng mới thành công!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Giải thích code:

  • executeUpdate(query): Dùng để thực hiện các truy vấn INSERT, UPDATE, hoặc DELETE. Nó trả về số lượng hàng bị ảnh hưởng bởi truy vấn.

4. Sử dụng PreparedStatement để tránh SQL Injection

PreparedStatement là một cách an toàn hơn để thực hiện các câu truy vấn SQL bằng cách tránh SQL Injection.

Ví dụ với PreparedStatement

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class PreparedStatementExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/testdb";
        String user = "root";
        String password = "password";

        try (Connection connection = DriverManager.getConnection(url, user, password)) {
            String query = "INSERT INTO users (username, email) VALUES (?, ?)";

            // Tạo đối tượng PreparedStatement
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setString(1, "safe_user");
            preparedStatement.setString(2, "[email protected]");

            // Thực hiện truy vấn
            int rowsInserted = preparedStatement.executeUpdate();

            if (rowsInserted > 0) {
                System.out.println("Người dùng được thêm thành công (sử dụng PreparedStatement)!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Giải thích code:

  • PreparedStatement cho phép sử dụng các tham số động (?) để tránh việc chèn mã độc vào câu truy vấn.
  • setString() được dùng để truyền giá trị cho tham số trong câu lệnh SQL.

5. Xử lý các lỗi thường gặp

5.1. SQLException: No suitable driver found

  • Lỗi này xảy ra khi bạn chưa thêm JDBC Driver vào classpath của dự án. Đảm bảo rằng bạn đã thêm MySQL Connector/J đúng cách.

5.2. SQLException: Access denied for user

  • Điều này có nghĩa là thông tin đăng nhập của bạn không đúng. Kiểm tra lại username, password và quyền truy cập của người dùng trên cơ sở dữ liệu.

Kết luận

Kết nối MySQL từ ứng dụng Java là một quy trình cơ bản nhưng quan trọng đối với việc phát triển các ứng dụng có khả năng tương tác với cơ sở dữ liệu. Từ việc cài đặt JDBC Driver, thiết lập kết nối đến việc thực hiện các truy vấn, bạn có thể quản lý dữ liệu MySQL một cách hiệu quả.