Cơ bản về JDBC

JDBC là viết tắt của Java Database Connectivity, nó là một API cho phép chúng ta xây dựng những ứng dụng có thể truy cập, thao tác với nhiều loại database khác nhau. Trong bài viết này, mình sẽ trình bày với các bạn những kiến thức cơ bản về JDBC các bạn nhé!

OK,

Đầu tiên, mình sẽ tạo mới một Maven project để làm ví dụ minh hoạ:

Cơ bản về JDBC

JDBC cung cấp cho chúng ta một cái nhìn tổng quát về kết nối database, thực thi câu lệnh SQL và xử lý kết quả trả về. Nó bao gồm nhiều interface và mỗi interface sẽ đảm nhận một vai trò khác nhau.

Có bốn interfaces chính của JDBC nằm trong package java.sql đó là: DriverConnection, Statement, ResultSet. Các loại database khác nhau như MySQL, Oracle, … sẽ dựa vào những interface này để hiện thực các đối tượng cho phù hợp với loại database đó. Tập hợp các đối tượng hiện thực này chúng ta gọi chúng là những JDBC Driver. Mỗi database sẽ cung cấp JDBC Driver khác nhau và được đóng gói thành những tập tin .jar.

Trong project trên, mình đã thêm MySQL Driver dependency:

vì mình sẽ dùng MySQL database để minh hoạ cho bài viết này.

Bây giờ mình sẽ tạo mới database để làm ví dụ nhé các bạn.

Mình sẽ có 2 bảng chứa thông tin của lớp học và những thông tin về những sinh viên của những lớp học đó. Cụ thể cấu trúc của 2 bảng sẽ như sau:

Mình sẽ thêm một số dữ liệu để mình có thể dùng JDBC truy vấn, thao tác trên những dữ liệu này.

Cơ bản về JDBC

OK, bây giờ chúng ta sẽ bắt đầu viết code nhé!

Điều đầu tiên chúng ta cần làm là thiết lập kết nối giữa ứng dụng của chúng ta với database.

Interface DriverManager sẽ giúp chúng ta làm điều này!

Các JDBC Driver khi ứng dụng chạy sẽ tự đăng ký chính nó với DriverManager và từ đối tượng DriverManager chúng ta có thể lấy được đối tượng Connection chứa kết nối đến database nên việc thiết lập kết nối giữa ứng dụng của chúng ta đến database sẽ dễ dàng.

Ví dụ ở đây mình dùng MySQL thì lớp hiện thực interface của MySQL Driver là com.mysql.cj.jdbc.Driver. Nếu bạn mở code của lớp này xem bạn sẽ thấy như sau

Cơ bản về JDBC

Như các bạn thấy, đối tượng Driver của MySQL Driver sẽ có một đoạn code nằm trong khối static để đăng ký chính nó với DriverManager. Việc của chúng ta là cần phải khai báo JDBC Driver nào mà chúng ta cần sử dụng mà thôi.

Mình xin nói thêm là với JDBC phiên bản 3.0 hoặc cũ hơn, chúng ta cần phải gọi Class.forName() và truyền vào phương thức forName() tên lớp hiện thực interface Driver của JDBC Driver đó để có thể sử dụng JDBC Driver.

Ví dụ cho MySQL driver thì chúng ta cần gọi:

Với JDBC từ phiên bản 4.0 trở đi như trong ví dụ của bài viết này, chúng ta không cần phải gọi Class.forName() nữa bởi vì JDBC đã hỗ trợ tự động đăng ký tất cả các JDBC Driver trong ứng dụng của các bạn bằng cách sử dụng cái mà tiếng Anh gọi là Service Provider Mechanism. Tất cả các JDBC Driver cho JDBC phiên bản từ 4.0 trở lên phải chứa một tập tin cấu hình với tên gọi là java.sql.Driver trong thư mục META-INF/services của tập tin .jar. Tập tin này sẽ chứa thông tin đầy đủ tên những lớp hiện thực interface Driver của JDBC Driver đó.

Bây giờ nếu bạn mở MySQL Driver trong project của chúng ta, các bạn sẽ thấy tập tin này.

Cơ bản về JDBC

và nội dung của tập tin này là

Cơ bản về JDBC

OK, mình sẽ sử dụng cơ chế tự động đăng ký các JDBC driver nên mình sẽ không cần gọi phương thức Class.forName() nhé các bạn.

Giờ mình sẽ dùng DriverManager để lấy đối tượng Connection.

DriverManager là đối tượng quản lý tất cả các JDBC Driver mà ứng dụng của chúng ta sẽ sử dụng, chúng ta lấy đối tượng Connection từ nó bằng cách gọi phương thức getConnection(). Ở đây chúng ta có tất cả 3 phương thức của getConnection()

Mình sẽ dùng phương thức thứ 3 để lấy Connection từ DriverManager.

Url ở đây có định dạng là:

trong đó subprotocol là một yếu tố chính để DriverManager có thể tìm thấy được JDBC driver phù hợp trong danh sách JDBC driver mà nó đang quản lý.

OK, giờ chúng ta đã có Connection rồi, bây giờ chúng ta sẽ bắt đầu viết code để truy vấn database.

Từ đối tượng Connection chúng ta sẽ tạo ra một đối tượng Statement giúp chúng ta có thể thực thi một câu lệnh SQL theo ý chúng ta muốn:

Đối tượng Statement có hai phương thức chính là executeUpdate() và executeQuery() để thao tác với database. Các bạn cần phân biệt khi nào sẽ dùng executeUpdate() và khi nào sử dụng executeQuery() nhé!

Phương thức executeUpdate() được sử dụng để thực thi một câu lệnh SQL để thêm một dòng trong bảng, chỉnh sửa hoặc xóa những bảng đang tồn tại. Nói tóm lại, phương thức này dùng để thực thi những câu lệnh SQL có tác động đến database của bạn như thêm mới, chỉnh sửa, xóa,…

Còn phương thực executeQuery() chỉ được sử dụng trong trường hợp bạn muốn đọc dữ liệu từ database. Nếu bạn sử dụng cho những mục đích khác có thể sẽ bị lỗi SQLException khi chạy đó nhé!

Trong bài viết này mình cần lấy danh sách lớp học đang có. Do đó mình sẽ chỉ sử dụng phương thức executeQuery() và đối tượng Statement thực thi câu lệnh SQL sau:

Kết quả thực thi câu lệnh này sẽ trả về đối tượng ResultSet, chúng ta sẽ sử dụng đối tượng này để đọc kết quả câu lệnh SQL của chúng ta

Kết quả:

Cơ bản về JDBC

Như các bạn thấy, từ đối tượng ResultSet chúng ta có thể đọc được dữ liệu trả về thông qua các phương thức getInt(), getString(),…

Tóm lại, bài viết này mình diễn đạt những cái cơ bản cần phải biết khi làm việc với JDBC cho tất cả các bạn. Hi vọng các bạn có thể bổ sung được nhiều kiến thức cho mình.


Chia sẽ bài viết này ...Share on Facebook
Facebook
0Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin

7 thoughts on “Cơ bản về JDBC

  1. Avatar

    Em chào anh
    Em mới học java và em rất mông lung về phần JDBC anh có thể chỉ cho em một số tài liệu để hiểu sâu về phần này được không ạ
    Em cảm ơn anh

  2. Avatar

    kiểu Connection của java.sql thì nó có khác gì với kiểu Connection của com.mysql.jdbc khônh anh? Tại sao lại có 2 cái kiểu Connection cùng một tên vậy ?

    1. Khanh Nguyễn

      Nếu em coi code của com.mysql.jdbc.Connection thì em sẽ thấy thật ra class này nó cũng extends từ java.sql.Connection. Nó chỉ khác ở chỗ là họ cải tiến vài chỗ để phù hợp với MySQL database hơn thôi.

Add Comment