1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Nhập môn java - Chương 9: Kết nối cơ sở dữ liệu

47 19 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 47
Dung lượng 670,5 KB

Nội dung

Chương 9 trang bị cho người học những kiến thức về kết nối cơ sở dữ liệu. Nội dung cơ bản trong chương này gồm: Các trình điều khiển JDBC, cơ chế hoạt động với JDBC, cầu nối JDBC - ODBC (bridge), tạo nguồn dữ liệu ODBC, trình điều khiển thuần túy Java,...và một số nội dung khác. Mời các bạn cùng tham khảo để nắm bắt các nội dung chi tiết.

CHƯƠNG CHƯƠNG 99 KẾT KẾT NỐI NỐI CƠ CƠ SỞ SỞ DỮ DỮ LIỆU LIỆU 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: http://industry.java.sun.com/products/jdbc/drivers CÁC TRÌNH ĐIỀU KHIỂN JDBC • 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 • 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ả • 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,… CÁC TRÌNH ĐIỀU KHIỂN JDBC CÁC TRÌNH ĐIỀU KHIỂN JDBC • Các trình điều khiển có nhiệm vụ 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 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 cung cấp kèm theo J2SE với tên: sun.jdbc.odbc.JdbcOdbcDriver Aplication Aplication JDBC JDBCDriver Driver Client Disk Disk ODBC ODBCDriver Driver Network Interface Network Interface Database Database Server TẠO NGUỒN DỮ LIỆU ODBC • Trên Window, vào Start -> Control Panel -> Administrative Tools -> Data Sources (ODBC) TẠO NGUỒN DỮ LIỆU ODBC • Đặ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 10 VÍ DỤ CHỈNH SỬA DỮ LIỆU 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(); } } } 33 SỬ DỤNG PreparedStatement • 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 34 VÍ DỤ PreparedStatement 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(); } } } 35 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 CÀI ĐẶT GIAO DỊCH • 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); 37 VÍ DỤ Transaction 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 HỦY MỘT GIAO DỊCH • 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 39 VÍ DỤ 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 ResultSetMetaData • 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 41 VÍ DỤ ResultSetMetaData 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

Ngày đăng: 11/05/2021, 02:50

TỪ KHÓA LIÊN QUAN

w