JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
JDBC
Nguyễn Hoàng Anh -
Nguyễn Hoàng Anh - - ĐHKHTN
1
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Nội dung trình bày
●
JDBC API
●
Kiến trúc JDBC
●
Thiết lập kết nối đến cơ sở dữ liệu
●
Statement
●
PreparedStatement
●
CallableStatement
Nguyễn Hoàng Anh - - ĐHKHTN
2
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
JDBC API
●
●
JDBC API là tập các Java API được sử dụng
để tương tác với cơ sở dữ liệu quan hệ.
Công dụng
●
Kết nối cơ sở dữ liệu quan hệ.
●
Gửi các câu truy vấn đến cơ sở dữ liệu.
●
Nhận và xử lý các kết quả trả về từ cơ sở dữ liệu
Nguyễn Hoàng Anh - - ĐHKHTN
3
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Kiến trúc JDBC
Nguyễn Hoàng Anh - - ĐHKHTN
4
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Kiến trúc JDBC
●
●
●
Khi làm việc với JDBD, java developer sẽ làm việc như nhau
đối với các hệ cơ sở dữ liệu khác nhau.
Java developer không phụ thuộc vào một hệ cơ sở dữ liệu cụ
thể nào.
Java developer không cần phải quan tâm đến sự khác nhau khi
giao tiếp với các hệ quản trị cơ sở dữ liệu quan hệ khác nhau.
Nguyễn Hoàng Anh - - ĐHKHTN
5
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Thiết lập kết nối đến cơ sở dữ liệu
●
Bước 1: Thêm thư viện JDBC Driver vào ứng dụng
●
Bước 2: Đăng ký Driver - MySQL
Cách 1: Class.forName :
Class.forName(“org.gjt.mm.mysql.Driver”);
Cách 2: DriverManager.registerDriver
Driver driver = new org.gjt.mm.mysql.Driver()
DriverManager.registerDriver(driver);
Nguyễn Hoàng Anh - - ĐHKHTN
6
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Thiết lập kết nối đến cơ sở dữ liệu
●
MySQL
→ Database: bookonline
→ user: root , password: 123456
→ port: 3306 (default)
→ server: localhost
●
Java
→ url: jdbc:mysql://localhost:3306/bookonline
→ user: root , password: 123456
→ characterEncoding: utf-8
Nguyễn Hoàng Anh - - ĐHKHTN
7
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Thiết lập kết nối đến cơ sở dữ liệu
1 import java.sql.*;
2 import java.util.*;
1
2
3
4
5
6
7
8
9
10
11
12
Driver driver = new org.gjt.mm.mysql.Driver();
DriverManager.registerDriver(driver);
String
conString="jdbc:mysql://localhost:3306/BookOnline";
Properties info = new Properties();
info.setProperty("characterEncoding", "utf8");
info.setProperty("user", "root");
info.setProperty("password", "root");
Connection connection =
DriverManager.getConnection(conString, info);
. . .
connection.close();
Nguyễn Hoàng Anh - - ĐHKHTN
8
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Thiết lập kết nối đến cơ sở dữ liệu
●
Sau khi thiết lập kết nối đến cơ sở dữ liệu, có
thể
●
Gửi các câu truy vấn đến cơ sở dữ liệu.
●
Nhận và xử lý các kết quả trả về từ cơ sở dữ liệu.
Nguyễn Hoàng Anh - - ĐHKHTN
9
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Các dạng Statement
●
●
●
Statement: Thực hiện các câu truy vấn đơn
giản.
PreparedStatement: Thực hiện các câu truy
vấn có các tham số đầu vào
CallableStatement: Thực hiện các câu truy vấn
có các tham só đầu vào và đầu ra. Cụ thể là
các store procedure
Nguyễn Hoàng Anh - - ĐHKHTN
10
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Statement
Nguyễn Hoàng Anh - - ĐHKHTN
11
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Statement
●
Statement: Thực hiện các câu truy vấn đơn
giản.
Nguyễn Hoàng Anh - - ĐHKHTN
12
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Statement
●
●
Cách tạo Statement đơn giản
Statement sm = con.createStatement();
Các phương thức thường dùng
sm.executeQuery(sql); → select
sm.executeUpdate(sql); → insert,
update, delete, drop, create, …
sm.addBatch(sql) & sm.executeBatch()
→ Batch
Nguyễn Hoàng Anh - - ĐHKHTN
13
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Statement - executeQuery
●
ResultSet rs = sm.executeQuery(sql);
●
ResultSet → forward : rs.next()
1
2
3
4
5
6
7
8
9
10
11
Statement statement = con.createStatement();
String sql = “SELECT * FROM DanhMuc”;
ResultSet rs = statement.executeQuery(sql);
while (rs.next()){
int maDanhMuc = rs.getInt(“MaDanhMuc”);
String tenDanhMuc = rs.getString(“tenDanhMuc”);
System.out.println(maDanhMuc+” “+tenDanhMuc);
}
rs.close();
sm.close();
con.close();
Nguyễn Hoàng Anh - - ĐHKHTN
14
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Statement - executeQuery
●
Forward & Backward
Statement sm=
connection.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
●
ResultSet rs = sm.executeQuery(sql);
●
ResultSet rs
→ forward : rs.next();
→ backward: rs.previous();
Nguyễn Hoàng Anh - - ĐHKHTN
15
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Statement – executeUpdate
1
2
3
4
5
6
7
8
9
10
Statement sm = con.createStatement();
String sql = “DELETE FROM Sach WHERE MaDanhMuc= 1”;
int n = sm.executeUpdate (sql);
if (n >= 0){
System.out.println(n + “ Sách đã được xóa”);
}else{
System.out.println(“Lỗi”);
}
sm.close();
con.close();
Nguyễn Hồng Anh - - ĐHKHTN
16
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Statement – executeUpdate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Statement sm = con.createStatement();
String sql = String.format(“UPDATE DanhMuc
SET TenDanhMuc = '%s'”
WHERE MaDanhMuc= %d”,
maDanhMuc, tenDanhMuc);
int n = sm.executeUpdate (sql);
if (n >= 0){
System.out.println(“Cập nhật thành cơng”);
}else{
System.out.println(“Lỗi”);
}
sm.close();
con.close();
Nguyễn Hồng Anh - - ĐHKHTN
17
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Statement – executeUpdate
1
2
3
4
5
6
7
8
9
10
11
Statement sm = con.createStatement();
String sql = String.format(“INSERT INTO DanhMuc
(TenDanhMuc) VALUES('%s')”,tenDanhMuc);
int n = sm.executeUpdate (sql);
if (n >= 0){
System.out.println(“Thêm thành cơng”);
}else{
System.out.println(“Lỗi”);
}
sm.close();
con.close();
Nguyễn Hồng Anh - - ĐHKHTN
18
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Statement – executeUpdate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
String tenDanhMuc = "C++";
String sql= String.format("INSERT INTO
DANHMUC(TENDANHMUC) VALUES '%s')", tenDanhMuc);
int n=sm.executeUpdate(sql,
Statement.RETURN_GENERATED_KEYS);
if(n>0){
System.out.println("Thêm thành công");
ResultSet rs=statement.getGeneratedKeys();
if(rs.next()){
int mdm = rs.getInt(1);
System.out.println("Mã danh mục vừa thêm:" +mdm);
}
}
sm.close();
con.close();
Nguyễn Hoàng Anh - - ĐHKHTN
19
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Statement – executeUpdate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
String [] tenDanhMucs = {"C++", "C#", "Java"};
String sql="INSERT INTO DANHMUC(TENDANHMUC) VALUES ";
for(int i=0; i
sql=sql + String.format("('%s') ", tenDanhMucs[i]);
if(i
}
int n=stm.executeUpdate(sql,
Statement.RETURN_GENERATED_KEYS);
if(n>0){
System.out.println("Thêm thành công");
ResultSet rs=statement.getGeneratedKeys();
while(rs.next()){
int mdm = rs.getInt(1);
System.out.println("Mã danh mục vừa thêm: " + mdm);
}
}
sm.close();
con.close();
Nguyễn Hoàng Anh - - ĐHKHTN
20
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Statement – executeBatch
1
2
3
4
5
6
7
8
9
10
11
String sql1="INSERT INTO DANHMUC(TENDANHMUC)
VALUES('Java')";
String sql2="INSERT INTO DANHMUC(TENDANHMUC)
VALUES('PHP')";
String sql3="UPDATE DANHMUC SET TENDANHMUC='C'
WHERE MADANHMUC=43";
Statement statement=connection.createStatement();
statement.addBatch(sql1);
statement.addBatch(sql2);
statement.addBatch(sql3);
int [] n = statement.executeBatch();
Nguyễn Hoàng Anh - - ĐHKHTN
21
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Statement - SQLException
1
2
3
4
5
6
7
try{
. . .
}catch(SQLException ex){
. . .
}finally{
con.close();
}
Nguyễn Hoàng Anh - - ĐHKHTN
22
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
Statement
●
Statement: Thực hiện các câu truy vấn đơn
giản?
Nguyễn Hoàng Anh - - ĐHKHTN
23
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
PreparedStatement
Nguyễn Hoàng Anh - - ĐHKHTN
24
JAVA PROGRAMMING – 2012 - V2.1
JAVA PROGRAMMING
PreparedStatement
●
PreparedStatement: Thực hiện các câu truy
vấn có các tham số đầu vào
Nguyễn Hồng Anh - - ĐHKHTN
25