Lập trình mạng - Chương 6: Phát triển ứng dụng web java

Dữ liệu của một bảng trong CSDL có thể được chỉnh sửa bằng cách sử dụng câu lệnh SQL UPDATE • Ta cũng có thể chỉnh sửa dữ liệu trên các hàng của một bảng từ ResultSet • Để làm được điều này, ResultSet phải được đặt ở chế độ CONCUR_UPDATABLE • Sử dụng các phương thức updateXXX() để chỉnh sửa dữ liệu trên ResultSet • XXX là kiểu dữ liệu của cột cần được sửa

pdf87 trang | Chia sẻ: nguyenlam99 | Lượt xem: 871 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Lập trình mạng - Chương 6: Phát triển ứng dụng web java, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 6: Phát Triển Ứng Dụng Web Java GIẢNG VIÊN : THS . NGUYỄN MINH THÀNH EMAIL : THANHNM@ITC.EDU.VN Nội Dung 1. Tổng quan về ứng dụng Web 2. JSP 3. Servlet 4. Session 5. Database 2 Tổng quan về ứng dụng Web  Ứng dụng web (Web application) là một sự mở rộng của ứng dụng client/server. Tuy nhiên, ứng dụng này thường chỉ lập trình phía Server. Ứng dụng web bao gồm 2 loại :  Ứng dụng hướng theo sự thể hiện : tạo ra các trang web trình bày thông tin và cho phép người dùng tương tác.  Ứng dụng hướng theo dịch vụ : cung cấp các dịch vụ cho các ứng dụng khác sử dụng. 3 Tổng quan về ứng dụng Web (tt) Các thành phần của một ứng dụng web bao gồm :  Các trang JSP (Java Server Page)  Java Servlets (các lớp nhận,xử lý yêu cầu và đáp trả)  Các dịch vụ Web  Các trang web với kỹ thuật Server faces. 4 Tổng quan về ứng dụng Web (tt)  Mô hình hoạt động 5 Tổng quan về ứng dụng Web (tt) 6  Các thành phần của ứng dụng Web được chứa trong một trình chứa web (web container)  Trình chứa web cung cấp chức năng  Tiếp nhận, điều phối và thực thi các yêu cầu từ client  Bảo mật  Truy xuất đồng thời  Quản lý chu kỳ sống của ứng dụng Trình chứa web cho phép các thành phần web truy cập đến các dịch vụ của Java  Naming, Transitions, Email. Tổng quan về ứng dụng Web (tt)  Kiến trúc của J2EE và Web Container 7 JSP (Java Server Pages) JSP (Java Server Pages) JSP (Java Server Pages) là mô hình các trang của một website được lưu trữ ở phía Server và cho phép client truy cập đến thông qua mạng JSP hướng đến một ứng dụng web dựa trên trình diễn dữ liệu. Các trang JSP cho phép chèn các thẻ HTML để thiết kế giao diện cho trang web, nhúng các đoạn mã Java để thực thi việc xử lý dữ liệu. Các trang JSP khi được yêu cầu sẽ được Java chuyển thành các Servlet để thực thi như một class. 9 JSP (Java Server Pages) (tt) Các trúc một trang JSP A simple date The time on the server is <%= new java.util.Date() %>  Server sẽ xử lý các thành phần Java trước rồi kết hợp với các mã HTML để trình bày lên Web Browser 10 Cơ chế làm việc JSP 11 JSP (Java Server Pages) Ví dụ về một trang JSP 12 JSP (Java Server Pages) <!--File jsp001.jsp 02/13/2010 --> My First JSP Page Hello, JSP World! Isn't this fun Kết qua sinh ratại Web Browser: My First JSP Page Hello, JSP World! 0 1 2 3 4 5 6 7 8 9 10 Isn't this fun Ví dụ về một trang JSP 13 JSP (Java Server Pages) <!--File jsp001.jsp 02/13/2010 --> My First JSP Page Hello, JSP World! Isn't this fun Kết qua sinh ratại Web Browser: My First JSP Page Hello, JSP World! 0 1 2 3 4 5 6 7 8 9 10 Isn't this fun Comments – tạo ghi chú Trang JSP chứa hai loại comments là: • Hidden comment(hay còn gọi là JSP comment). • Output comment(hay còn gọi là HTMLcomment). ] --> Output comments được xuất vào HTML file để gửi đến client. Hidden comment chỉ hiển thị trong source code của trang JSP mà không xuất vào HTML file để gửi đến client. Hidden comment là ẩn đối với HTML file. 14 JSP (Java Server Pages) DECLARATIONS (các khaibáo) Declaration được dùng để khai báo các biến (variable) các phương thức (method) được dùng sau đó trong các JSP source file. Cú pháp declaration (chú ý dấu chấm than): Vídụ: Tầm vực (Scope): • Một declaration có tầm vực trong một trang (page scope). Có nghĩa là một khai báo (declaration) biến hay hàm trong một trang sẽ được sử dụng hợp lệ bởi các scriptlets, expressions và các declarations khác trong cùng một JSP. 15 JSP (Java Server Pages) EXPRESSIONS (các biểu thức) Cú pháp cho một tag (thẻ) để khai báo một biểu thức như sau (chú ý dấu bằng theo sau dấu%): Biểu thức chứa trong thẻ sẽ được tính toán, sau đó kết quả được chuyển sang chuỗi (String) để chèn vào file HTML với vị trí tương ứng của nó trong JSP. 16 JSP (Java Server Pages) 17 Ví dụ !--File jsp003.jsp 02/13/2010 Illustrates declarations and expressions. end comment --> Some JSP expression follow a = b = a/b = The date is JSP (Java Server Pages) Some JSP expression follow a = 100 b = 2 a/b = 50 The date is Sat Feb 13 12:25:16 ICT 2010 SCRIPTLET (Mẩu kịch bản)  SCRIPTLET là một đoạn mã Java được nhúng vào trong các thẻ HTML. Thẻ chèn SCRIPTLET : Ví dụ    18 JSP (Java Server Pages) DIRECTIVE (Chỉ hướng)  Phần này trình bày hai loại Directive: • Include Directive. • Page Directive.  Cú pháp chung :  Nếu có nhiều thuộc tính <%@ directive attribute1="value1" attribute2="value2" ... attributeN="valueN" %> 19 JSP (Java Server Pages) INCLUDE DIRECTIVE  Được dùng để chèn một file vào trong một trang JSP khi trang JSP được biên dịch. File được chèn vào trang JSP được gọi là included file. Included file có thể là: • JSP file. •HTMLfile. •Textfile. •File được viết code bằng ngôn ngữ Java.  Included file không có chứa các thẻ như, , , hoặc 20 JSP (Java Server Pages) Vídụ: PAGE DIRECTIVE  Được dùng để định nghĩa các thuộc tính áp dụng cho cả một trang JSP  Cú pháp đơn giản:  Ta có thể sử dụng page directive nhiều lần để thiết lập giá trị cho các thuộc tính trong một JSP page. Nhưng nếu dùng cho thuộc tính import thì chỉ được sử dụng không quá một lần. 21 JSP (Java Server Pages) PAGE DIRECTIVE Cú pháp đầy đủ của Page Directive: <%@ page [ language="java" ] [ extends="package.class" ] [ import= "{ package.class| package.*}, ..." ] [ session="true|false" ] [ buffer="none|8kb|sizekb" ] [ autoFlush="true|false" ] [ isThreadSafe="true|false" ] [ info="text" ] [ errorPage="relativeURL" ] [ contentType="mimeType[ ;charset=characterSet]" | "text/html ; charset=ISO-8859-1"] [ isErrorPage="true|false" ] % 22 JSP (Java Server Pages) PAGE DIRECTIVE 23 JSP (Java Server Pages) Vídụ: <!--File jsp006.jsp 02/16/2010 Illustrates the JSP Page Directive. --> .. Đối Tượng Ẩn Trong Java có chứa sẵn một số đối tượng để thuận tiện cho việc lập trình Web. Các đối tượng này được gọi là đối đối ẩn hay đối tượng được định nghĩa trước(predefined objects). Các đối tượng đó là: • request • response •out •session • application •config • pageContext • page 24 JSP (Java Server Pages) Đối tượng Request Dùng để chứa những yêu cầu từ phía máy khách. Là phần tử của lớp con của javax.servlet.servletRequest Có các phương thức hay sử dụng là: • getParameterNames() • getParameter() • getParameterValues(). 25 JSP (Java Server Pages) 26 Đối tượng Request – Ví dụ JSP: Scriptlets2 " > Example Scriptlet: Conditionally sets background color You did not supply a color, I used white. Here is the color you requested. JSP (Java Server Pages) Đối tượng Out Dùng để xuất các thông tin ra màn hình của trình duyệt. Thay vì với màn hình ở chế độ console, Java sử dụng đối tượng out của lớp System. Đây là đối tượng của lớp javax.servlet.jsp.JspWriter. Các hàm: •clear() • clearBuffer() •flush() • getBuffer() • getRemaining() • Println(String) 27 JSP (Java Server Pages) Đối tượng Out – Ví dụ HTML> JSP Expressions: Predefined Objects Using Predefined Objects Your Hostname: Your Session ID: The value of INFO parameter: 28 JSP (Java Server Pages) Đối tượng Out – Ví dụ HTML> JSP Expressions: Predefined Objects Using Predefined Objects Your Hostname: Your Session ID: The value of INFO parameter: 29 JSP (Java Server Pages) SERVLET SERVLET - Các trang JSP được viết code chung với các mã HTML nên khó quản lý code, ngoài ra nó còn bảo mật kém. - Servlet là các lớp Java, các lớp này có thể tạo ra các mã HTML nhờ vào các đoạn code java. Các Servlet sẽ được biên dịch sau khi hoàn tất vì vậy khả năng bảo mật cao. SERVLET 31 SERVLET  Servlet tương tác với web client theo mô hình request và response dựa theo giao thức HTTP. Một số Servlet Container cũng hỗ trợ cả giao thức HTTPS (HTTP over SSL) dành cho các giao tác có tính bảo mật. SERVLET 32 Luồng xử lý Servlet 1. Client yêu cầu một servlet, tên của servlet là một phần của URL (vd: 2. Web server nhận yêu cầu (request) và gửi nó tới servlet engine, là nơi mà quản lý và tạo ra các thể hiện của servlet. 3. Servlet engine sẽ gọi phương thức service (hoặc doPost, doGet) của servlet để xử lý yêu cầu. 4. Servlet sẽ tiếp nhận yêu cầu cùng với các tham số, tài nguyên khác, sau đó xử lý và tạo ra một kết quả trả lời tương ứng (response) và chuyển kết quả cho Web server. 5. Web server sẽ gửi trả kết quả này (response) cho client (Web Browser). SERVLET 33 Ví dụ Servlet đơn giản /HelloWorldServlet.java import javax.servlet.*; import java.io.*; public class helloWorldServletextends GenericServlet{ public void service(ServletRequestrequest, ServletResponse response) throws IOException { response.setContentType(“text/html”); PrintWriterout=response.getWriter(); out.println(“”); out.println(“”); out.println(“Hello World Servlet!”); out.println(“”); out.println(“”); } } SERVLET 34 Chu trình sống của Servlet Chu trình sống của một Servlet bắt đầu khi nó được hệ thống triệu gọi (gọi nạp vào bộ nhớ) cho đến khi nó bị loại khỏi trình chủ Web server. Trải qua các giai đoạn sau:  ™Nạp servlet.  ™Khởitạoservlet.  ™Thựcthi servlet.  ™Dọndẹpservlet. SERVLET 35 Chu trình sống của Servlet (tt) Giai đoạn Nạp servlet: •Một servlet có thể được nạp vào bộ nhớ ở ba thời điểm: khi server khởi động, khi người quản trị yêu cầu, khi servlet được triệu gọi từ máy client. •Yêu cầu Server nạp servlet trước sẽ khiến trình khách có thể gọi servlet ngay mà không phải mất công chờ. • Để nạp servlet thì trình chứa Web phải biết tên lớp của servlet. Tên của một servlet có thể trùng với tên lớp của servlet hoặc tên mà ta đăng ký với trình chủ trong quá trình đăng ký và ánh xạ. SERVLET 36 Chu trình sống của Servlet (tt) Giai đoạn Khởi tạo servlet: • Khi có một yêu cầu gọi servlet, trình chứa Web server sẽ xem servlet được nạp vào bộ nhớ hay chưa. Khi servlet đã được nạp thì server chuyển sang giai đoạn khởi tạo servlet. •Trình chứa web server khởi tạo servlet bằng cách gọi đến phương thức init() được cài đặt trong servlet. SERVLET 37 Chu trình sống của Servlet (tt) Giai đoạn thực thi Servlet: • Khi servlet được gọi qua các URL hay từ các trang HTML hoặc trang JSP khác thì Web server chính thức gọi servlet thực thi thông qua các phương thức doGet(), doPost() hoặc service(). • doGet(): được gọi khi ta gọi trực tiếp servlet từ một URL. • doPost(): được gọi khi ta gọi servlet thông qua thao tác post của thẻ. SERVLET 38 Chu trình sống của Servlet (tt) Giai đoạn dọn dẹp Servlet • Khi thực hiện dọn dẹp servlet, Web server gọi đến phương thức destroy() của servlet. • Đây là cơ hội để Servlet thực hiện các thao tác cần thiết như dọn dẹp bộ nhớ, lưu trữ dữ liệu xuống đĩa, đóng các kết nối. •Mặc dù Java có thể tự động thu gom rác trong bộ nhớ nhưng nếu ta cấp phát cho servlet một khối lượng lớn bộ nhớ thì ta nên giải phóng chúng khi gọi phương thức destroy() này. SERVLET 39 Viết Servlet •Servlet API có hai package cần thiết: - javax.servlet - javax.servlet.http •Một servlet có thể kế thừa từ hai lớp: •javax.servlet.GenericServlet hoặc •javax.servlet.http.HttpServlet • Trong môi trường web, giao thức HTTP được sử dụng giữa Web client và Web server. Vì vậy servlet thường được kế thừa từ lớp javax.servle.http.HttpServlet, sau đó viết chồng hàm các phương thức cần thiết để phục vụ yêu cầu từ client. SERVLET 40 Viết Servlet Hàm Init() • Được gọi khi Web server nạp servlet. • Để khởi tạo biến môi trường, các biến toàn cục, các giá trị ban đầu. •Tạo sẵn các kết nối socket, các kết nốiCSDL, nạp các thư viện cần thiết,vv •Phương thức init() chỉ được gọi một lần khi Web server nạp servlet. SERVLET 41 Viết Servlet Hàm Init() • Ví dụ public class ShoppingCartDB extends GenericServlet { String DBDriver =“sun.jdbc.odbc.JdbcOdbcDriver”; String strConn =“jdbc:odbc:bookstore”; Connetion con; public void init() { Class.forName(DBDriver).newInstance(); conn =DriverManager.getConnection(strConn); } } SERVLET 42 Viết Servlet Hàm Service() : • Phương thức này được xem là trung tâm xử lý của servlet mà ta cài đặt. • Bên trong phương thức service có hai đối tượng tham số: - HttpServletRequest: biểu diễn yêu cầu của client từ Web browser gửi lên. - HttpServletResponese: mô tả đáp ứng của server gửi đến Web browser. SERVLET 43 Viết Servlet Hàm Service() : Ví dụ: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("Hello World"); } } SERVLET 44 Viết Servlet Hàm destroy() : • Khi servlet không còn dùng đến hoặc hết thời gian quy định lưu trữ trong bộ nhớ của Web server thì servlet sẽ bị trình chứa giải phóng. •Trước khi servlet bị hủy thì phương thức destroy() sẽ được gọi. •Phương thức destroy() dùng để dọn dẹp tài nguyên, giải phóng bộ nhớ, đóng kết nối socket hoặc đóng kết nối đến CSDL, Ví dụ: conn.close(); //đóng kết nốiCSDL đặt trong SERVLET 45 Viết Servlet GetServletConfig() vàgetServletInfo() •Phương thức getServletConfig() giúp người sử dụng Servlet có được đối tượng ServletConfig chứa các thông tin khởi tạo từ môi trường ngoài đưa vào Servlet. •Phương thức getServletInfo() trả về một chuỗi thông tin mô tả ý nghĩa và mục đích của Servlet, các thông tin về tác giả, version và copyright. getServletConfig() vàgetServletInfo() SERVLET 46 Các bước để viết một Servlet 1. Tạo một servlet kế thừa một trong 2 lớp: - javax.servlet.GenericServlet hoặc -javax.servlet.http.HttpServlet 2. Viết chồng hàm sau: – Nếu Servlet kế thừa từ GenericServlet: • Service (ServletRequest req, ServletResponse resp) – Nếu Servlet kếthừatừHttpServlet: • doGet (HttpServletRequest req, HttpServletResponse resp): để xử lý yêu cầu HTTP GET • doPost(HttpServletRequest req, HttpServletResponse resp): để xử lý yêu cầu HTTP POST. • Để tránh không phân biệt xử lý cho HTTP GET request hay HTTP GET request, chúng ta thường chồng cả hai hàm doGet và doPost, sau đó trong 2 hàm này đều gọi đến một hàm xử lý chung. SERVLET 47 Các bước để viết một Servlet (tt) 3. Ngoài ra có thể viết chồng thêm một số hàm sau: init() : khởi tạo các tham số, tham biến. destroy(): huỷ (giải phóng tài nguyên). SERVLET 48 Các bước để viết một Servlet (tt) Ví dụ: public void doGet(HttpServletRequestreq, HttpServletResponseresp) throws Exception { processRequest(req, resp); } public void doPost(HttpServletRequestreq, HttpServletResponseresp) throws Exception { processRequest(req, resp); } public processRequest(HttpServletRequestreq, HttpServletResponseresp) throws Exeption { // Xử lý yêu cầu } SERVLET 49 Xử lý form Form Trong các ứng dụng web, ngoài việc thể hiện dữ liệu, thông tin cho người dùng xem, còn phải cho phép người dùng tương tác với trang web. Trang web phải cho phép người dùng nhập dữ liệu và thực hiện một thao tác nào.  Ví dụ : đăng ký, đăng nhập, tìm kiếm Để nhập dữ liệu và gửi về cho Web Server xử lý cần có một biểu mẫu (Form) Xử lý form 51 Thiết kế biểu mẫu Dùng thẻ Form trong HTML để thiết kế Login Please log in User Name: Password: Xử lý form 52 Thiết kế biểu mẫu  Các thuộc tính của thẻ Form  Action : trang xử lý được gửi đến  Method : phương pháp gửi dữ liệu đi  GET  POST Trong Form cần phải có một nút lệnh submit để thực hiện truyền dữ liệu đi. Xử lý form 53 Nhận dữ liệu từ Form và xử lý Trang xử lý sẽ nhận dữ liệu thông qua mã lệnh Java và dùng đối tượng ẩn request để nhận Xử lý form <% //Lay cacthong tin dang nhap String userName=request.getParameter("username"); String password=request.getParameter("password"); %> 54 Session Giới thiệu về Session Trong ứng dụng Web không có kết nối duy trì thường xuyên giữa trình khách(web browser) và trình chủ(web server). Khi trình duyệt cần trình chủ cung cấp một trang tài liệu, trình duyệt mở kết nối, lấy về trang dữ liệu và sau đó đóng kết nối ngay lập tức. Vì vậy Web Server sẽ không biết được trước đó trình duyệt đã có những trạng thái nào. Session tượng trưng một giai đoạn duy trì kết nối giữa trình khách và trình chủ trong quá trình liên lạc. Một loạt các request từ một client sẽ được liên kết với một session. Session 56 Lớp HttpSession Trong Java, Web server cài đặt sẵn đối tượng session thuộc lớp HttpSession. HttpSession dựa vào khái niệm cookie quy định giữa trình khách và trình chủ. Cookie là một mẩu thông tin được gởi về trình duyệt phía máy khách khi có yêu cầu trang từ server. Mỗi khi trình duyệt phát sinh yêu cầu gửi lên server, nó lại chuyển mẩu cookie trở lại trình chủ. Dựa vào cookie, trình khách và trình chủ sẽ có được những thông tin trạng thái thông báo cho nhau. Session 57 Đối tượng Session trong JSP Với đối tượng session thuộc lớp HttpSession, ba phương thức mà ta thường sử dụng nhất là:  public void setAttribute(Stringname, Object value) throws IlligalStateException  public Object getAttribute(Stringname) throws IlligalStateException  public void removeAttribute(Stringname) throws IlligalStateException Biến session chỉ tồn tại trong một thời gian nhất định. Nếu muốn chủ động làm cho session hết hiệu lực thì ta gọi phương thức: session.invalidate() Session 58 Đối tượng Session trong JSP Chú ý: Giá trị mà ta muốn lưu hay lấy về phải là một đối tượng (Object). Đối với các giá trị có kiểu int, float, boolean, thì ta phải chuyển sang kiểu lớp tương ứng như Integer, Float, Boolean, Vídụ: Integer tuoicuatui= new Integer(35); session.setAttribute(“tuoi”,tuoicuatui); Integer my_age= (Integer)session.getAttribute(“tuoi”); Session 59 Đối tượng Session trong JSP  Ví dụ xử lý đăng nhập : Session 60 Đối tượng Session trong Servlet Trong JSP có sẵn đối tượng session để sử dụng nhưng trong Servlet thì session không có sẵn. Ta phải lấy session thông qua đối tượng request. HttpSessionsession=request.getSession(); Nội dung dữ liệu mà ta lưu vào session trong trang JSP hoàn toàn có thể truy xuất được từ servlet. Nếu ta tạo servlet từ lớp GenericServlet thì ta không có được đối tượng HttpRequest để truy xuất biến session. Session 61 Đối tượng Session trong Servlet Trong JSP có sẵn đối tượng session để sử dụng nhưng trong Servlet thì session không có sẵn. Ta phải lấy session thông qua đối tượng request. HttpSession session=request.getSession(); Nội dung dữ liệu mà ta lưu vào session trong trang JSP hoàn toàn có thể truy xuất được từ servlet. Nếu ta tạo servlet từ lớp GenericServlet thì ta không có được đối tượng HttpRequest để truy xuất biến session. Session 62 Đối tượng Application  Session chỉ có thể lưu trữ thông tin cho một phiên làm việc, nếu muốn lưu trữ dữ liệu toàn cục có thể truy xuất ở bất kỳ trang JSP hoặc Servlet nào, với bất kỳ Session nào thì sao ?  Đối tượng Application được sử dụng trong tình huống trên. Session 63 Đối tượng Application Các phương thức mà đối tượng application cung cấp để lưu trữ và loại bỏ biến hoàn toàn tương tự các phương thức mà session cungcấp. Session 64 Sử dụng Application trong JSP  tương tự Session, trong JSP đối tượng application đã được tạo sẵn Session 65 Sử dụng Application trong Servlet Đối tượng application trong JSP thực sự được cài đặt từ giao diện ServletContext. Trong servlet ta có thể lấy giao tiếp này để dùng cho mục đích lưu biến vào đối tượng application. Biến application trong servlet có được bằng cách sử dụng lệnh sau: Session 66 Truy xuất CSDL Trình điều khiển JDBC  Để truy cập các DBMS khác nhau từ chương trình viết bằng Java thì ta cần có các JDBC driver tương ứng.  Ta có thể tải các JDBC driver từ trang web của các nhà cung cấp hệ quản trị CSDL 68 Trình điều khiển JDBC Tương tác căn bản nhất của JDBC được liệt kê sau đây: - Mở một kết nối đến CSDL (Open connection). - Thực thi các câu lệnh SQL (Execute SQL). - Xử lý dữ liệu (Process result). - Đóng kết nối (Close conection). 69 CÁC BƯỚC LẬP TRÌNH TRUY XUẤT CSDL Import JDBC driver vào ứng dụng Nạp trình điều khiển. Thiết lập kết nối. Tạo đối tượng Statement Thực hiện vấn tin Xử lý kết quả trả về Đóng kết nối 70 Import JDBC Driver  Trong NetBeanns, click phải lên thư mục library, chọn add jar và chọn file driver. 71 NẠP TRÌNH ĐIỀU KHIỂN Sử dụng phương thức tĩnh forName() của lớp Class với tham số là tên trình điều khiển cơ sở dữ liệu. • Cách dùng: try{ Class.forName(“Database driver name”); } catch(ClassNotFoundException e){ System.out.println(“Driver not found: ” +e.getMessage()); } catch(SQLException e){ System.out.println(“SQL Exception: ” + e.getMessage()); } 72 NẠP TRÌNH ĐIỀU KHIỂN (tt) • Trình điều khiển của MySQL: • Class.forName(“org.gjf.mm.mysql.Driver”); • Trình điều khiển của Oracle: • Class.forName(“oracle.jdbc.driver.OracleDriver”); • Trình điều khiển của Sybase: • Class.forName("com.sybase.jdbc.SybDriver"); • Trình điều khiển qua cầu nối ODBC: • Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); 73 THIẾT LẬP KẾT NỐI Để thiết lập kết nối ta gọi phương thức tĩnh getConnection() của lớp DriverManager, khi đó trả về một thể hiện của lớp Connection, theo dạng như sau: ◦ String user = “sa” ◦ String password = “secret” ◦ Connection con = DriverManager.getConnection(dbUrl, username, password); Trong đó: ◦ dbUrl: là chuỗi kết nối đến cơ sở dữ liệu. ◦ username : tên người dùng đăng nhập ◦ password : mật khẩu đăng nhập. 74 THIẾT LẬP KẾT NỐI Ví dụ : 75 Class.forName("com.mysql.jdbc.Driver"); String connectionString = "jdbc:mysql://localhost:3306/"; String databaseName = "BookOnline"; String userName = "root"; String passWord = "cdcntt"; String query = "select * from authors"; Connection con = DriverManager.getConnection(connectionString + databaseName,userName, passWord); TẠO ĐỐI TƯỢNG Statement Sử dụng đối tượng Connection để tạo đối tượng Statement.  Statement s = con.createStatement(); Đối tượng này có nhiệm vụ gửi các câu lệnh sql đến CSDL Cùng một đối tượng Statement có thể sử dụng cho nhiều câu lệnh sql khác nhau. Có 3 phương thức thực thi  executeQuery()  executeUpdate()  execute() 76 ĐỌC DỮ LIỆU TỪ CSDL Sử dụng phương thức executeQuery() của Statement để đọc dữ liệu từ cơ sở dữ liệu.  Dữ liệu đọc được sẽ được lưu trong ResultSet.  Có thể di chuyển tới lui trong ResultSet để lấy dữ liệu ra. 77 ĐỌC DỮ LIỆU TỪ CSDL Ví dụ 78 public void selectAll(){ 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); System.out.println("NAME\t\tPRICE"); while (rs.next()){ String name = rs.getString("NAME"); double val = rs.getDouble("PRICE"); System.out.println(name + "\t\t" + val); } st.close(); }catch(SQLException e){ e.printStackTrace(); } } } CÁC CHẾ ĐỘ HOẠT ĐỘNG CỦA RESULTSET TYPE_FORWARD_ONLY ◦ Con trỏ của ResultSet kiểu này chỉ được di chuyển theo một hướng từ đầu đến cuối TYPE_SCROLL_INSENSITIVE ◦ Con trỏ có thể di chuyển tới lui tương đối với vị trí hiện tại của nó, và cũng có thể di chuyển đến một vị trí cụ thể, không bị ảnh hưỏng nếu kết quả được thay đổi ở nơi khác TYPE_SCROLL_SENSITIVE ◦ Con trỏ có thể di chuyển tới lui tương đối với vị trí hiện tại của nó, và cũng có thể di chuyển đến một vị trí cụ thể, sẽ bị ảnh hưởng nếu kết quả bị thay đổi nơi khác 79 CÁC PHƯƠNG THỨC CỦA RESULTSET  next(): di chuyển con trỏ đến dòng kế, trả về true nếu có dòng kế tiếp, false nếu đến cuối ResultSet  previous(): di chuyển con trỏ đến dòng trước  first(): di chuyển con trỏ đến dòng đầu tiên  last(): di chuyển con trỏ đến dòng cuối cùng  beforeFirst(): di chuyển con trỏ đến vị trí trước dòng đầu tiên  afterLast(): di chuyển con trỏ đến sau dòng cuối cùng  relative(int rows): di chuyển con trỏ tương đối với vị trí hiện tại của nó với số dòng là rows  absolute(int row): di chuyển con trỏ đến dòng thứ row 80 LẤY DỮ LIỆU TỪ RESULTSET Dùng phương thc getXXX(String colname) XXX là kiểu dữ liệu được trả về  colname là tên của cột cần lấy dữ liệu ra Ví dụ String name = rs.getString("NAME"); double val = rs.getDouble("PRICE"); 81 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ề số dòng bị ảnh hưỏng sau khi câu lệnh được thực thi 82 NHẬP DỮ LIỆU QUA JDBC 83 Ví dụ: public void insertData(String name, double val){ String insertQuery = "INSERT INTO PRICELIST VALUES ('" + name + "'," + val + ");"; if (conn != null){ try{ Statement st = conn.createStatement(); int d = st.executeUpdate(insertQuery); System.out.println("So dong duoc cap nhat: " + d); st.close(); }catch(SQLException e){ e.printStackTrace(); } } } CHỈNH SỬA DỮ LIỆU BẰNG RESULTSET 84 • Dữ liệu của một bảng trong CSDL có thể được chỉnh sửa bằng cách sử dụng câu lệnh SQL UPDATE • Ta cũng có thể chỉnh sửa dữ liệu trên các hàng của một bảng từ ResultSet • Để làm được điều này, ResultSet phải được đặt ở chế độ CONCUR_UPDATABLE • Sử dụng các phương thức updateXXX() để chỉnh sửa dữ liệu trên ResultSet • XXX là kiểu dữ liệu của cột cần được sửa CHỈNH SỬA DỮ LIỆU BẰNG RESULTSET 85 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(); } } } ĐÓNG KẾT NỐI 86 • Để đóng kết nối ta sử dụng phương thức close của đối tượng connection: • connetion.close() Hết Chương 6

Các file đính kèm theo tài liệu này:

  • pdflec_6_java_web_9839.pdf
Tài liệu liên quan