Cơ bản về JDBC – Hướng Dẫn Java

JDBC là viết tắt của Java Database Connectivity, nó là một API được cho phép tất cả chúng ta kiến thiết xây dựng những ứng dụng hoàn toàn có thể truy vấn, 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 diễn với những bạn những kỹ năng và kiến thức cơ bản về JDBC những 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 phân phối cho tất cả chúng ta một cái nhìn tổng quát về liên kết database, thực thi câu lệnh SQL và giải quyết và xử lý hiệu quả trả về. Nó gồm có nhiều interface và mỗi interface sẽ đảm nhiệm 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 :

12345

mysql

mysql-connector-java

6.0.6

vì mình sẽ dùng MySQL database để minh họa cho bài viết này .Bây giờ mình sẽ tạo mới database để làm ví dụ nhé những 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 :

12345

CREATETABLE`clazz`(

`id`int(11)NOT NULLAUTO_INCREMENT,

`name`varchar(45)NOT NULL,

PRIMARY KEY(`id`)

)ENGINE=InnoDBDEFAULTCHARSET=utf8;

1234567891011

CREATETABLE`students`(

`id`int(11)NOTNULLAUTO_INCREMENT,

`name`varchar(45)NOTNULL,

`code`varchar(10)NOTNULL,

`date_of_birth`datetimeDEFAULTNULL,

`email`varchar(100)DEFAULTNULL,

`clazz_id`int(11)NOTNULL,

PRIMARYKEY(`id`),

KEY`student_clazz_idx`(`clazz_id`),

CONSTRAINT`student_clazz`FOREIGNKEY(`clazz_id`)REFERENCES`clazz`(`id`)ONDELETENOACTIONONUPDATENOACTION

)ENGINE=InnoDBDEFAULTCHARSET=utf8;

Mình sẽ thêm một số ít tài liệu để mình hoàn toàn có thể dùng JDBC truy vấn, thao tác trên những tài liệu này .OK, giờ đây tất cả chúng ta sẽ mở màn 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 tất cả chúng ta làm điều này !Các JDBC Driver khi ứng dụng chạy sẽ tự ĐK chính nó với DriverManager và từ đối tượng người tiêu dùng DriverManager tất cả chúng ta hoàn toàn có thể lấy được đối tượng người dùng Connection chứa liên kết đến database nên việc thiết lập liên kết giữa ứng dụng của tất cả chúng ta đến database sẽ thuận tiện .

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

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ì tất cả chúng ta cần gọi :

1

Class.forName(” com.mysql.cj.jdbc. Driver “);

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 tất cả chúng ta, những bạn sẽ thấy tập tin này .và nội dung của tập tin này là

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()

123

publicstaticConnectiongetConnection(Stringurl)throwsSQLException

publicstaticConnectiongetConnection(Stringurl,Propertiesinfo)throwsSQLException

publicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpwd)throwsSQLException

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

123456789101112

packagecom.huongdanjava.javajdbcbasic

;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.SQLException;

publicclassApplication{

publicstaticvoidmain(String[]args)throwsSQLException{

Connectionconnection=DriverManager.getConnection(” jdbc : mysql : / / localhost : 3306 / example “,” root “,” 123456 “);

}

}

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

1

jdbc:subprotocol:

//:/

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:

1234567891011

packagecom.huongdanjava.javajdbcbasic;

importjava.sql.*;

publicclassApplication{

publicstaticvoidmain(String[]args)throwsSQLException{

Connectionconnection=DriverManager.getConnection(” jdbc : mysql : / / localhost : 3306 / example “,” root “,” 123456 “);

Statementstatement=connection.createStatement();

}

}

Đố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:

1

SELECT*FROMclazz

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

123456789101112131415161718

packagecom.huongdanjava.javajdbcbasic;

importjava.sql.*;

publicclassApplication{

publicstaticvoidmain(String[]args)throwsSQLException{

Connectionconnection=DriverManager.getConnection(” jdbc : mysql : / / localhost : 3306 / example “,” root “,” 123456 “);

Statementstatement=connection.createStatement();

ResultSetrs=statement.executeQuery(” SELECT * FROM clazz “);

while(rs.next()){

System.out.print(rs.getInt(” id “)+” – “);

System.out.print(rs.getString(” name “)+” \ n “);

}

}

}

Kết quả :

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 thao tác với JDBC cho tổng thể những bạn. Hi vọng những bạn hoàn toàn có thể bổ trợ được nhiều kiến thức và kỹ năng cho mình .

3.5 / 5 – ( 2 bầu chọn )