Để 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:
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:
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.
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>
.jar
vào classpath của dự án Java.Để kết nối, bạn cần chuẩn bị thông tin về:
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
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(); } } }
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.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 Statement
và ResultSet
.
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(); } } }
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()
và getString()
: Lấy dữ liệu từ các cột của bảng.Để 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(); } } }
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.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.
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(); } } }
?
) để 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.SQLException: No suitable driver found
SQLException: Access denied for user
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ả.