Nội dung của chương 06 Khái niệm JDBC Các bước truy cập cơ sở dữ liệu với JDBC – Nạp database drivers – Tạo kết nối sử dụng đối tượng Connection – Tạo đối tượng Statement để thực thi
Trang 2Nội dung của chương 06
Khái niệm JDBC
Các bước truy cập cơ sở dữ liệu với JDBC
– Nạp database drivers
– Tạo kết nối sử dụng đối tượng Connection
– Tạo đối tượng Statement để thực thi các lệnh sql.
Trang 3Tổng quan
JDBC cung cấp tập các lớp và interface cho phép chương trình Java có thể “nói chuyện” được với hệ CSDL
Tập các lớp của JDBC
có thể làm việc được với
mọi hệ csdl
Trang 5Ví dụ
CSDL có trình điều khiển ODBC cài đặt sẵn
như ORACLE, SQL Server, MS Access
tạo chỉ mục cho ứng dụng trên nền hệ quản trị CSDL chuẩn trên (ví dụ: MS Access)
Trang 6Tạo đối tượng ODBC
tương ứng (ví dụ: MS Access)
Trang 7Tạo đối tượng ODBC (tt)
tượng ODBC của CSDL (ví dụ: ATM)
Trang 8Nạp trình điều khiển và tạo kết nối
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:ATM";
Connection con=DriverManager.getConnection(url); Statement stmt = con.createStatement();
Trang 9phần này là tên của đối tượng ODBC
Có thể có tên truy cập và mật khẩu
Với Oracle, url = “jdbc:oracle:oci8:@MyDB”
Trang 10 Nhận các yêu cầu từ client, chuyển nó nó vào
định dạng mà csdl có thể hiểu được và thể hiện trong csdl
Nhận các phản hồi, chuyển nó ngược lại định
dạng dữ liệu java và thể hiện trong ứng dụng
Trang 11If you have a driver from another vendor, then find out the
class name of that driver and load it instead.
Trang 13Databas e
Network Interface
Server
Aplication JDBC Driver ODBC Driver
Network Interface
Disk
Client
Trang 14Databas e
Network Interface
Server
Aplication JDBC Driver
Native Database Library
Network Interface
Disk
Client
Trang 15Loại 3: Open Protocol-Net
Network Interface Server
Native Database Library
Trang 16Loại 4: Proprietary-Protocol Net
Trang 18Đối tượng Statement
Đối tượng Connection chứa liên kết trực tiếp đến
Trang 20 Phương thức executeUpdate()
– Nhận các câu lệnh sql dạng cập nhật
– Trả lại số nguyên biểu thị số hàng được cập nhật.
– UPDATE, INSERT, or DELETE
Phương thức execute()
– Được áp dụng cho trường hợp không rõ loại sql nào được thực hiện, trả về kiểu boolean, true nếu đó là executeQuery() -> getResultSet() để lấy kết quả – Được áp dụng cho trường hợp câu lệnh sql tạo ra tự động bởi chương trình.
Các phương thức thực thi (tt)
Trang 21 Chứa một hoặc nhiều hàng dữ liệu từ việc thực hiện câu lệnh truy vấn.
Có thể lấy dữ liệu từng hàng dữ liệu một trong ResultSet
Sử dụng phương thức next() để di chuyển đến hàng dữ liệu tiếp theo trong ResultSet
Hàm next() trả lại true chỉ rằng hàng chứa dữ liệu, trả lại false hàng cuối không chứa dữ liệu
Thực hiện
while (rs.next()){
// examine a row from the results
}
Trang 22 String isbn = rs.getString(1); // Column thứ 1
float price = rs.getDouble(“Price”); // Column có tên “Price”
Trang 23Các phương thức getXXX()
x: phương
thức getXXX
có thể dùng được để nhận kiểu giá trị này
X: nên dùng phương thức getXXX cho kiểu giá trị này
Trang 25Đối tượng PreparedStatement
Được sử dụng thay cho Statement để thực hiện một câu lệnh SQL trên CSDL nhiều lần
Câu lệnh SQL sẽ được biên dịch trước → rút ngắn thời gian
Trang 27Phương thức rollback
Phương thức rollback của đối tượng kết nối được
sử dụng để loại bỏ mọi tác dụng của một
transaction chưa thực hiện commit
Cần thực hiện rollback ngay khi nhận được ngoại
lệ SQLException để bỏ qua mọi tác dụng của
transaction
Thực hiện rollback:
conn.rollback();
Trang 28ResultSet cuộn được
ResultSet là tập các records nhận được từ việc
thực hiện một lệnh SQL trên một CSDL
ResultSet cuộn được là một ResultSet cho phép người dùng duyệt các records theo 2 chiều, từ
BOF đến EOF hay ngược lại
Tạo một ResultSet cuộn được (và cập nhật được):
Statement stmt =
conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(“select * from SV”);
Trang 29Định vị trong ResultSet
void beforeFirst() throws SQLException: di chuyển đến
vị trí đầu của tập ResultSet rs, không chứa record
(boolean isBeforeFirst() throws SQLException).
void afterLast() throws SQLException: di chuyển đến vị trí cuối của tập ResultSet rs, không chứa record
(boolean isAfterLast() throws SQLException).
boolean first() throws SQLException: di chuyển đến vị trí record đầu tiên của tập ResultSet rs, false nếu rs là
rỗng (boolean isFirst() throws SQLException).
boolean last() throws SQLException: di chuyển đến vị trí record cuối của tập ResultSet rs, false nếu rs là rỗng (boolean isLast() throws SQLException).
Trang 30từ vị trí last (int getRow() throws SQLException).
boolean relative(int rows) throws SQLException : di chuyển đến record có vị trí tương đối là rows so với vị trí hiện hành của tập ResultSet rs, nếu rows dương thì chuyển về hướng cuối tập rs, và ngược lại.
Trang 31Cập nhật CSDL sử dụng ResultSet
rs.absolute(3); //Nhảy đến hàng thứ 3 kể từ đầu rs
rs.updateFloat(“Toan”,10.5); //Đổi cột Toan thành 10.5
rs.cancelRowUpdates(); //Bỏ qua các lệnh thay đổi trên
rs.updateFloat(“Toan”,8.5); //Đổi cột Toan thành 8.5
rs.updateRow(); //Xác nhận sự thay đổi
Trang 33Chương trình mẫu 2
import java.sql.*;
public class CreateTable {
public static void main(String[] args) {
String url = "jdbc:odbc:vd1";Connection conn;Statement stmt;
try {
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (java.lang.ClassNotFoundException e) {}
try {
conn = DriverManager.getConnection(url); stmt = conn.createStatement();
stmt.executeUpdate("INSERT INTO COFFEES VALUES ('ABC','101',6.99,0,0)"); stmt.close(); conn.close();
} catch (java.sql.SQLException e) {
System.err.print(“SQLException:");
System.err.println(e.getMessage());
}}}
Trang 34Ví dụ: Chương trình cập nhật dữ liệu
Tạo một bảng dữ liệu bằng MS Access, chứa
mã sinh viên, họ tên, điểm thi các môn Toán,
Lý, Hoá Sau đó viết chương trình thêm, xoá bản ghi, sửa số liệu, tìm kiếm bản ghi theo mã sinh viên