Chuyển đổi database (schema) trong MySQL sử dụng JDBC
Có 2 cách chính: thực thi câu lệnh USE database hoặc chỉ định database trong connection URL.
Cách 1: Thực thi USE statement qua JDBC
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class ChangeDatabaseExample {
public static void main(String[] args) throws SQLException {
// 1. Register driver
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
// 2. Kết nối không chỉ định database
String mysqlUrl = "jdbc:mysql://localhost/";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
// 3. Tạo Statement
Statement stmt = con.createStatement();
// 4. Thực thi USE database
String query = "USE mydatabase";
stmt.execute(query);
System.out.println("Database changed......");
}
}
Cách 2: Chỉ định database trong URL (Khuyên dùng)
// Chỉ định database ngay khi kết nối String url = "jdbc:mysql://localhost/mydatabase"; Connection con = DriverManager.getConnection(url, "root", "password");
So sánh 2 cách
| Tiêu chí | USE statement | URL parameter |
|---|---|---|
| Độ phức tạp | Cần Statement, execute() | Chuỗi kết nối đơn giản |
| Hiệu năng | 1 round-trip thêm | Tối ưu, 1 kết nối |
| Linh hoạt | Đổi DB runtime | Cố định khi connect |
| Connection Pool | Khó quản lý | Dễ dàng (mỗi pool 1 DB) |
Lưu ý quan trọng
- Driver class:
com.mysql.cj.jdbc.Driver(MySQL 8.0+), cũ:com.mysql.jdbc.Driver - URL format:
jdbc:mysql://host:port/database?properties - Properties hữu ích:
useSSL=false,serverTimezone=UTC,allowPublicKeyRetrieval=true - Luôn đóng Connection, Statement trong finally block hoặc try-with-resources
Best Practice
try (Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost/mydb?useSSL=false&serverTimezone=UTC",
"user", "pass")) {
// Sử dụng connection
} // Tự động đóng