JDBC là một API dùng để kết nối và thực thi các câu lệnh SQL xuống database. Trong bài viết này sẽ hướng dẫn các bạn sử dụng JDBC trong ứng dụng để tạo database và table cho nó.
Điều kiện tiên quyết
Hầu hết các ứng dụng Java hiện đây đều sử dụng Maven hoặc Gradle cho phép chúng ta dễ dàng quản lý các dependency, build source code etc. Vì vậy trong bài viết này mình sẽ sử dụng project maven để hướng dẫn.
Sau khi tạo project maven thành công, chúng ta cần thêm JDBC dependency tương ứng với cơ sở dữ liệu bạn muốn, ở đây mình sử dụng mysql.
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.44</version> </dependency>
Tạo database sử dụng JDBC
Các bước cần thực hiện để tạo database
Bước 1: Chuẩn bị các thông tin kết nối: url, user, password. Lưu ý rằng user/password là do bạn đặt trong lúc cài đặt mysql, hãy sửa lại cho đúng với dữ liệu của bạn nha.
Note:
- localhost: Trỏ đến máy đang chạy ứng dụng.
- 3306: Port chạy mysql.
Nếu muốn kết nối đến database của một máy khác thì bạn có thể chuyển đổi locahost -> IP máy muốn kết nối và 3306 -> Port chạy mysql của máy muốn kết nối
Bạn phải chỉ đinh serverTimezone cho JDBC driver nếu không sẽ gặp lỗi sau
java.sql.SQLException: The server time zone value 'unknown' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver
Có 2 cách để cấu hình serverTimezone, đầu tiên là bạn có thể chỉ định sẵn trong chuỗi kết nối database.
static final String DB_URL = "jdbc:mysql://localhost:3306/?serverTimezone=UTC&useSSL=false"; static final String USER = "root"; static final String PASS = "admin";
Hoặc có thể tìm đến file cấu hình của mysql my.ini hoặc my.cnf để thêm time-zone mặc định vào cuối file.
# Indicates the InnoDB Cluster Port. # innodbclusterport=3306 # Load mysql plugins at start."plugin_x ; plugin_y". # plugin_load # MySQL server's plugin configuration. # loose_mysqlx_port=33060 # Set default time zone default-time-zone = '+08:00'
Bước 2: Tiếp theo chúng ta cần gọi Class.forName để đăng ký driver cho JDBC. Tuy nhiên kể từ JDBC4.0, tất cả các driver sẽ được tìm kiếm tự động nên chúng ta không cần dùng đến Class.forName nữa.
Class.forName("com.mysql.jdbc.Driver");
Bước 3: Mở kết nối đến database
try (Connection connection = DriverManager.getConnection(DB_URL, USER, PASS)){ ... }
Vì Connection là implement AutoCloseable nên chúng ta dùng try-with-resource để kết nối tự đóng sau khi thực thi xong.
Bước 4: Chuẩn bị câu lệnh tạo cơ sở dữ liệu và thực thi chương trình.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class Main { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost:3306/?serverTimezone=UTC&useSSL=false"; // Database credentials static final String USER = "root"; static final String PASS = "123456"; public static void main(String[] agrs) throws ClassNotFoundException { Class.forName(JDBC_DRIVER); try (Connection connection = DriverManager.getConnection(DB_URL, USER, PASS)) { System.out.println("Connecting to database..."); System.out.println("Creating database..."); Statement stmt; stmt = connection.createStatement(); String sql = "CREATE DATABASE IF NOT EXISTS STUDENTS"; stmt.executeUpdate(sql); System.out.println("Database created successfully..."); } catch (SQLException e) { e.printStackTrace(); } } }
Output:
Connecting to database…
Creating database…
Database created successfully…
Tóm lược
Trên đây chúng ta đã biết cách thao tác với JDBC để tạo một database mới. Lưu ý các phiên bản của JDBC khác nhau sẽ có một số cấu hình khác, nếu các bạn sử dụng những version thì hãy cố gắng fix những lỗi vặt xảy ra nhé, nhưng về cơ bản thì đoạn code trên vẫn chú trọng về ý tưởng là chính.
Nguồn tham khảo
https://www.baeldung.com/java-jdbc
https://www.tutorialspoint.com/jdbc/jdbc-create-tables.htm
https://mkyong.com/jdbc/java-sql-sqlexception-the-server-time-zone-value-xx-time-is-unrecognized/