0

JDBC bài 4 Hello JDBC: Thiết lập Connection và viết chương trình kết nối CSDL đầu tiên

Mọi thao tác với cơ sở dữ liệu trong Java đều bắt đầu bằng việc thiết lập một cầu nối vật lý, được đại diện bởi đối tượng Connection. Quá trình này đòi hỏi ba thông tin cốt lõi: URL kết nối, tên đăng nhập (username) và mật khẩu (password).

1. Cấu trúc của chuỗi kết nối (Connection URL)

Chuỗi kết nối là "địa chỉ nhà" của cơ sở dữ liệu để DriverManager biết cần phải đi đâu để thiết lập cầu nối. Định dạng cơ bản cho MySQL: jdbc:mysql://[host]:[port]/[database_name]

Ví dụ: jdbc:mysql://localhost:3306/shop_db

2. Các bước khởi tạo kết nối

Trước phiên bản JDBC 4.0 (Java 6), lập trình viên phải đăng ký Driver thủ công bằng lệnh Class.forName("com.mysql.cj.jdbc.Driver");. Hiện nay, DriverManager sẽ tự động tìm và nạp Driver phù hợp có sẵn trong Classpath (đã cấu hình qua Maven/Gradle ở bài 2).

Quá trình kết nối hiện đại chỉ bao gồm việc chuẩn bị thông tin, gọi phương thức DriverManager.getConnection() và bắt ngoại lệ SQLException.

3. Chương trình "Hello JDBC" hoàn chỉnh

Dưới đây là một chương trình Java cơ bản để kết nối tới một database MySQL có tên shop_db.

Java

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

public class HelloJDBC {
    // Cấu hình thông tin kết nối
    private static final String URL = "jdbc:mysql://localhost:3306/shop_db";
    private static final String USER = "root";
    private static final String PASSWORD = "password123"; // Thay bằng mật khẩu thực tế của bạn

    public static void main(String[] args) {
        System.out.println("Đang khởi tạo kết nối tới cơ sở dữ liệu...");
        
        Connection connection = null;
        
        try {
            // Thiết lập kết nối thông qua DriverManager
            connection = DriverManager.getConnection(URL, USER, PASSWORD);
            
            if (connection != null) {
                System.out.println("Kết nối thành công! Hello JDBC!");
                // Lấy thông tin cơ bản của Database
                String dbName = connection.getMetaData().getDatabaseProductName();
                String dbVersion = connection.getMetaData().getDatabaseProductVersion();
                System.out.println("Đang kết nối tới: " + dbName + " - Phiên bản: " + dbVersion);
            }
            
        } catch (SQLException e) {
            System.err.println("Kết nối thất bại do lỗi SQL!");
            e.printStackTrace();
        } finally {
            // Đóng kết nối để giải phóng tài nguyên hệ thống
            try {
                if (connection != null && !connection.isClosed()) {
                    connection.close();
                    System.out.println("Đã đóng kết nối an toàn.");
                }
            } catch (SQLException e) {
                System.err.println("Lỗi khi đóng kết nối!");
                e.printStackTrace();
            }
        }
    }
}

4. Các lỗi phổ biến khi thiết lập kết nối

Khi chạy chương trình trên, nếu thất bại, bạn sẽ nhận được một đối tượng SQLException kèm theo thông báo lỗi. Dưới đây là các nguyên nhân phổ biến nhất:

  • Access denied for user: Sai tên đăng nhập hoặc mật khẩu. Cần kiểm tra lại hằng số USER và PASSWORD.

  • Unknown database 'shop_db': Kết nối được tới server MySQL nhưng không tìm thấy database nào tên là shop_db. Cần tạo database này trước trong hệ quản trị MySQL.

  • Communications link failure: Java không thể tìm thấy server MySQL. Nguyên nhân do phần mềm MySQL chưa được bật, sai cổng (port mặc định 3306 nhưng cấu hình máy bạn chạy cổng khác), hoặc bị tường lửa chặn.

  • No suitable driver found: Thiếu file .jar của Driver. Nguyên nhân do quên cấu hình thư viện Maven/Gradle (như đã làm ở Bài 2) hoặc IDE chưa tải kịp thư viện.

Cú pháp đóng kết nối trong khối finally ở ví dụ trên khá rườm rà và dễ xảy ra lỗi quên đóng tài nguyên. Ở bài tiếp theo, cấu trúc này sẽ được tối ưu hóa hoàn toàn bằng cơ chế quản lý tự động của Java.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí