Giới thiệu về JDBC JDBC Drivers Thiết lập kết nối Database Tạo câu lệnh truy vấn Thực thi câu truy vấn và xử lý kết quả Ví dụ Transaction Nội dung... Viết tắt của Java Dat
Trang 2 Giới thiệu về JDBC
JDBC Drivers
Thiết lập kết nối Database
Tạo câu lệnh truy vấn
Thực thi câu truy vấn và xử lý kết quả
Ví dụ
Transaction
Nội dung
Trang 3 Viết tắt của Java Database Connectivity
JDBC API là thư viện chứa 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.
Các chức năng
• Thiết lập kết nối đến Database
• Tạo các câu lệnh truy vấn SQL
• Thực thi các câu lệnh truy vấn
• Xem và sửa đổi các kết quả truy vấn
3/25
1 Giới thiệu về JDBC
Trang 4 kiến trúc của JDBC gồm 2 tầng:
• tầng 1 là JDBC API: chuyển các câu lệnh
SQL cho bộ quản lý trình điều khiển
JDBC
• tầng 2 là các JDBC Driver thực hiện
nhiệm vụ liên hệ với trình điều khiển của
hệ quản trị cơ sở dữ liệu cụ thể.
Cấu trúc của JDBC
Trang 52 JDBC Driver
chính nhà xây dựng hệ quản trị CSDL hoặc do nhà cung ứng thứ ba cung cấp.
hiện các câu lệnh SQL.
quản trị CSDL khác nhau được Sun cung cấp và cập nhật liên tục tại địa chỉ:
http://industry.java.sun.com/products/jdbc/drivers.
Trang 7Loại 1: JDBC/ODBC
hiện
trong bộ J2SE với tên:
sun.jdbc.odbc.JdbcOdbcDriver
Trang 8Loại 2: Native API Driver
tương ứng với từng hệ CSDL cụ thể.
với hệ CSDL cụ thể kèm với chương trình.
Trang 9Loại 3: JDBC-Net Driver
các hệ CSDL Sau đó chuyển sang lời gọi của hệ CSDL cụ thể bởi 1 chương trình trung gian
truy cập đến nhiều hệ CSDL khác nhau
Trang 10Loại 4: Native Protocol Driver
100% java
Có khả năng giao tiếp trực tiếp với hệ CSDL không cần chuyển đổi
Trang 12 JDBC API cung cấp các interface và class để thao tác dữ liệu
• DriverManager: quản lý các database driver
• Driver: xử lý giao tiếp với database server
• Connection: kết nối database
• Statement: tạo và thực thi các câu lệnh SQL
• ResultSet: lưu trữ và thao tác trên kết quả trả về
• SQLException: xử lý các ngoại lệ trong quá trình thao tác với
database
JDBC API
Trang 13 Bước 1: Thiết lập kết nối Database
Bước 2: Tạo câu lệnh truy vấn
Bước 3: Thực thi câu truy vấn
Bước 4: Xử lý kết quả trả về
Bước 5: Đóng kết nối
13/25
3 Các bước sử dụng JDBC
Trang 14 Nạp các java package: sử dụng câu lệnh import
System.out.println("Error");
}
Bước 1: Thiết lập kết nối Database
Trang 15• Sử dụng DriverManager.registerDriver()
try {
Driver myDriver = new
oracle.jdbc.driver.OracleDriver(); DriverManager.registerDriver( myDriver );
Trang 16 Xác định Database URL
• Được sử dụng để tạo kết nối đến Database
• Có thể chứa server, port, protocol…
Bước 1: Thiết lập kết nối Database
RDBMS JDBC driver name URL format MySQL com.mysql.jdbc.Driver jdbc:mysql://hostname/ databaseName
ORACLE oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@hostname:port
com.microsoft.sqlserver.jdbc.SQL ServerDriver
jdbc:sqlserver://
hostname:portNumber;databaseName
Trang 18 Tạo đối tượng kết nối Connection: sử dụng 1 trong 3 cách
Trang 19Properties info = new Properties( );
info.put( "user", “sa" );
Trang 20Kết nối với tập tin CSDL Access movies.mdb có một bảng tên Movies.
4 Ví dụ
Trang 21Kết nối với Microsoft Access thông qua cầu nối ODBC:
21/25
Ví dụ
Trang 22Nhấn vào nút Add, chọn trình điều khiển CSDL:
Ví dụ
Trang 23Nhập moviesDSN vào ô Data Source Name:
23/25
Ví dụ
Trang 24Nhấn Select và chọn tập tin CSDL cần tạo data source name:
Ví dụ
Trang 25import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestConnection{
public static void main(String args[]) {
Connection connection = null;
try { // load driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
System.out.println("Loading the driver ");
} catch( Exception e ) { //driver,class not exist
e.printStackTrace( );
return; }
25/25
Ví dụ
Trang 27finally {
if( connection != null ) {
try { connection.close( ); } catch( SQLException e ) {
e.printStackTrace( );}
} } }
27/25
Ví dụ
Trang 28 Sử dụng 1 trong 3 đối tượng
• Statement: thực thi câu sql không chứa biến
Statement stmt = conn.createStatement( );
• PreparedStatement: thực thi câu sql chứa biến
Các biến được chỉ định bởi dấu ?
Truyền biến vào câu lệnh bằng phương thức setXXX(index,value) với XXX là kiểu dữ liệu của biến
Trang 29• CallableStatement: để thực thi các stored-procedure
Sử dụng pt Connection.prepareCall() để khởi tạo
Có 3 loại biến
Biến IN: truyền giá trị bằng pt setXXX(index, value)
Biến OUT: lấy giá trị bằng pt getXXX(index)
Biến INOUT: truyền giá trị bằng setXXX(index, value), lấy giá trị bằng getXXX(index)
Ví dụ
CallableStatement cstmt = null;
try { String SQL = "{call getEmpName (?, ?)}";
Trang 30Bước 2: Tạo câu lệnh truy vấn
public MovieDatabase(Connection connection)
Trang 31Bước 2: Tạo câu lệnh truy vấn
ResultSet results = selectAll.executeQuery(sql);
while(results.next()){
int number = results.getInt(1);
String title = results.getString("title");
String category = results.getString(3);
String format = results.getString(4);
Movie movie = new Movie(number, title, category,
format);
System.out.println(movie.toString());
}
Trang 32Bước 2: Tạo câu lệnh truy vấn
Trang 33 Sử dụng 1 trong 3 phương thức
• boolean execute(String SQL): trả lại true nếu kết quả trả về của
câu lệnh truy vấn là ResultSet
• int executeUpdate(String SQL): trả lại số row bị ảnh hưởng, sử
dụng cho Insert, Update, Delete
• ResultSet executeQuery(String SQL): trả lại 1 đối tượng ResultSet,
Trang 34 ResultSet cung cấp các phương thức để xử lý các kết quả trả về từ câu lệnh SQL
ResultSet chứa dữ liệu theo dạng Table
Truy cập các hàng dữ liệu bằng cách di chuyển con trỏ của ResultSet
Ban đầu, con trỏ chỉ hàng đầu tiên
Bước 4: Xử lý kết quả trả về
Trang 35 Các loại ResultSet (ResultSet Types): xét về loại con trỏ và sự phản
ánh thay đổi dữ liệu
Trang 36 Các loại ResultSet (ResultSet Concurrency): xét về chức năng thay đổi
Trang 37 Loại ResultSet được xác định đồng thời tại lúc tạo đối tượng statement
• createStatement(int RSType, int RSConcurrency);
• prepareStatement(String SQL, int RSType, int RSConcurrency);
• prepareCall(String SQL, int RSType, int RSConcurrency);
RSType: chỉ định ResultSet Types RSConcurrency: chỉ định ResultSet Concurrency
37/25
Bước 4: Xử lý kết quả trả về
Trang 38 Ví dụ
Statement stmt = conn.createStatement(
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
• Các phương thức di chuyển con trỏ
• Các phương thức lấy dữ liệu trong ResultSet
• Các phương thức cập nhật dữ liệu
Bước 4: Xử lý kết quả trả về
Trang 39 Các phương thức di chuyển con trỏ
public boolean absolute(int row) throws
về cuối ResultSet và ngược lại public boolean previous() throws
SQLException
di chuyển đến hàng đứng phía trước
public void moveToInsertRow() throws
SQLException
di chyển đến 1 hàng mới để chèn dữ liệu Vị trí hiện tại sẽ được lưu lại public void moveToCurrentRow() throws
SQLException
di chuyển về lại vị trí cũ nếu con trỏ đang chỉ đến vị trí hàng vừa được chen
Trang 40 Các phương thức lấy dữ liệu trong ResultSet
• getXXX(String columnName) throws SQLException
• getXXX(int columnIndex) throws SQLException
XXX: là kiểu tương ứng của dữ liệu columnName: tên của cột trong ResultSet columnIndex: chỉ số của cột trong ResultSet, bắt đầu từ 1
Bước 4: Xử lý kết quả trả về
Trang 41Câu lệnh insert
public void addMovie(Movie movie){
System.out.println(“Adding movie: “ + movie.toString());
try{
Statement addMovie = connection.createStatement();
String sql = “INSERT INTO Movies VALUES(“
Trang 42Câu lệnh insert
Movie [] movies = new Movie[6];
movies[0] = new Movie(1, “Star Wars: A New Hope”,
movies[4] = new Movie(5, “Star Wars: Attack of the
Clones”, “Science Fiction”, “DVD”);
movies[5] = new Movie(6, “Toy Story”, “Children”,
“DVD”);
Trang 44 Các phương thức cập nhật dữ liệu
• Cập nhật dữ liệu trong ResultSet
public void updateXXX(int columnIndex, XXX s) throws SQLException
public void updateXXX(String columnName, XXX s) throws SQLException
• Cập nhật dữ liệu từ ResultSet đến Database
Bước 4: Xử lý kết quả trả về
public void updateRow() Cập nhật các thay đổi của hàng hiện tại trong
ResultSet đến Database public void deleteRow() Xóa hàng hiện tại trong Database
public void refreshRow() Lấy dữ liệu trong Database vào ResultSet
public void cancelRowUpdates() Hủy bỏ các thay đổi dữ liệu vừa được thực hiện
Trang 46 Transaction: là một khối các thao tác cần được thực hiện tương ứng với nhau
Kết nối JDBC mặc định ở chế độ auto-commit: mỗi câu lệnh SQL được hoàn thành riêng lẻ
Một transaction sẽ được bắt đầu khi chấm dứt chế độ auto-commit và kết thúc khi đối tượng kết nối thực hiện phương thức commit()
6 Transaction