You are on page 1of 33

TRƯỜNG ĐIỆN - ĐIỆN TỬ

School of Electrical and Electronics

LẬP TRÌNH NÂNG CAO


JDBC

5/17/2023 Lập trình nâng cao 1


Nội dung

1 Tổng quan CSDL quan hệ

2 Tổng quan JDBC

3 Các bước làm việc với CSDL

Lập trình nâng cao 2


01 Tổng quan CSDL
quan hệ

5/17/2023 Lập trình nâng cao 3


Cơ sở dữ liệu quan hệ

❖ Cơ sở dữ liệu (CSDL): là một phương tiện lưu trữ thông tin theo
cách mà thông tin có thể được truy xuất.
❖ Cơ sở dữ liệu quan hệ: Là tập hợp các quan hệ và các ràng buộc
giữa chúng, mà có liên quan đến một hệ thống thông tin
❖ Quan hệ (relation) là một bảng hai chiều:
▪ Các cột gọi là các thuộc tính (attribute)
▪ Các hàng gọi là các bản ghi (record) hay bộ (tuple)
❖ Khóa chính của quan hệ: là một hoặc một tập tối thiểu các thuộc
tính cho phép xác định duy nhất một bản ghi trong quan hệ
❖ Khóa ngoại: Một thuộc tính của quan hệ R1 được gọi là một khoá
ngoại nếu nó không phải là khoá chính của quan hệ R1 nhưng
các giá trị của nó là các giá trị của khoá chính trong một quan hệ
R2 nào đó
❖ Hệ quản trị cơ sở dữ liệu (DBMS -Database Management
System): là một hệ thống phần mềm cho phép tạo lập CSDL và
điều khiển mọi truy nhập đối với CSDL đó

Lập trình nâng cao 4


Các quy tắc toàn vẹn

❖Quy tắc toàn vẹn thực thể


▪ Không một thuộc tính nào của khóa chính được phép là
null
❖Quy tắc toàn vẹn quy chiếu
▪ Nếu một bảng dữ liệu bao gồm một khoá ngoại lai (FK)
khớp với một khoá chính (PK) trên một bảng dữ liệu T
nào đó, thì mỗi giá trị của FK phải hoặc:
• bằng trị của khoá chính trên một hàng nào đó của bảng dữ
liệu T, hoặc
• hoàn toàn null (Điều này không nên có vì không kết nối vào
đâu)
❖Cần tuân thủ các quy tắc toàn vẹn dữ liệu trong các
thao tác với cơ sở dữ liệu (thêm, xóa, sửa)

5/17/2023 Lập trình nâng cao 5


Sơ đồ thực thể liên kết (ERD)

Student * Mark *
studentID studentID
first_name subjectID
last_name semesterCode
gender mark
DoB
classID

Subject *
subjectID
subjectName
Class *
classID credits

className
classSize
Note

5/17/2023 Lập trình nâng cao 6


Các lệnh SQL cơ bản

❖Các lệnh SQL được chia thành nhiều loại, hai loại
chính là:
▪ DML (Data Manipulation Language)
▪ DDL (Data Definition Language)
❖Các lệnh DML phổ biến:
▪ SELECT
▪ INSERT
▪ DELETE
▪ UPDATE
❖Các lệnh DDL phổ biến:
▪ CREATE TABLE
▪ DROP TABLE
▪ ALTER TABLE

5/17/2023 Lập trình nâng cao 7


Các lệnh DML đơn giản

❖ INSERT

❖UPDATE

❖DELETE

5/17/2023 Lập trình nâng cao 8


Các lệnh DML đơn giản

❖ SELECT

5/17/2023 Lập trình nâng cao 9


02 Tổng quan
JDBC

5/17/2023 Lập trình nâng cao 10


JDBC

❖JDBC: Java Database Connectivity


▪ Là Java API (Application Programming Interface)
▪ Cung cấp một thư viện tiêu chuẩn (các lớp và giao diện) cho
các chương trình Java để kết nối với cơ sở dữ liệu (CSDL) và
thực thi các lệnh SQL
▪ Tổng quát hóa các hàm truy xuất CSDL thành một tập hợp các
lớp và phương thức
▪ Hỗ trợ kết nối với nhiều loại cơ sở dữ liệu: MySQL, Oracle, MS
Access…
❖Hai gói chính java.sql và javax.sql
▪ java.sql chứa tất cả các lớp lõi cần thiết để truy cập cơ sở dữ
liệu
▪ javax.sql chứa các tính năng tùy chọn trong API JDBC 2.0

5/17/2023 Lập trình nâng cao 11


JDBC

Mối quan hệ giữa chương trình Java với JDBC API,


JDBC Drivers và các CSDL quan hệ
5/17/2023 Lập trình nâng cao 12
JDBC

Các lớp và giao diện JDBC cho phép các chương trình
Java kết nối với cơ sở dữ liệu, gửi câu lệnh SQL và xử
lý kết quả
5/17/2023 Lập trình nâng cao 13
03 Các bước làm việc
với CSDL

5/17/2023 Lập trình nâng cao 14


Các bước làm việc với CSDL

https://www3.ntu.edu.sg/home/ehchua/programming/java/JDBC_Basic.html

5/17/2023 Lập trình nâng cao 15


Bước 1: Loading Drivers
(Đăng ký/nạp JDBC driver)

❖ Cần được thực hiện trước khi giao tiếp với CSDL
❖ Các giải pháp đăng ký JDBC driver:
▪ Sử dụng Class.forName (String drivername)
▪ Sử dụng thuộc tính hệ thống System.setProperty
❖ Ví dụ
Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName("com.mysql.jdbc.Driver");
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver”);
hoặc:
System.setProperty(“com.mysql.jdbc.Driver”);

Lưu ý: Để sử dụng các driver, phải thêm các tệp jar của
chúng trong classpath

5/17/2023 Lập trình nâng cao 16


Bước 2: Thiết lập kết nối

❖ URLs:
▪ <protocol>: <subprotocol>: <subname>
• Protocol: Giao thức được sử dụng để truy CSDL
• Subprotocol: Xác định driver cho CSDL
• Subname: Tên của tài nguyên

RDBMS Database URL format


MySQL jdbc:mysql://hostname:portNumber/databaseName
ORACLE jdbc:oracle:thin:@hostname:portNumber:databaseName
DB2 jdbc:db2:hostname:portNumber/databaseName
Java jdbc:derby:dataBaseName (embedded)
DB/Apache jdbc:derby://hostname:portNumber/databaseName
Derby (network)
Microsoft SQL jdbc:sqlserver://hostname:portNumber;databaseName=
Server dataBaseName
Sybase jdbc:sybase:Tds:hostname:portNumber/databaseName

5/17/2023 Lập trình nâng cao 17


Bước 2: Thiết lập kết nối
❖ Dùng phương thức getConnection() của lớp
DriverManager để
thiết lập kết nối:
▪ getConnection(String URL)
▪ getConnection(String URL,Properties info)
▪ getConnection (String URL,Properties info,String
password)
❖ Ví dụ: Thiết lập kết nối với CSDL Sql Server
▪ Connection conn = DriverManager.getConnection
("jdbc:sqlserver://localhost:1433;
databaseName=qlsv; User=sa; Password=sa");
❖ Ví dụ: Thiết lập kết nối với CSDL MySql
▪ Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/sakila", "root",
“123");
❖ Đóng kết nối: dùng phương thức close() : conn.close()
5/17/2023 Lập trình nâng cao 18
Bước 3: Tạo Statement
(đối tượng thực hiện câu lệnh)

❖Dùng phương thức createStatement() của giao diện


Connnection
❖Ví dụ:
Connection conn=DriverManager.getConnection(…);
Statement stmt=conn.createStatement();
❖Một đối tượng Statement có thể được sử dụng nhiều lần để
gửi truy vấn
❖Cần được giải phóng khi sau khi sử dụng
▪ stmt.close ()
• Gải phóng tài nguyên JDBC ngay lập tức thay vì đợi trình thu
gom rác của JVM giải phóng
• close() nên được thực hiện trong mệnh đề finnaly

5/17/2023 Lập trình nâng cao 19


Bước 4: Thực thi câu lệnh

❖Hai phương thức chính để thực hiện các câu lệnh


▪ executeQuery
• Được sử dụng để truy xuất dữ liệu từ CSDL
• Chủ yếu sử dụng lệnh Select
▪ executeUpdate
• Được sử dụng để tạo, cập nhật và xóa dữ liệu
• SQL phải chứa các lệnh Update, Insert hoặc Delete
❖Sử dụng setQueryTimeout để chỉ định độ trễ tối đa để chờ
kết quả

5/17/2023 Lập trình nâng cao 20


Bước 4: Thực thi câu lệnh

❖Cú pháp phương thức executeUpdate:


▪ int executeUpdate (String sqlString) throws
SQLException
• Trả về một số nguyên là số hàng được cập nhật
• sqlString phải là một chuỗi hợp lệ, nếu không hợp lệ phương thức
sẽ ném ra ngoại lệ
❖Ví dụ1: Tạo một bảng mới
Statement statement = conn.createStatement();

String sqlString = “Create Table Teacher”


+ “(ID Varchar(256) Primary Key Not Null,”
+ “Name Varchar(256) Not Null, CCCD Varchar(256) Not
Null,”
+ “Gender Varchar(20) Null), PhoneNumber Varchar(10)
Not Null)”;

statement.executeUpdate(sqlString);
5/17/2023 Lập trình nâng cao 21
Bước 4: Thực thi câu lệnh

❖ Ví dụ 2: Thêm dữ liệu vào bảng


Statement statement = conn.createStatement();

String sqlString = “Insert into Teacher”


+ “(ID, Name, CCCD, Gender, PhoneNumber)”
+ “Values(‘1234’,‘Nguyen Van Nam’,‘12345678’,”
+ “Nam’, ‘0989999999’)”;

statement.executeUpdate(sqlString);

5/17/2023 Lập trình nâng cao 22


Bước 4: Thực thi câu lệnh

❖Cú pháp phương thức executeQuery


▪ ResultSet executeQuery(String sqlString) throws
SQLException
• Trả về một đối tượng ResultSet chứa các kết quả của Truy vấn
❖Ví dụ 1: Truy vấn một bảng
Statement statement = conn.createStatement();

String sqlString = “Select Teacher.ID,


Teacher.Name, Teacher.CCCD,” +
“Teacher.Gender, Teacher.PhoneNumber From
Teacher”;

ResultSet rs = statement.executeQuery(sqlString);

5/17/2023 Lập trình nâng cao 23


Bước 5: xử lý ResultSet

❖ResultSet chứa các kết quả truy vấn CSDL được trả về
❖Cho phép chương trình duyệt qua từng hàng và đọc tất cả
các cột dữ liệu
❖ResultSet cung cấp các phương thức truy cập khác nhau
lấy chỉ mục (index) cột hoặc tên cột và trả về dữ liệu
❖Khi phương thức executeQuery trả về ResultSet, Cursor
(con trỏ) được đặt trước hàng đầu tiên của dữ liệu.
▪ Cursor trỏ đến tập hợp các hàng được trả về bởi lệnh truy vấn
▪ Sử dụng phương thức next() để di chuyển con trỏ
• Trả về true: Nếu hàng tiếp theo có dữ liệu
• Trả về false: Nếu hàng tiếp theo không có dữ liệu, và khi đó con
trỏ di chuyển ra ngoài phần cuối của ResultSet
❖Cột đầu tiên có chỉ mục là 1

5/17/2023 Lập trình nâng cao 24


Bước 5: xử lý ResultSet

❖Các phương thức đọc dữ liệu


getShort(), getInt(), getLong(), getFloat(),
getDouble(), getClob(), getBlob(),
getDate(), getTime(), getArray(), getString()

ResultSet rs = stmt.executeQuery("select * from


table");
while(rs.next()){
System.out.println(rs.getInt(1)+"
"+rs.getString(2));
}

executeUpdate(): dùng cho câu lệnh SQL liên quan UPDATE,


INSERT, DELETE không trả về ResultSet
5/17/2023 Lập trình nâng cao 25
Bước 5: xử lý ResultSet
❖Ví dụ:
▪ Sử dụng chỉ mục cột:
• public String getString(int columnIndex) throws SQLException
• Ví dụ:
ResultSet rs = statement.executeQuery(sqlString)
String data = rs.getString(1)
❖Sử dụng tên của cột
▪ public String getString(String columnName) throws
SQLException
▪ Ví dụ:
ResultSet rs = statement.executeQuery(sqlString);
String data = rs.getString(Name)
❖ResultSet chứa nhiều hàng
while(rs.next()) {
System.out.println(rs.getString);
5/17/2023 } Lập trình nâng cao 26
Ví dụ về các bước thao tác với CSDL

5/17/2023 Lập trình nâng cao 27


Ví dụ về các bước thao tác với CSDL

Kết quả

5/17/2023 Lập trình nâng cao 28


PreparedStatement

❖PreparedStatement cho phép tạo các câu lệnh SQL có


truyền tham số
❖ PreparedStatement được mở rộng từ lớp Statement
❖Ví dụ: tạo PreparedStatement cho câu lệnh Insert
PreparedStatement preparedStmt =
conn.prepareStatement("insert into Subject
(subjectID, subjectName, credits) " +
"values (?, ?, ?)");

▪ Ba dấu ? là chỗ dành sẵn cho các tham số đại diện cho các
giá trị của subjectID, subjectName, credits được chèn vào
bảng Student

5/17/2023 Lập trình nâng cao 29


PreparedStatement

❖PreparedStatement cung cấp các phương thức để thiết lập


các tham số trong đối tượng của PreparedStatement.
❖ Các phương thức này được sử dụng để đặt giá trị cho các
tham số trước khi thực hiện các câu lệnh hoặc thủ tục.
❖ Các phương thức này thường có tên và chữ ký sau:
setX(int parameterIndex, X value);
với X là kiểu dữ liệu của tham số
❖Ví dụ:
preparedStatement.setString(1, “1234");
preparedStatement.setString(2, “Nguyen Van A");
preparedStatement.setString(3, “Nam");
❖ Sau khi đặt giá trị cho các tham số:
▪ Thực hiện executeQuery() với câu lệnh SELECT
▪ Thực hiện executeUpdate() với câu lệnh INSERT, DELETE,
UPDATE
5/17/2023 Lập trình nâng cao 30
Ví dụ về PreparedStatement

5/17/2023 Lập trình nâng cao 31


Ví dụ về PreparedStatement

5/17/2023 Lập trình nâng cao 32


Tài liệu tham khảo

❖Introduction to Java Programming and Data Structures, Y


Daniel Liang.
❖Java How to Program, 10th, Early Objects, Paul Deitel &
Harvey Deitel.
❖Java for Everyone, Cay Horstmann.
❖Core Java - Volume I—Fundamentals, Tenth Edition, Cay S.
Horstmann.
❖Core Java - Volume II—Advanced Features, Tenth Edition,
Cay S. Horstmann.
❖https://docs.oracle.com/javase/tutorial/jdbc/overview/data
base.html

Lập trình nâng cao 33

You might also like