Bài giảng Lập trình Java Chương 3: Lập trình Java kết nối với CSDL bằng JDBC cung cấp cho người học các kiến thức: Giới thiệu JDBC, một số Class và Interface của JDBC API thường dùng, các bước thực hiện truy cập CSDL sử dụng JDBC,... Mời các bạn cùng tham khảo.
Trang 1Phát triển UD CSDL 2
Lập trình Java kết nối với CSDL bằng
JDBC
Trang 2J AVA D ATA B ASE C ONNECTIVITY
• Gi i thi u JDBC ới thiệu JDBC ệu JDBC
• M t s Class và Interface c a JDBC API thột số Class và Interface của JDBC API thường dùng ố Class và Interface của JDBC API thường dùng ủa JDBC API thường dùng ường dùng ng dùng
• Các bưới thiệu JDBC c th c hi n truy c p CSDL s d ng JDBC ực hiện truy cập CSDL sử dụng JDBC ệu JDBC ập CSDL sử dụng JDBC ử dụng JDBC ụng JDBC
– B ước 1 c 1: Đăng ký driver
– B ước 1 c 2: T o đ i t ạo đối tượng kết nối đến CSDL ố Class và Interface của JDBC API thường dùng ượng kết nối đến CSDL ng k t n i đ n CSDL ết nối đến CSDL ố Class và Interface của JDBC API thường dùng ết nối đến CSDL
– B ước 1 c 3: T o đ i t ạo đối tượng kết nối đến CSDL ố Class và Interface của JDBC API thường dùng ượng kết nối đến CSDL ng đ th c hi n các l nh thao tác lên CSDL & ể thực hiện các lệnh thao tác lên CSDL & ực hiện truy cập CSDL sử dụng JDBC ệu JDBC ệu JDBC Xây d ng câu l nh t ực hiện truy cập CSDL sử dụng JDBC ệu JDBC ương ứng (đọc,thêm, xóa, sửa) ng ng (đ c,thêm, xóa, s a) ứng (đọc,thêm, xóa, sửa) ọc,thêm, xóa, sửa) ử dụng JDBC
– B ước 1 c 4: Th c hi n l nh ực hiện truy cập CSDL sử dụng JDBC ệu JDBC ệu JDBC
– B ước 1 c 5: X lý k t qu tr v (optional) ử dụng JDBC ết nối đến CSDL ả trả về (optional) ả trả về (optional) ề (optional)
– B ước 1 c 6: Đóng k t n i ết nối đến CSDL ố Class và Interface của JDBC API thường dùng
• ExecuteBath / X lý l i và ngo i l / Transaction ử dụng JDBC ỗi và ngoại lệ / Transaction ạo đối tượng kết nối đến CSDL ệu JDBC
• Store Procedure
Trang 3developer t p các interface chu n dùng đ truy xu t d ập CSDL sử dụng JDBC ẩn dùng để truy xuất dữ ể thực hiện các lệnh thao tác lên CSDL & ấp cho java ữ
li u quan h ệu JDBC ệu JDBC
• JDBC đượng kết nối đến CSDLc phát tri n b i JavaSoft.ể thực hiện các lệnh thao tác lên CSDL & ởi JavaSoft
Trang 4Kiến trúc JDBC
• Khi làm vi c v i JDBC, java developer sẽ làm vi c nh ệu JDBC ới thiệu JDBC ệu JDBC ưnhau đ i v i các h c s d li u khác nhau ố Class và Interface của JDBC API thường dùng ới thiệu JDBC ệu JDBC ơng ứng (đọc,thêm, xóa, sửa) ởi JavaSoft ữ ệu JDBC
• Java developer không ph thu c vào m t h c s d li u ụng JDBC ột số Class và Interface của JDBC API thường dùng ột số Class và Interface của JDBC API thường dùng ệu JDBC ơng ứng (đọc,thêm, xóa, sửa) ởi JavaSoft ữ ệu JDBC
c th nào ụng JDBC ể thực hiện các lệnh thao tác lên CSDL &
• Java developer không c n ph i quan tâm đ n s khác nhau ần phải quan tâm đến sự khác nhau ả trả về (optional) ết nối đến CSDL ực hiện truy cập CSDL sử dụng JDBC khi giao ti p v i các HQTCSDL khác nhau ết nối đến CSDL ới thiệu JDBC
Trang 5Kiến trúc JDBC
Trang 7Hoạt động của JDBC
Trang 8JDBC API
• Class và Interface c a JDBC API thu c gói ủa JDBC API thường dùng ột số Class và Interface của JDBC API thường dùng java.sql
• DriverManager dùng đ n p các driver và t o ể thực hiện các lệnh thao tác lên CSDL & ạo đối tượng kết nối đến CSDL ạo đối tượng kết nối đến CSDL
Connection đ n c s d li u ết nối đến CSDL ơng ứng (đọc,thêm, xóa, sửa) ởi JavaSoft ữ ệu JDBC
• Driver: Driver c a c s d li u, m i JDBC Driver đ u ủa JDBC API thường dùng ơng ứng (đọc,thêm, xóa, sửa) ởi JavaSoft ữ ệu JDBC ỗi và ngoại lệ / Transaction ề (optional)cài đ t l i Interface này ặt lại Interface này ạo đối tượng kết nối đến CSDL
• Connection :Thi t l p m t Connection đ n c s d li u ết nối đến CSDL ập CSDL sử dụng JDBC ột số Class và Interface của JDBC API thường dùng ết nối đến CSDL ơng ứng (đọc,thêm, xóa, sửa) ởi JavaSoft ữ ệu JDBC
và cho phép t o các Statement ạo đối tượng kết nối đến CSDL
• Statement: G n k t v i m t connection đ n c s d li u ắn kết với một connection đến cơ sở dữ liệu ết nối đến CSDL ới thiệu JDBC ột số Class và Interface của JDBC API thường dùng ết nối đến CSDL ơng ứng (đọc,thêm, xóa, sửa) ởi JavaSoft ữ ệu JDBC
và cho phép th c thi các câu l nh SQL ực hiện truy cập CSDL sử dụng JDBC ệu JDBC
• CallableStatement tương ứng (đọc,thêm, xóa, sửa) ng t Statement nh ng áp d ng ực hiện truy cập CSDL sử dụng JDBC ư ụng JDBC cho Store procedures
Trang 9• ResultSetMetaData: Cung c p các thông tin nh ki u d ấp cho java ư ể thực hiện các lệnh thao tác lên CSDL & ữ
li u và các thu c tính trong Resultset ệu JDBC ột số Class và Interface của JDBC API thường dùng
• DatabaseMetaData: Cung c p các thông tin c a c s d ấp cho java ủa JDBC API thường dùng ơng ứng (đọc,thêm, xóa, sửa) ởi JavaSoft ữ
li u k t n i ệu JDBC ết nối đến CSDL ố Class và Interface của JDBC API thường dùng
• SQLException: Cung c p thông tin các ngo i l x y ra khi ấp cho java ạo đối tượng kết nối đến CSDL ệu JDBC ả trả về (optional)
tương ứng (đọc,thêm, xóa, sửa) ng tác v i c s d li u ới thiệu JDBC ơng ứng (đọc,thêm, xóa, sửa) ởi JavaSoft ữ ệu JDBC
Trang 10JDBC API
Trang 11Một số bước kỹ thuật cơ bản sử dụng
JDBC
• B ước 1 c 2: T o đ i tạo đối tượng kết nối đến CSDL ố Class và Interface của JDBC API thường dùng ượng kết nối đến CSDLng k t n i đ n CSDLết nối đến CSDL ố Class và Interface của JDBC API thường dùng ết nối đến CSDL
• B ước 1 c 3: T o đ i tạo đối tượng kết nối đến CSDL ố Class và Interface của JDBC API thường dùng ượng kết nối đến CSDLng đ th c hi n các l nh thao tác lên ể thực hiện các lệnh thao tác lên CSDL & ực hiện truy cập CSDL sử dụng JDBC ệu JDBC ệu JDBC CSDL & Xây d ng câu l nh tực hiện truy cập CSDL sử dụng JDBC ệu JDBC ương ứng (đọc,thêm, xóa, sửa) ng ng (đ c,thêm, xóa, s a) ứng (đọc,thêm, xóa, sửa) ọc,thêm, xóa, sửa) ử dụng JDBC
• B ước 1 c 4: Th c hi n l nhực hiện truy cập CSDL sử dụng JDBC ệu JDBC ệu JDBC
• B ước 1 c 5: X lý k t qu tr v (optional)ử dụng JDBC ết nối đến CSDL ả trả về (optional) ả trả về (optional) ề (optional)
• B ước 1 c 6: Đóng k t n iết nối đến CSDL ố Class và Interface của JDBC API thường dùng
Trang 12Bước 1 : Đăng ký driver JDBC
• Chu n b driver tẩn dùng để truy xuất dữ ị driver tương ứng với HQTCSDL & thực hiện đăng ương ứng (đọc,thêm, xóa, sửa) ng ng v i HQTCSDL & th c hi n đăng ứng (đọc,thêm, xóa, sửa) ới thiệu JDBC ực hiện truy cập CSDL sử dụng JDBC ệu JDBC ký
• Đăng ký driver MySQL:
– Đăng ký:
• Cách 1: S d ng Class.forName ử dụng JDBC ụng JDBC
Class.forName(" org.gjt.mm.mysql ");
• Cách 2: DriverManager.registerDriver
Driver driver = new org.gjt.mm.mysql Driver();
DriverManager registerDriver(driver);
– Các package c n s d ng: ần phải quan tâm đến sự khác nhau ử dụng JDBC ụng JDBC
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
Trang 13Bước 2 : Tạo & mở kết nối đến CSDL
• CSDL minh h a:ọc,thêm, xóa, sửa)
Trang 14Bước 2 : Tạo & mở kết nối đến CSDL
• S d ng phử dụng JDBC ụng JDBC ương ứng (đọc,thêm, xóa, sửa) ng th c ứng (đọc,thêm, xóa, sửa) getConnection c a DriverManager ủa JDBC API thường dùng
• M t s cú pháp:ột số Class và Interface của JDBC API thường dùng ố Class và Interface của JDBC API thường dùng
password);
Trang 15Bước 2 : Tạo & mở kết nối đến CSDL
Trang 16public class DemoJDBC {
public static void main(String [] args){
…
//1 Đăng ký driver và t o k t n i đ n CSDLạo kết nối đến CSDL ết nối đến CSDL ối đến CSDL ết nối đến CSDL
Driver driver = new org.gjt.mm.mysql.Driver();
DriverManager.registerDriver(driver);
//2 T o k t n i đ n CSDLạo kết nối đến CSDL ết nối đến CSDL ối đến CSDL ết nối đến CSDL
String conString = " jdbc:mysql :// localhost : 3306 / NhanVienDB ";
Properties info = new Properties();
info.setProperty("characterEncoding", "utf8");
info.setProperty("user", "root");
info.setProperty("password", "");
Connection connection;
connection = DriverManager.getConnection(conString, info);
//3 T o đ i tạo kết nối đến CSDL ối đến CSDL ượng Statement để thực hiện thao tác dữ liệu mong muốn ng Statement đ th c hi n thao tác d li u mong mu n ể thực hiện thao tác dữ liệu mong muốn ực hiện thao tác dữ liệu mong muốn ện thao tác dữ liệu mong muốn ữ liệu mong muốn ện thao tác dữ liệu mong muốn ối đến CSDL
Trang 17Bước 3 : Tạo đối tượng để thực thi và chuẩn bị các lệnh SQL
• S d ng phử dụng JDBC ụng JDBC ương ứng (đọc,thêm, xóa, sửa) ng th c ứng (đọc,thêm, xóa, sửa) createStatement() c a đ i tủa JDBC API thường dùng ố Class và Interface của JDBC API thường dùng ượng kết nối đến CSDLng
k t n i:ết nối đến CSDL ố Class và Interface của JDBC API thường dùng
• Chu n b các l nh SQL:ẩn dùng để truy xuất dữ ị driver tương ứng với HQTCSDL & thực hiện đăng ệu JDBC
– SELECT : Truy v n d li u t b ng ấp cho java ữ ệu JDBC ừ cơ sở dữ liệu , ả trả về (optional)
– DELETE : Xóa d li u t b ng ữ ệu JDBC ừ cơ sở dữ liệu , ả trả về (optional)
– UPDATE : C p nh t d li u vào b ng ập CSDL sử dụng JDBC ập CSDL sử dụng JDBC ữ ệu JDBC ả trả về (optional)
– INSERT : Thêm d li u vào b ng ữ ệu JDBC ả trả về (optional)
• Ví d : ụng JDBC
Statement statement = connection createStatement ();
String sql = "SELECT * FROM NHANVIEN";
Query (Đọc)
Update (Thay đổi)
Trang 18Bước 3 : Tạo đối tượng để thực thi và
public class DemoJDBC {
public static void main(String [] args){
…
//1 Đăng ký driver và t o k t n i đ n CSDL ạo đối tượng kết nối đến CSDL ết nối đến CSDL ố Class và Interface của JDBC API thường dùng ết nối đến CSDL
//2 T o k t n i đ n CSDL ạo đối tượng kết nối đến CSDL ết nối đến CSDL ố Class và Interface của JDBC API thường dùng ết nối đến CSDL
//3 T o đ i tạo kết nối đến CSDL ối đến CSDL ượng Statement để thực hiện thao tác dữ liệu mong muốn ng Statement đ th c hi n thao tác d li u mong mu n ể thực hiện thao tác dữ liệu mong muốn ực hiện thao tác dữ liệu mong muốn ện thao tác dữ liệu mong muốn ữ liệu mong muốn ện thao tác dữ liệu mong muốn ối đến CSDL
Statement statement = connection.createStatement();
String sql = "SELECT * FROM NHANVIEN";
//4 Th c hi n l nh SQL ực hiện truy cập CSDL sử dụng JDBC ệu JDBC ệu JDBC
//5 X lý k t qu tr v ử dụng JDBC ết nối đến CSDL ả trả về (optional) ả trả về (optional) ề (optional)
…
}
}
3
Trang 19Bước 4 : Thực thi SQL
• S d ng m t s cú pháp:ử dụng JDBC ụng JDBC ột số Class và Interface của JDBC API thường dùng ố Class và Interface của JDBC API thường dùng
//Th c thi câu truy v n (SELECT) K t qu tr v là m t t p d li u ực hiện truy cập CSDL sử dụng JDBC ấp cho java ết nối đến CSDL ả trả về (optional) ả trả về (optional) ề (optional) ột số Class và Interface của JDBC API thường dùng ập CSDL sử dụng JDBC ữ ệu JDBC ResultSet
ResultSet statement.executeQuery (String sql)
//Th c thi câu l nh c p nh t d li u (Thêm, xóa, s a) ực hiện truy cập CSDL sử dụng JDBC ệu JDBC ập CSDL sử dụng JDBC ập CSDL sử dụng JDBC ữ ệu JDBC ử dụng JDBC
//Th c thi câu l nh SQL nói chung (thêm, xóa, s a, truy v n, …) ực hiện truy cập CSDL sử dụng JDBC ệu JDBC ử dụng JDBC ấp cho java
boolean statement.execute (String sql)
Trang 20public class DemoJDBC {
public static void main(String [] args){
…
//1 Đăng ký driver và t o k t n i đ n CSDL ạo đối tượng kết nối đến CSDL ết nối đến CSDL ố Class và Interface của JDBC API thường dùng ết nối đến CSDL
//2 T o k t n i đ n CSDL ạo đối tượng kết nối đến CSDL ết nối đến CSDL ố Class và Interface của JDBC API thường dùng ết nối đến CSDL
//3 T o đ i t ạo đối tượng kết nối đến CSDL ố Class và Interface của JDBC API thường dùng ượng kết nối đến CSDL ng Statement đ th c hi n thao tác d li u mong mu n ể thực hiện các lệnh thao tác lên CSDL & ực hiện truy cập CSDL sử dụng JDBC ệu JDBC ữ ệu JDBC ố Class và Interface của JDBC API thường dùng
Statement statement = connection.createStatement();
String sql = "SELECT * FROM NHANVIEN";
//4 Th c hi n truy xu t (đ c / ghi) ực hiện thao tác dữ liệu mong muốn ện thao tác dữ liệu mong muốn ất (đọc / ghi) ọc / ghi)
Trang 21Bước 5: Xử lý kết quả trả về
• Tùy vào k t qu tr v c a vi c th c thi câu l nh:ết nối đến CSDL ả trả về (optional) ả trả về (optional) ề (optional) ủa JDBC API thường dùng ệu JDBC ực hiện truy cập CSDL sử dụng JDBC ệu JDBC
– ResultSet statement.executeQuery (String sql)
🡪 K t qu tr v là m t t p d li u c a câu truy v n: C n duy t qua ết nối đến CSDL ả trả về (optional) ả trả về (optional) ề (optional) ột số Class và Interface của JDBC API thường dùng ập CSDL sử dụng JDBC ữ ệu JDBC ủa JDBC API thường dùng ấp cho java ần phải quan tâm đến sự khác nhau ệu JDBC
t p d li u này đ x lý (hi n th , …) ập CSDL sử dụng JDBC ữ ệu JDBC ể thực hiện các lệnh thao tác lên CSDL & ử dụng JDBC ể thực hiện các lệnh thao tác lên CSDL & ị driver tương ứng với HQTCSDL & thực hiện đăng
– int statement.executeUpdate (String sql)
🡪 K t qu tr v là s dòng b nh h ết nối đến CSDL ả trả về (optional) ả trả về (optional) ề (optional) ố Class và Interface của JDBC API thường dùng ị driver tương ứng với HQTCSDL & thực hiện đăng ả trả về (optional) ưởi JavaSoft ng c a vi c thêm, xóa, s a ủa JDBC API thường dùng ệu JDBC ử dụng JDBC
– boolean statement.execute (String sql)
🡪Tùy vào câu l nh SQL sẽ có cách th c x lý t ệu JDBC ứng (đọc,thêm, xóa, sửa) ử dụng JDBC ương ứng (đọc,thêm, xóa, sửa) ng ng ứng (đọc,thêm, xóa, sửa)
Trang 225a Lấy dữ liệu từ ResultSet
• L y k t qu t câu truy v n:ấp cho java ết nối đến CSDL ả trả về (optional) ừ cơ sở dữ liệu , ấp cho java
• S d ng ử dụng JDBC ụng JDBC next() đ đ n dòng k ti p.ể thực hiện các lệnh thao tác lên CSDL & ết nối đến CSDL ết nối đến CSDL ết nối đến CSDL
ResultSet rs = statement.executeQuery(sql);
while ( rs.next()) {
int c1= rs.getInt("Column1");
String c2 = rs.getString("Column2");
… }
Column1 Column2 Column3
ResultSet rs = statement executeQuery (sql)
Trang 235a Lấy dữ liệu từ bảng PHONGBAN
Statement statement = connection.createStatement();
String sql = "SELECT * FROM PHONGBAN" ;
ResultSet rs = statement.executeQuery(sql);
while (rs.next()){
int manv= rs.getInt( "MAPHG" );
String hoten = rs.getString( "TENPHG" );
System.out.print(manv+ " " );
System.out.println(hoten);
}
connection.close();
…
5
Trang 245a Lấy dữ liệu từ bảng NHANVIEN
Statement statement = connection.createStatement();
String sql = “select * from NHANVIEN Where PHONG = 1" ;
statement.execute (sql);
ResultSet rs = statement.getResultSet();
while (rs.next()){
int manv = rs.getString( "MANV" );
String hoten = rs.getString( "HOTEN" );
Date ngaysinh = rs.getDate( "NGAYSINH" );
float luong = rs.getFloat( "LUONG" );
System.out.println( … );
}
connection.close();
…
5