Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
148,2 KB
Nội dung
JDBC Căn Bản Nội Dung Giới thiệu JDBC Các kiến trúc ứng dụng sở liệu Kết nối vào sở liệu Thực thi câu lệnh SQL qua JDBC Sử dụng mô hình giao dịch sở liệu Giới Thiệu JDBC JDBC: Java Database Connectivity Một tập API Java để kết nối đến hệ quản trị sở liệu Các interface class chủ yếu JDBC nằm gói java.sql Một vài interface class có chức nâng cao nằm gói javax.sql Kiến Trúc Ứng Dụng Sử Dụng JDBC (1) Kiến trúc lớp Kiến Trúc Ứng Dụng Sử Dụng JDBC (2) Kiến trúc lớp Kết Nối Vào Cơ Sở Dữ Liệu Để kết nối vào sở liệu cần phải cài đặt JDBC drivers Mỗi hệ quản trị sở liệu thường có số JDBC driver riêng Thông tin JDBC driver xem đây: http://developers.sun.com/product/jdbc/drivers Sử Dụng Cầu Nối JDBC-OBDC Có thể kết nối với sở liệu sử dụng cầu nối JDBC-ODBC ODBC – Open Database Connectivity Microsoft xây dựng Sun có cung cấp sẵn cầu nối JDBCODBC Java Development Kit Tên jdbc-odbc driver sun: sun.jdbc.odbc.JbdcOdbcDriver Các Bước Kết Nối Load jdbc driver cần sử dụng Class.forName(“sun.jdbc.odbc.JbdcOdbcDriver”); Tạo kết nối (sử dụng cầu nối JDBC-ODBC) Connection conn=DriverManager.getConnection(“jdbc:odbc:”); DataSourceName tên ODBC data source tạo MS Windows Các jdbc driver khác sử dụng chuỗi kết nối khác nhau. Cần đọc hướng dẫn từ nhà cung cấp để biết thông tin Ví dụ: Kết Nối Với CSDL try{ Class.forName(driver); conn =DriverManager.getConnection(connURL); }catch(ClassNotFoundException e){ e.printStackTrace(); conn = null; }catch(SQLException sqle){ sqle.printStackTrace(); conn = null; } Thực Thi Các Câu Lệnh SQL – Class Statement Sử dụng class Statement để thực thi câu lệnh SQL sở liệu vừa kết nối Statement st = conn.createStatement(); SQLException ném có lỗi trình kết nối đến sở liệu Phương thức execute(String query) Statement dùng để thực thi câu lện SQL Các kiểu ResultSet TYPE_FORWARD_ONLY Con trỏ ResultSet kiểu di chuyển theo hướng từ đầu đến cuối TYPE_SCROLL_INSENSITIVE Con trỏ di chuyển tới lui tương vị trí nó, di chuyển đến vị trí cụ thể, không bị ảnh hướng kết thay đổi nơi khác TYPE_SCROLL_SENSITIVE Con trỏ di chuyển tới lui tương vị trí nó, di chuyển đến vị trí cụ thể, bị ảnh hưởng nểu kết bị thay đổi nơi khác Chế Độ Hoạt Động Đồng Thời Của ResultSet CONCUR_READ_ONLY Xác định chế độ hoạt động đồng thời, kết lưu đối tượng ResultSet không thay đổi CONCUR_UPDATABLE Xác định chế độ hoạt động đồng thời, kết lưu đối tượng ResultSet thay đổi Các Phương Thức Của ResultSet next(): di chuyển trỏ đến dòng kế, trả true có dòng kế tiếp, false đến cuối ResultSet previous(): di chuyển trỏ đến dòng trước first(): di chuyển trỏ đến dòng last(): di chuyển trỏ đến dòng cuối beforeFirst(): di chuyển trỏ đến vị trí trước dòng afterLast(): di chuyển trỏ đến sau dòng cuối relative(int rows): di chuyển trỏ tướng vị trí với số dòng rows absolute(int row): di chuyển trỏ đến dòng thứ row Lấy Dữ Liệu Từ ResultSet object Dùng phương thức getXXX(String colname) XXX kiểu liệu trả colname tên cột cần lấy liệu Ví dụ: String name = rs.getString("NAME"); double val = rs.getDouble("PRICE"); Chỉnh Sửa Dữ Liệu Sử Dụng ResultSet Dữ liệu bảng CSDL chỉnh sửa cách sử dụng câu lệnh SQL UPDATE Ta chỉnh sửa liệu hàng bảng từ ResultSet Để làm điều này, ResultSet phải đặt chế độ CONCUR_UPDATABLE Sử dụng phương thức updateXXX() để chỉnh sửa liệu ResultSet XXX kiểu liệu cột cần sửa 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(); } } } Sử Dụng Lớp 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 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(); } } } 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 dich (transaction) Cách Đặt Giao Dich 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); 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(); } } } 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 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"); Thông tin Pen prest.setDouble(2, 0.5); prest.executeUpdate(); không lưu vào prest.close(); CSDL conn.rollback(); conn.commit(); conn.setAutoCommit(true); }catch(SQLException e){ e.printStackTrace(); } } } ResultSetMetaData Để lấy thông tin (Metadata) ResultSet 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 [...]...T o B ng Qua JDBC public void createTable(){ String sqlQuery = "CREATE TABLE PRICELIST(NAME VARCHAR(20), PRICE NUMBER);"; if (conn != null){ try{ Statement st = conn.createStatement(); st.execute(sqlQuery); st.close(); }catch(SQLException e){ e.printStackTrace(); } } } Nh p D Li u Qua JDBC S d ng phương th c executeUpdate() c a Statement đ c p nh t d li u qua JDBC executeUpdate() tr v... "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 khi m i câu l nh SQL đư c th c thi qua JDBC, d li u s đư c c p nh t ngay vào CSDL Có nh ng trư ng h p, ta mu n d li u ch đư c c p nh t vào CSDL sau khi m t s câu l nh SQL đư c th c hi n Ví d : đ i v i trang ng d ng bán hàng qua m ng, đ CSDL... prest.setString(1, "Pen"); prest.setDouble(2, 0.5); prest.executeUpdate(); prest.close(); conn.commit(); conn.setAutoCommit(true); }catch(SQLException e){ e.printStackTrace(); } } } H y M t Giao D ch Trong quá trình th c hi n m t giao d ch, n u có sai sót nào x y ra, ta có th h y giao d ch đang đư c th c hi n n a ch ng b ng cách s d ng rollback conn.rollback() s hũy d li u đ n th i đi m nó đư c commit g n nh . JDBC Căn Bản Nội Dung Giới thiệu JDBC Các kiến trúc ứng dụng trên cơ sở dữ liệu Kết nối vào cơ sở dữ liệu Thực thi các câu lệnh SQL qua JDBC Sử dụng mô hình giao. cơ sở dữ liệu thường có một số JDBC driver riêng Thông tin về các JDBC driver có thể xem ở đây: http://developers.sun.com/product /jdbc/ drivers Sử Dụng Cầu Nối JDBC- OBDC Có thể kết nối với. cầu nối JDBC- ODBC ODBC – Open Database Connectivity do Microsoft xây dựng Sun có cung cấp sẵn một cầu nối JDBC- ODBC trong Java Development Kit Tên của jdbc- odbc driver của sun: sun .jdbc. odbc.JbdcOdbcDriver Các