Bài giảng Nhập môn lập trình Java - Bài 9: Kết nối cơ sở dữ liệu trình bày các nội dung: Các trình điều khiển JDBC, cơ chế hoạt động với JDBC, cầu nối JDBC - OBDC, tạo nguồn dữ liệu OBDC, trình điều khiển thuần túy java, các bước lập trình truy xuất CSDL,... Mời các bạn cùng tham khảo.
TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM NHẬP MÔN JAVA BÀI KẾT NỐI CƠ SỞ DỮ LIỆU GIẢNG VIÊN: VÕ TẤN DŨNG CÁC TRÌNH ĐIỀU KHIỂN JDBC • Hiện có nhiều Hệ quản trị CSDL (DBMS) khác SQL Sever, MySQL, Oracle, MS Access, FoxPro,… • Để truy cập DBMS khác từ chương trình viết Java ta cần có JDBC driver tương ứng • Hãng Sun đưa loại JDBC driver • Tham khảo tại: GV: Võ Tấn Dũng http://industry.java.sun.com/products/jdbc/drivers CÁC TRÌNH ĐIỀU KHIỂN JDBC GV: Võ Tấn Dũng • Tương tác JDBC liệt kê sau đây: - Mở kết nối đến CSDL (Open connection) - Thực thi câu lệnh SQL (Execute SQL) - Xử lý liệu (Process result) - Đóng kết nối (Close conection) CÁC TRÌNH ĐIỀU KHIỂN JDBC • Kiến trúc JDBC gồm hai tầng: tầng JDBC API, có nhiệm vụ chuyển câu lệnh SQL cho quản lý trình điều khiển JDBC; tầng thứ hai JDBC Driver API, thực nhiệm vụ liên hệ với trình điều khiển hệ quản trị CSDL cụ thể SQL-Server, MS-Access, MySQL, IBM-DB2, Oracle,… GV: Võ Tấn Dũng • Sử dụng JDBC API, chương trình ứng dụng thiết lập kết nối đến hệ quản trị CSDL, giao tiếp với CSDL, thực thi câu lệnh thao tác, truy vấn liệu nhận kết trả GV: Võ Tấn Dũng CÁC TRÌNH ĐIỀU KHIỂN JDBC CÁC TRÌNH ĐIỀU KHIỂN JDBC GV: Võ Tấn Dũng • Các trình điều khiển có nhiệm vụ yêu cầu hệ quản trị CSDL thực câu lệnh SQL Các trình điều khiển JDBC đoạn chương trình nhà sản xuất hệ quản CSDL cung cấp nhà cung cấp thứ ba đưa Các trình điều khiển JDBC chia làm bốn loại: - Cầu nối JDBC-ODBC (Bridge) - Trình điều khiển túy Java (Native-API) - Trình điều khiển JDBC-Net, Pure Java - Trình điều khiển Native-Protocol, Pure Java GV: Võ Tấn Dũng CƠ CHẾ HOẠT ĐỘNG VỚI JDBC CẦU NỐI JDBC - ODBC (Bridge) Cầu nối JDBC-ODBC (Bridge): Trình điều khiển loại kết nối với hệ quản trị CSDL thông qua cầu nối ODBC Trình điều khiển loại ln cung cấp kèm theo J2SE với tên: sun.jdbc.odbc.JdbcOdbcDriver Aplication JDBC Driver Client Disk ODBC Driver Network Interface Network Interface Database Server GV: Võ Tấn Dũng • TẠO NGUỒN DỮ LIỆU ODBC GV: Võ Tấn Dũng • Trên Window, vào Start -> Control Panel -> Administrative Tools -> Data Sources (ODBC) TẠO NGUỒN DỮ LIỆU ODBC 10 GV: Võ Tấn Dũng • Đặt tên nguồn liệu mục “Data Source Name” (sẽ sử dụng chuỗi kết nối) • Nhấp “Select” để chọn đường dẫn đến file sơ liệu VÍ DỤ CHỈNH SỬA DỮ LIỆU 33 GV: Võ Tấn Dũng public void updateTable(){ String selectQuery = "SELECT * FROM PRICELIST;"; if (conn != null){ try{ Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = st.executeQuery(selectQuery); rs.next(); rs.updateDouble("PRICE", 1.5); rs.updateRow(); st.close(); }catch(SQLException e){ e.printStackTrace(); } } } SỬ DỤNG PreparedStatement 34 GV: Võ Tấn Dũng • Có trường hợp ta cần thực nhiều câu lệnh SQL có cấu trúc tương tự nhau, có giá trị thay đổi • PreparedStatement sử dụng để soạn trước câu lệnh có sẵn cấu trúc cần thiết • Giá trị đưa vào đối số câu lệnh thực thi VÍ DỤ PreparedStatement 35 GV: Võ Tấn Dũng public void prepareStatement(){ String insertQuery = "INSERT INTO PRICELIST VALUES(?,?);"; if (conn != null){ try{ PreparedStatement prest = conn.prepareStatement(insertQuery); prest.setString(1, "Biscuit"); prest.setDouble(2, 1.2); prest.executeUpdate(); prest.setString(1, "Pen"); prest.setDouble(2, 0.5); prest.executeUpdate(); prest.close(); }catch(SQLException e){ e.printStackTrace(); } } } SỬ DỤNG Transaction (Giao Dịch) Mặc định, sau câu lệnh SQL thực thi qua JDBC, liệu cập nhật vào CSDL • Có trường hợp, ta muốn liệu cập nhật vào CSDL sau số câu lệnh SQL thực • Ví dụ: trang ứng dụng bán hàng qua mạng, để CSDL thống nhất, ta muốn lưu liệu liên quan tới đơn đặt hàng lúc • Một nhóm câu lệnh gọi giao dịch (transaction) 36 GV: Võ Tấn Dũng • CÀI ĐẶT GIAO DỊCH 37 GV: Võ Tấn Dũng • Trước hết, phải không dùng chế độ COMMIT tự động từ Connection object • conn.setAutoCommit(false); • Thực câu lệnh giao dịch • Thực COMMIT (lưu) CSDL • conn.commit(); • Nếu không cần dùng chế độ giao dịch nữa, ta nên trả lại chế độ COMMIT tự động • conn.setAutoCommit(true); public void transaction(){ String insertQuery = "INSERT INTO PRICELIST VALUES(?,?);"; if (conn != null){ try{ conn.setAutoCommit(false); PreparedStatement prest = conn.prepareStatement(insertQuery); prest.setString(1, "Biscuit"); prest.setDouble(2, 1.2); prest.executeUpdate(); prest.setString(1, "Pen"); prest.setDouble(2, 0.5); prest.executeUpdate(); prest.close(); conn.commit(); conn.setAutoCommit(true); }catch(SQLException e){ e.printStackTrace(); } } } 38 GV: Võ Tấn Dũng VÍ DỤ Transaction HỦY MỘT GIAO DỊCH 39 GV: Võ Tấn Dũng • Trong trình thực giao dịch, có sai sót xảy ra, ta hủy giao dịch thực nửa chừng cách sử dụng rollback • conn.rollback() hủy liệu đến thời điểm commit gần • Tùy thuộc vào hệ quản trị CSDL mà cách rollback khác • Dữ liệu sau commit không hủy rollback public void rollbackTransaction(){ String insertQuery = "INSERT INTO PRICELIST VALUES(?,?);"; if (conn != null){ try{ conn.setAutoCommit(false); PreparedStatement prest = conn.prepareStatement(insertQuery); prest.setString(1, "Biscuit"); prest.setDouble(2, 1.2); prest.executeUpdate(); conn.commit(); prest.setString(1, "Pen"); prest.setDouble(2, 0.5); prest.executeUpdate(); prest.close(); conn.rollback(); conn.commit(); conn.setAutoCommit(true); }catch(SQLException e){e.printStackTrace();} } } 40 GV: Võ Tấn Dũng VÍ DỤ rollback ResultSetMetaData 41 GV: Võ Tấn Dũng • ResultSetMetaData cung cấp thông tin cấu trúc cụ thể ResultSet, bao gồm số cột, tên giá trị chúng public void showMetadata(){ String selectQuery = "SELECT * FROM PRICELIST;"; if (conn != null){ try{ Statement st = conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = st.executeQuery(selectQuery); ResultSetMetaData meta = rs.getMetaData(); int iColumnCount = meta.getColumnCount(); for (int i =1 ; i Data Sources (ODBC) TẠO NGUỒN DỮ LIỆU ODBC 10 GV: Võ Tấn Dũng • Đặt... điều khiển JDBC-Net, Pure Java - Trình điều khiển Native-Protocol, Pure Java 7 GV: Võ Tấn Dũng CƠ CHẾ HOẠT ĐỘNG VỚI JDBC CẦU NỐI JDBC - ODBC (Bridge) Cầu nối JDBC-ODBC (Bridge): Trình điều khiển... kết trả 5 GV: Võ Tấn Dũng CÁC TRÌNH ĐIỀU KHIỂN JDBC CÁC TRÌNH ĐIỀU KHIỂN JDBC GV: Võ Tấn Dũng • Các trình điều khiển có nhiệm vụ yêu cầu hệ quản trị CSDL thực câu lệnh SQL Các trình điều khiển