Download as pdf or txt
Download as pdf or txt
You are on page 1of 56

Phần trình bày của:

TRẦN QÚY NAM


Chức danh: Giảng viên Khoa CNTT
Thời gian: 4 tiết

Đại Nam, tháng 04 năm 2023


NỘI DUNG

 Khái niệm về JDBC


 Phân loại cầu nối JDBC
 Các bước lập trình tương tác cơ
sở dữ liệu
Khái niệm về
JDBC
Giới thiệu JDBC

JDBC?
 Java DataBase Connectivity
 Là một API chứa tập hợp các lớp và giao
diện hỗ trợ lập trình viên Java kết nối và truy
cập đến các hệ cơ sở dữ liệu.
 Là một chuẩn truy xuất cơ sở dữ liệu rất
phổ biến. Các RDBMS hay các nhà sản xuất
phần mềm bên thứ ba phát triển các driver
cho Java đều cần tuân thủ chặt chẽ đặc tả
JDBC.
JDBC
JDBC API là một thành phần trong J2SE, nằm trong 2
gói thư viện:
• java.sql: chứa các lớp và giao diện cơ sở của
JDBC API.
• javax.sql: chứa các lớp và giao diện mở rộng.
JDBC tồn tại là để giúp các nhà phát triển Java tạo
nên các ứng dụng truy xuất cơ sở dữ liệu mà không
cần phải tìm hiểu và sử dụng các API độc quyền do
các công ty sản xuất phần mềm khác nhau bên thứ ba
cung cấp.
Giới thiệu về JDBC

 JDBC (Java DataBase Connectivity) API là Java API

để truy xuất các nguồn dữ liệu dạng bảng, đặc biệt là


dữ liệu lưu trong các CSDL quan hệ như MS Access,
SQL Server, Oracle,… (JDBC API độc lập database)
 JDBC API cung cấp API truy xuất CSDL dựa trên
SQL.
 java.sql.*, javax.sql.
Giới thiệu về JDBC

 JDBC giúp viết các Java Application quản lý các

hoạt động lập trình.

 Kết nối nguồn dữ liệu, CSDL.


 gửi các câu lệnh truy vấn đến CSDL.
 Truy vấn và xử lý kết quả trả về từ CSDL.
Ví dụ minh họa
Mysql jdbc driver

• Sử dụng để kết nối đến cơ sở dữ liệu MySQL


từ Java
• MySQL JDBC driver được gọi là MySQL
Connector/J
• Link tải thư viện:
https://dev.mysql.com/downloads/connector/j/
Thêm thư viện Mysql
jdbc vào project
• Link tải thư viện: https://dev.mysql.com/downloads/connector/j/
• Giải nén tệp vừa tải sẽ được một tệp .jar là thư viện Java để kết
nối đến cơ sở dữ liệu MySQL (ví dụ: mysql-connector-java-
8.0.30.jar)
• Nhấn chuột phải vào Libraries chọn Add Jar Folder… chọn tệp .jar ở
trên để đưa vào thư viện của project
Kết nối CSDL
mysql với java jdbc
 Để kết nối đến cơ sở dữ liệu MySQL cần có các thông tin sau:
• Driver class: lớp driver để kết nối đến cơ sở dữ liệu MySQL là
com.mysql.jdbc.Driver
• Connection URL: giá trị có dạng jdbc:mysql://<địa chỉ server
mysql>:<port kết nối>/<tên cơ sở dữ liệu> . Ví dụ
jdbc:mysql://localhost:3306/csdljava để kết nối đến cơ sở dữ liệu tên là
csdljava
• Username: tên đăng nhập cơ sở dữ liệu mặc định là root
• Password: mật khẩu đăng nhập vào cơ sở dữ liệu mặc định là trống
 Tạo kết nối sử dụng lớp Connection:
 Connection conn = DriverManager.getConnection(DB_URL,
USER, PASS)
Thực hiện kết nối CSDL

Ðể thiết lập kết nối đến CSDL ta gọi phương thức tĩnh
getConnection() của lớp DriverManager, khi đó trả về
một thể hiện của lớp Connection.
public static Connection getConnection(String url) throws
SQLException
public static Connection getConnection(String url,
String user, String pass) throws SQLException
public static Connection getConnection(String url,
Properties info) throws SQLException
Ví dụ kết nối MySQL
Phân loại cầu
nối JDBC
Kiến trúc JDBC

 Mô hình xử lý 2-tier và 3-tier: JDBC API hỗ trợ truy xuất


database cho cả các mô hình xử lý 2-tier và 3-tier.
Type 1: JDBC-ODBC Bridge

Dùng truy cập ODBC driver trên máy client.


Java
Applications Cần cấu hình trên máy client 1 Data Source
Name (DNS) thể hiện database đích.
JDBC Driver Type 1
 Thuận lợi:

JDBC-ODBC Library  Dễ dùng,


Hầu hết các DBMS hỗ trợ ODBC, nên
ODBC Type1 rất hữu ích khi JAVA mới ra.
Driver
Hạn chế: chậm, do phải chuyển từ lời gọi
JDBC sang lời gọi ODBC.
DBMS
Type 2: Java to Native API

Type-2 dùng thư viện client-side của


Java Database.
Applications
Driver Type-2 có nhiệm vụ chuyển lời gọi
JDBC Driver Type 2 JDBC thành các lời gọi Database API.
Driver Type-2 không viết hoàn toàn bằng
Database
Library
Java. Thường được cung cấp bởi Database
vendors.
Ưu điểm: tốt hơn JDBC-ODBC
DBMS
Hạn chế: Driver Type-2 và thư viện
Client-side của database cần cài đặt trên
máy client.
Type 3: Network
Protocol Driver

Java
 Dùng Network protocol để giao tiếp với
Applications
JDBC middleware trên server.
Chuyển đổi các lời gọi JDBC thành giao
JDBC Driver Type 3
thức mạng. Sau đó, một phần mềm trung gian
Network protocol (middleware) chạy trên máy server chuyển đổi

JDBC Middleware giao thức mạng thành giao thức DBMS đặc
(java)
thù. Sự chuyển này đặt ở phía server mà
không đòi hỏi cài đặt trên máy tính client.
Database
 Ưu điểm: không cần thư viện phía client
Type 4: Java to Database Protocol

 Drivers thuần java, dùng database protocol để


giao tiếp trực tiếp với database.
Java
Applications  Chuyển lời gọi JDBC thành các lời gọi giao
thức database đặc thù.
JDBC Driver Type 4  Hầu hết do Database vendor cung cấp.

 Ưu điểm:

• Nhanh nhất so với các loại khác.


Database
• Không cần thư viện phía client, phía
server

 Hạn chế: Phụ thuộc Database


Các thành phần JDBC

• JDBC API: là một API hoàn toàn dựa


trên Java, giúp truy xuất CSDL từ NNLT
Java.
• JDBC Diver Manager: một class giúp
kết nối giữa Java Application đến các
JDBC Driver.

• JDBC Driver: phần mềm cho phép Java


Application CSDL khác nhau tương tác
với các CSDL khác nhau.
JDBC Dirvers

 Sun cung cấp đặc tả là các JDBC interface

(Connection, PreparedStatement, Statement,


ResultSet, …). Tập hợp các class hiện thực các JDBC
interface đối với một database engine cụ thể được
gọi là JDBC driver.

 Do các hãng xây dựng DBMS hoặc một đơn vị thứ 3

khác cung cấp.


java.sql package

JDBC API định nghĩa tập các lớp và giao diện để giao tiếp
với cơ sở dữ liệu.
Classes:
• Date, DriverManager, DriverPropertyInfo, Time,
TimeStamp, Types
Interfaces:
• CallableStatement, Connection, DatabaseMetaData,
Driver, PreparedStatement, ResultSet, Statement,
ResultSetMetaData
javax.sql package
Các bước lập
trình tương tác
cơ sở dữ liệu
Các bước Tạo ứng
dụng sử dụng jdbc

Import packages

Mở kết nối CSDL

Thực hiện câu truy vấn SQL

Lấy dữ liệu từ truy vấn

Đóng kết nối


Các bước làm việc với CSDL
Tạo đối tượng thực hiện câu lệnh

 Phương thức createStatement() của Connnection interface

được dùng để tạo đối tượng Statement.

 Ví dụ:
Connection con=DriverManager.getConnection(…);
Statement stmt=con.createStatement();
Thực hiện câu truy vấn SQL & Xử lý kết quả trả về
 Dùng phương thức executeQuery() của Statement interface.
public ResultSet executeQuery(String sql) throws SQLException

 Ví dụ:
ResultSet rs = stmt.executeQuery("select * from emp");
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)


Đóng kết nối

 Đóng đối tượng Connection, thì đối tượng Statement và


ResultSet sẽ tự động đóng.

 Ví dụ:

con.close();
Nạp trình điều khiển

Sử dụng phương thức tĩnh forName() của lớp Class với tham
số là tên trình điều khiển cơ sở dữ liệu.
• Class.forName(“<JDBC Driver>”)
Ví dụ:
• Ðể nạp trình điều khiển sử dụng cầu nối ODBC do Sun
cung cấp, chúng ta sử dụng câu lệnh sau:
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”)
Nạp trình điều khiển

Trình điều khiển của MySQL:


Class.forName(“org.gjf.mm.mysql.Driver”);
Trình điều khiển của Oracle:
Class.forName(“oracle.jdbc.driver.OracleDriver”);
Trình điều khiển của Sybase:
Class.forName("com.sybase.jdbc.SybDriver");
Trình điều khiển qua cầu nối ODBC:
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
…
Ví dụ kết nối Oracle
Thông tin CSDL

Ðể lấy các thông tin về cơ sở dữ liệu gọi phương thức về


đối tượng lớp getMetaData() của Connection trả về
DatabaseMetaData. Ví dụ:

21
Thao tác CSDL

Chỉ có thể được thực hiện khi đã có đối tượng


Connection.
Ðược thực hiện thông qua đối tượng thuộc lớp
java.sql.Statement.
Nội dung của một Statement là một câu truy vấn SQL.
Java.Sql.Statement Interface
• ResultSet executeQuery(String sql) throws
SQLException
• int executeUpdate(String sql) throws SQLException
• …
Tạo đối tượng Statement

java.sql.Statement
Một đối tượng Statement được sử dụng để
truyền câu truy vấn hoặc câu lệnh SQL đến CSDL
và nó được tạo từ đối tượng Connection đã khởi
tạo.
Ðể tạo đối tượng statement ta gọi phương thức
createStatement() của đối tượng Connection:
Statement statement
= connection.createStatement();
Tạo đối tượng Statement

Có thể tạo statement cho phép cập nhật:


createStatement(int resultSetType, int
resultSetConcurrency) throws SQLException

resultSetType: Kiểu của tập kết quả, có thể là:


ResultSet.TYPE_FORWARD_ONLY,
ResultSet.TYPE_SCROLL_INSENSITIVE, hoặc
ResultSet.TYPE_SCROLL_SENSITIVE
resultSetConcurrency: kiểu thao tác, có thể là
ResultSet.CONCUR_READ_ONLY hoặc
ResultSet.CONCUR_UPDATABLE
Thực hiện câu lệnh SQL

Ðể thực thi các câu lệnh SQL ta sử dụng một


trong ba phương thức của đối tượng Statement là:
• ResultSet executeQuery(String sql)
throws SQLException
• int executeUpdate(String sql) throws
SQLException
• boolean execute(String sql) throws
SQLException
Ðối tượng ResultSet

Ðối với câu vấn tin dạng SELECT, nếu truy vấn thành
công thì kết quả trả về là tập các bản ghi dữ liệu được
lưu trong đối tượng ResultSet.
• Lớp này cung cấp các phương thức để rút trích các
cột trong từng dòng kết quả trả về. Tất cả các
phương thức này đều có dạng:
Type getType(int|String)
Tại một thời điểm chỉ có thể thao tác trên một dòng của
resultset. Ðể thao tác trên dòng tiếp theo chúng ta sử
dụng phương thức next().
Ðối tượng ResultSet – Ví dụ
Cập nhật dữ liệu

Ví dụ
Insert

Ví dụ
Update
Đối tuợng PreparedStatement

• PreparedStatement kế thừa từ Statement.

• Thường được dùng với các câu lệnh SQL có tham số

 Thay vì thực thi đối tượng Statement nhiều lần,


có thể dùng PreparedStatement.

• Đối tượng PreparedStatement chứa 1 câu lệnh SQL

đã được biên dịch trước khi gửi đến DBMS, khác


với Statement  Tránh được các lỗi SQL injection.
Sử dụng PreparedStatement

 Ðể xác định một tham số cho PreparedStatement, dùng


dấu chấm hỏi (?) trong câu lệnh SQL.
 Ðể cung cấp các giá trị cho các tham số trong
PreparedStatement, sử dụng các phương thức dạng
set<Type>(<stt>,<giá trị>).
 Ðể thực thi câu truy vấn dạng SELECT, sử dụng phương
thức executeQuery(). Ðể thực thi các câu truy vấn
INSERT, UPDATE, DELETE,… sử dụng phương thức
executeUpdate().
Sử dụng PreparedStatement
Ví dụ:
Ví dụ 1
Kết nối và thao tác với CSDL Access thông qua cầu nối
ODBC. Ðọc danh sách học sinh từ table HOCSINH và
load vào JTable.
Tạo nguồn dữ liệu ODBC
Start  Control Panel  Administrative Tools 
Data Sources (ODBC)
Tạo nguồn dữ liệu ODBC
Ðặt tên nguồn dữ liệu ở mục “Data Source Name” (sẽ sử
dụng trong chuỗi kết nối)
Chọn “Select” để thiết lập đường dẫn đến file cơ sơ dữ
liệu.
Ví dụ 2

Kết nối và thao tác với CSDL SQL Server thông qua cầu
nối ODBC

35
Làm việc với Stored Procedure

 Stored Procedure:
• Là nhóm các câu lệnh SQL có thể được gọi bằng 1
tên.
• Đọan mã, chương trình con thực hiện 1 công việc
nào đó được gọi như một phương thức hày hàm.
• Trước đây các stored procedure được viết theo ngôn
ngữ riêng của các DBMS, các DBMS thế hệ mới cho
phép viết các store procedure dùng Java và JDBC
API.
Thao tác với Stored procedures

 Stored procedures?
 Stored procedures có thể:
• Có kết quả trả về.
• Không có kết quả trả về.
 Giá trị trả về từ một Stored procedure được chuyển
qua tham số OUTPUT.
 Các dạng tham số sử dụng trong Stored procedures:
• Input (IN parameters)
• Output (OUT parameters)
• Both (INOUT parameters)
CallableStatement interface

Ðể thực thi Stored procedures, chúng ta cần phải sử dụng đối
tượng CallableStatement.
CallableStatement kế thừa các phương thức từ Statement và
PreparedStatement.
Ví dụ:
CallableStatement cs =
con.prepareCall("{call Stored_procedures_name}");
ResultSet rs = cs.executeQuery();
? Represents a placeholder for a parameter (IN, OUT,
INOUT).
Parameters

IN
• Dùng phương thức set<Type>(int|String,<Type>) để
chuyển giá trị cho các tham số
• Ví dụ: Callable_Statement.setString(2, "HS009");
OUT
• Mỗi tham số dạng OUT phải được đăng ký thông qua
phương thức registerOutParameter(…).
• Dùng phương thức get<Type>(int|String) để nhận giá
trị của tham số OUT.
INOUT
CallableStatement interface

Ví dụ gọi Stored sp_GetHocSinhs để lấy danh sách học sinh: không
chuyển tham số

Ví dụ gọi Stored sp_InsertHocSinh có chuyển tham số IN, OUT


Làm việc với Transaction

• Là cơ chế đảm bảo tính toàn vẹn của dữ liệu trong database.
• Một Transaction mặc định bắt đầu khi có một câu lệnh

DML (Data Manipulation Language) như SELECT,


INSERT, UPDATE, DELETE hoặc DDL (Data Definition
Language) như CREATE TABLE, CREATE INDEX, …
• Nếu AutoCommit = TRUE/ON thì Transaction sẽ tự động

commit sau mỗi câu lệnh INSERT, UPDATE, DELETE. 


như vậy cần thiết lập FALSE/OFF khi cần kiểm soát nhiều
Transaction.
Làm việc với Transaction

 Ví dụ chuyển tiền từ người này sang người khác


Làm việc với Transaction

• Transaction kết thúc với commit hoặc


rollback.
• Commit: cho kết quả thay đổi từ các câu
SQL trong thao tác.
• Rollback: phục hồi tất cả các thay đổi

gây ra do các câu SQL trong thao tác.


Xin cảm ơn!
TRẦN QÚY NAM
Giảng viên Khoa CNTT
namtq.dn@gmail.com

You might also like