Date post: | 04-Apr-2018 |
Category: |
Documents |
Upload: | tran-van-hoa |
View: | 231 times |
Download: | 0 times |
of 22
7/29/2019 JDBC Basic
1/22
11/7/2012
1
LP TRNH NG DNG JAVA
Nguyn Hong Anh
JDBC C BN
(JAVA DATABASE CONNECTIVITY)
Ni dung
Giithiu JDBC
Mts Class v Interface ca JDBC API thng dng
Mtskthutcbnsdng JDBC
ng k driver, M & ngktnicsdliu
Thchinly, xa, cpnht, thm dliu
ExecuteBath
X l li v ngoil
Transaction
Gi Store Procedure
2
7/29/2019 JDBC Basic
2/22
11/7/2012
2
GIITHIU JDBC
3
JDBC
JDBC (Java database connectivity) cung cp cho javadeveloper tp cc interface chun dng truy xutdliu quan h.
JDBC c pht trinbi JavaSoft
4
7/29/2019 JDBC Basic
3/22
11/7/2012
3
Kin trc JDBC Khi lm vic vi JDBD, java developer s lm vic
nh nhau ivi cc hcsdliu khc nhau.
Java developer khng phthuc vo mthcsdliucth no.
Java developer khng cnphi quan tm ns khcnhau khi giao tipvi cc HQTCSDL khc nhau.
5
Kin trc JDBC
6
Java Application
JDBC Driver Manager
JDBC Drivers
Database
JDBC API
JDBC Driver API
7/29/2019 JDBC Basic
4/22
11/7/2012
4
Kin trc JDBC
7
Java Application
JDBC Driver Manager
SQLServerDriver
MySQLDriver
OracleDriver
ODBC BridgeDriver
DB2Driver
ODBC BridgeManager
AccessDriver
dBaseDriver
Access dBase SQL Server MySQL Oracle DB2
JDBC
Java Application
1. Mktni
2. Gi SQL
3. Rt trch dliu
4.ngktni
DBMS
1. To phin ktni
2. Thc thi SQL
3. Trktqu
4.ng phin ktni
8
7/29/2019 JDBC Basic
5/22
11/7/2012
5
JDBC API
9
JDBC Interfaces
Class v Interface ca JDBC API thuc gijava.sql
DriverManager dng np cc driver v to
Connection ncsdliu. Driver: Driver ca c s d liu, mi JDBC Driver
u ci tli Interface ny.
Connection :Thit lpmt Connection n c s dliu v cho php to cc Statement .
Statement: Gnktvimt connection ncsdliu v cho php thc thi cc cu lnh SQL.CallableStatement tng t Statement nhng pdng cho Store procedures.
10
7/29/2019 JDBC Basic
6/22
11/7/2012
6
JDBC API
PreparedStatement: Tngtnh Statement nhngp dng cho Precompiled SQL.
ResultSet: Cung cp thng tin rt trch tcsdliu , cho php truy xut cc dng dliu.
ResultSetMetaData: Cung cp cc thng tin nhkiudliu v cc thuc tnh trong Resultset.
DatabaseMetaData: Cung cp cc thng tin cacsdliuktni.
SQLException: Cung cp thng tin cc ngoilxy rakhi tng tc vicsdliu.
11
JDBC API
12
DriverManager
Connection Connection Connection
Statement Statement
ResultSet ResultSet
7/29/2019 JDBC Basic
7/22
11/7/2012
7
MT S K THUT C BNSDNG JDBC
13
Mtskthutcbnsdng JDBC
ng k driver
M & ngktnicsdliu
Thchinly, xa, cpnht, thm dliu
ExecuteBath
X l li v ngoil
Transaction
Gi Store Procedure
14
7/29/2019 JDBC Basic
8/22
11/7/2012
8
ng k Driver - MySQL Bc 1: Thm thvin JDBC Driver vo ngdng
Bc 2:ng k Driver - MySQL
Cch 1: Class.forName :
Class.forName(org.gjt.mm.mysql.Driver);
Cch 2: DriverManager.registerDriver
Driver driver = new org.gjt.mm.mysql.Driver()
DriverManager.registerDriver(driver);
15
M & ngktnicsdliu
itng Connection ctot getConnection ca DriverManager
Connection getConnection (String url);
Connection getConnection (String url, String user, String password); Connection getConnection (String url, java.util.Properties info);
16
7/29/2019 JDBC Basic
9/22
11/7/2012
9
Mktnicsdliu - MySQL
17
JDBC
Java
Application
MYSQL
DBMS
QLNV
Port 3306
URL jdbc:mysql://localhost:3306/BookOnline
Domain localhost
Username root
Password root
Username root
Password root
Driver MySQL JDBC Driver
Csdliu BookOnline
18
MaDanhMuc:Auto Increment
7/29/2019 JDBC Basic
10/22
11/7/2012
10
M & ngktnicsdliu - MySQL
19
12
34
56
78
91011
1213
1415
1617
1819
20
importjava.sql.Connection; importjava.sql.Driver;importjava.sql.DriverManager; importjava.sql.SQLException;
importjava.util.Properties;publicclass TestJDBC {
publicstaticvoidmain(String[] args) {try {
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();
} catch (SQLException ex) { System.out.println(ex);}}
}
Cc cu lnh SQL
SELECT : Truy vndliutbng
DELETE : Xa dliutbng
UPDATE : Cpnhtdliu vo bng
INSERT : Thm dliu vo bng
20
7/29/2019 JDBC Basic
11/22
11/7/2012
11
To v thc thi cc cu lnh SQL Statementstatement = connection.createStatement() ;
ResultSet executeQuery (String sql)
int executeUpdate (String sql)
boolean execute (String sql)
21
Lydliutbng
22
Row
Result Set
rs.next()
ResultSet executeQuery (String sql)
7/29/2019 JDBC Basic
12/22
11/7/2012
12
Lydliutbng - DanhMuc
23
12
34
56
78
910
1112
. . .Statement statement = connection.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.print(maDanhMuc+ );System.out.println(tenDanhMuc);
}
connection.close();
. . .
Lydliutbng - Sach
24
123
45
67
89
1011
1213
1415
. . .Statement statement = connection.createStatement();String sql = Select * From Sach Where MaDanhMuc = 1;ResultSet rs = statement.executeQuery(sql);while (rs.next()){
String maSach = rs.getString(MaSach);String tenSach = rs.getString(TenSach);Double giaBan= rs.getDouble(GiaBan);String soLuong = rs.getInt(SoLuong);int maDanhMuc = rs.getInt(maDanhMuc);
System.out.println(. . .);}
Connection.close();
. . .
7/29/2019 JDBC Basic
13/22
11/7/2012
13
Xa dliu - DanhMuc
25
12
34
56
78
910
1112
. . .Statement statement = connection.createStatement();
String sql = DELETE FROM DANHMUC WHERE MADANHMUC = 1;int n = statement.executeUpdate (sql);
if (n == 1){System.out.println(Mt danh mcc xa);
}else{System.out.println(Li);
}connection.close();
. . .
Xa dliu - Sach
26
123
45
67
89
1011
12
. . .Statement statement = connection.createStatement();String sql = DELETE FROM SACH WHERE MADANHMUC = 1;int n = statement.executeUpdate (sql);if (n >= 1){
System.out.println(n + Sch c xa);}else{
System.out.println(Li);}
connection.close();
. . .
7/29/2019 JDBC Basic
14/22
11/7/2012
14
Cpnhtdliu - DanhMuc
27
12
34
56
78
910
1112
131415
. . .int maDanhMuc = . . .
String tenDanhMuc = . . .Statement statement = connection.createStatement();
String sql = String.format(UPDATE DANHMUCSET TENDANHMUC = %sWHERE MADANHMUC= %d,
maDanhMuc, tenDanhMuc);
int n = statement.executeUpdate (sql);if (n == 1){
System.out.println(Cpnht thnh cng);}else{
System.out.println(Li);}connection.close();
. . .
Cpnhtdliu - Sach
28
123
45
67
89
1011
1213
141516
1718
. . .String maSach = . . .double giaBan = . . .
int soLuong = . . .Statement statement = connection.createStatement();
String sql = String.format(UPDATE SACHSET GIABAN = %f,
SOLUONG = %dWHERE MASACH = %s,
giaBan, soLuong, maSach);int n = statement.executeUpdate (sql);
if (n == 1){System.out.println(Cpnht thnh cng);
}else{System.out.println(Li);
}
connection.close();
. . .
7/29/2019 JDBC Basic
15/22
11/7/2012
15
Thm dliu - Sach
29
12
34
56
78
910
1112
131415
1617
18
. . .String maSach = . . .
String tenSach = . . .double giaBan = . . .
int soLuong = . . .int maDanhMuc = . . .
Statement statement = connection.createStatement();String sql = String.format(INSERT INTO SACH (MaSach, TenSach,GiaBan, SoLuong, MaDanhMuc) VALUES(%s, %s, %f, %d, %d),
maSach, tenSach, giaBan, soLuong, maDanhMuc);
int n = statement.executeUpdate (sql);if (n == 1){
System.out.println(Thm sch thnh cng);}else{
System.out.println(Li);}connection.close();
. . .
Thm dliu - DanhMuc
30
123
45
67
89
1011
1213
. . .String tenDanhMuc = . . .Statement statement = connection.createStatement();
String sql = String.format(INSERT INTO DANHMUC (TENDANHMUC)VALUES(%s),tenDanhMuc);int n = statement.executeUpdate (sql);if (n == 1){
System.out.println(Thm danh mc thnh cng);}else{
System.out.println(Li);}
connection.close();
. . .
7/29/2019 JDBC Basic
16/22
11/7/2012
16
Thm dliu - DanhMuc
31
12
34
56
78
910
1112
1314
. . .String tenDanhMuc = "C++";
String sql= String.format("INSERT INTO DANHMUC(TENDANHMUC)
VALUES (%s)", tenDanhMuc);int n=stm.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);if(n>0){
System.out.println("Thm thnh cng");ResultSet rs=statement.getGeneratedKeys();
if(rs.next()){int maDanhMuc = rs.getInt(1);
System.out.println("M danh mcva thm: "+maDanhMuc);}
}connection.close();
Thm dliu - DanhMuc
32
123
45
67
89
1011
1213
141516
1718
19
. . .String [] tenDanhMucs = {"C++", "C#", "Java"};String sql="INSERT INTO DANHMUC(TENDANHMUC) VALUES ";
for(int i=0; i
7/29/2019 JDBC Basic
17/22
11/7/2012
17
ExecuteBath
33
12
34
56
78
910
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();
. . .
X l ngoil
34
123
45
67
89
1011
1213
141516
1718
19
try {Driver driver = new org.gjt.mm.mysql.Driver();DriverManager.registerDriver(driver);
String cs = . . .Properties info = new Properties();
. . .Connection connect =DriverManager.getConnection( cs, info);
try{Statement statement=connection.createStatement();
. . .}catch (SQLException ex){
//X l li}finally{
//ngktniconnection.close();
}
} catch (SQLException ex) {//X l li
}
7/29/2019 JDBC Basic
18/22
11/7/2012
18
PreparedStatement
35
12
34
56
78
910
1112
131415
1617
1819
. . .String maSach = . . ; String tenSach = . . ;
double giaBan = . . ; int soLuong = . . .; int maDanhMuc = . . .PreparedStatement statement = connection.prepareStatement();
String sql = INSERT INTO SACH (MaSach, TenSach, GiaBan,SoLuong, MaDanhMuc) VALUES(?,?,?,?,?);statement.setString (1, maSach);statement.setString (2, tenSach);
statement.setDouble (3, giaBan);statement.setInt (4, soLuong);
statement.setInt (5, maDanhMuc);int n = statement.executeUpdate (sql);
if (n == 1){System.out.println(Thm sch thnh cng);
}else{
System.out.println(Li);}
connection.close();
. . .
Sdng Transaction
36
123
45
67
89
1011
1213
141516
1718
19
try {String sql1= insert/delete/update . . .String sql2= insert/delete/update . . .
Connection con =DriverManager.getConnection( cs, info);try{
con .setAutoCommit(false);Statement statement1= con.createStatement();
Statement statement2= con.createStatement();statement1.executeUpdate(sql1);
statement2.executeUpdate(sql2);con.commit();
}catch (SQLException ex){con.rollBack();
}finally{con.close();
}
} catch (SQLException ex) {//X l li
}
7/29/2019 JDBC Basic
19/22
11/7/2012
19
Sdng Transaction
37
12
34
56
78
910
1112
131415
1617
1819
String sql1= insert/delete/update . . .String sql2= insert/delete/update . . .
Connection con =DriverManager.getConnection( cs, info);try{
con .setAutoCommit(false);Statement statement1= con.createStatement();
Statement statement2= con.createStatement();statement1.executeUpdate(sql1);
statement2.executeUpdate(sql2);if(iukin commit){
con.commit();}else{
con.rollBack();}
}catch (SQLException ex){
//X l li}finally{
con.close();}
Sdng Transaction
38
12345
67891011121314151617181920
String sql1= insert/delete/update . . .String sql2= insert/delete/update . . .Connection con =DriverManager.getConnection( cs, info);try{
con.setAutoCommit(false);
Statement statement1= con.createStatement();Statement statement2= con.createStatement();
Savepoint save1 = con.setSavepoint();statement1.executeUpdate(sql1);statement2.executeUpdate(sql2);if(iukin commit){
con.commit();}else{
con.rollBack(save1);}
}catch (SQLException ex){//X l li
}finally{con.close();
}
7/29/2019 JDBC Basic
20/22
11/7/2012
20
CallableStatement - X l Store Procedure
39
Store Procedure - MySQL
40
1
23
45
67
89
DELIMITER$$
CREATE PROCEDURE spThemDanhMuc (in tenDanhMuc VARCHAR (45)
)BEGIN
INSERT INTO DANHMUC(TENDANHMUC)VALUES (tenDanhMuc);
SELECT LAST_INSERT_ID();END
1
234
56
78
910
String tenDanhMuc = "C++";
CallableStatement statement =connection.prepareCall("{call spThemDanhMuc(?)}");
statement.setString(1, tenDanhMuc);
statement.execute();ResultSet rs = statement.getResultSet();
if (rs.next()) {int maDanhMuc = rs.getInt(1);
System.out.println(maDanhMuc);}
7/29/2019 JDBC Basic
21/22
11/7/2012
21
Store Procedure - MySQL
41
12
34
56
789
DELIMITER$$CREATE PROCEDURE spThemDanhMuc ( intenDanhMuc VARCHAR (45),
out maDanhMuc int)
BEGININSERT INTO DANHMUC(TENDANHMUC) VALUES (tenDanhMuc);SET maDanhMuc = LAST_INSERT_ID();
END
1
23
45
67
8
String tenDanhMuc = "C++";
CallableStatement statement =connection.prepareCall("{call spThemDanhMuc (?, ?)}");
statement.setString(1, tenDanhMuc);statement.registerOutParameter(2,Types.INTEGER);
statement.execute();int maDanhMuc = statement.getInt(2);
System.out.println(maDanhMuc);
TI LIU THAM KHO
42
7/29/2019 JDBC Basic
22/22
11/7/2012
Ti liu tham kho Nguyn Hong Anh, Tp slide bi ging v video mn
Lp Trnh Java, H KHTN, 2010
http://download.oracle.com/javase/tutorial/jdbc/basics/
, 2011
43
HI V P
44