Trước tiên, nhắc tới JDBC (Java Database Connectivity), ai trong số các bạn cũng liên tưởng về một API xưa cổ dùng để connect tới database và query dữ liệu.
Nói nó xưa cổ là vì JDBC là công cụ thô sơ nhất, mộc mạc nhất dùng để kết nối tới cơ sở dữ liệu. Cái chân chất mộc mạc này tuy chán, nhưng lại là kiến thức nền tảng quan trọng cần phải nắm thật vững. Hướng dẫn kết nối cơ sở dữ liệu với Java JDBC Hibernate là gì? Sao phải dùng nó thay JDBC?
Xem thêm các việc làm Java lương cao trên TopDev
Hiểu thật rõ về bản chất của JDBC có thể giúp ta vững vàng tìm hiểu thêm các frameworks mới và mạnh mẽ như Hibernate, JPA. Tất cả chúng, tựu chung đều sử dụng JDBC để thực hiện kết nối và lấy dữ liệu.
Hình : Vị trí của JDBC trong application
Bài viết này mình sẽ chú trọng tới bản chất và mô hình của JDBC. Mong rằng bài viết này sẽ giúp đỡ các bạn nhiều!.
Để hiểu JDBC, chúng ta cùng xem xét ví dụ thường gặp trong đời sống là lấy hàng từ kho. Một khách hàng muốn thực hiện lấy hàng từ một trong số các kho (Oracle, MySql, Sql Server, …), các bước tiến hành của anh ta như sau:
Sau khi đã có cái nhìn khách quan về JDBC, phần 3 sẽ tìm hiểu sâu từng công đoạn mà JDBC thực hiện.
Hình : Luồng thực hiện trong JDBC
Vì có rất nhiều kho hàng (database) tồn tồn tại độc lập khác nhau, nên DriverManager sẽ quản lý cách thức kết nối tới các kho hàng. Cụ thể, khi muốn sử dụng driver, ta cần đăng kí trước khi sử dụng.
Có 2 cách đăng kí driver thông qua DriverManager.
~~Hỏi vui: ~~
Có 3 loại statement là statement, preparedStatement, và CallableStatement
~~Hỏi vui: ~~
Có 3 loại execute là execute(), executeQuery(), executeUpdate()
Hình : Mô tả phương thức query dữ liệu của 3 loại Execute Statement
~~Hỏi vui: ~~
Câu trả lời là ResultSet thực hiện lấy dữ liệu từ SQL Query bằng con trỏ, phương thức chính của ResultSet là next() Khi khởi tạo một đối tượng ResultSet, con trỏ sẽ trỏ tới record đầu tiên, sau khi đã xử lý dữ liệu (bao gồm columnName, objectValue) thì sẽ thực hiện di chuyển tới record tiếp theo.
Thật ra không quá khó hiểu rằng tại sao lại sử dụng con trỏ đối với ResultSet, câu trả lời là con trỏ cực kì linh động (giống như số record vậy), chúng ta không biết trước có bao nhiêu record được lấy ra). Việc xử lý dữ liệu đối với từng record mà con trỏ trỏ vào cũng tương đối đơn giản, vì vậy con trỏ được sử dụng cho ResultSet để đọc từng dòng dữ liệu từ SQL Query
Hình : Mô phỏng cách thức di chuyển tới record tiếp theo bằng phương thức next()
~~Hỏi vui: ~~
Câu hỏi này đặt ra cho nhiều thanh niên làm biếng, và mình cũng thế!. Tại sao không vừa lấy dữ liệu vừa cần thì update tại chỗ luôn cho tiện, khỏi cần add vào Map hay List gì đó, rồi lại phải lấy ra mất thời gian, công sức lấy ra để update.
Vâng, tuyệt vời thay, JDBC có hỗ trợ cho ResultSet thực hiện update tại chỗ. Để thực hiện được, ngay từ lúc khởi tạo statement, ta set thêm thuộc tính ResultSet.CONCUR_UPDATEABLE, vậy là vừa có thể thực hiện di chuyển con trỏ, vừa thực hiện update, thật là tiện phải không nào?.
Hình : Thực hiện update giá trị PRICE sau khi con trỏ đã di chuyển về record đầu tiên.
~~Hỏi vui: ~~
Bài viết này mình viết về JDBC, tuy rằng là công nghệ cũ, nhưng mình nghĩ nó là bản chất, rất nhiều framework cũng phát triển lên từ nó, nên hiểu thật rõ bản chất và cách thức hoạt động sẽ hữu ích về lâu về dài.
Bài viết gốc được đăng tải tại kieblog.vn
You need to login in order to like this post: click here
YOU MIGHT ALSO LIKE