5.修改數據
5.1編寫查詢條件頁面
修改單條數據的時候,首先是查詢出單個數據的詳細信息,然后根據實際需要部分修改或者全部修改。修改之后,數據會提交到數據庫,數據庫中保存更新以后的數據。
查詢出單條數據的查詢條件頁面代碼如下:
QueryToUpdate.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>QueryToUpdate.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <form name="f1" id="f1" action="/jdbc_servlet/servlet/QueryToUpdateServlet" method="post"> <table border="0"> <tr> <td>請輸入要修改的部門編號:</td><tr></tr> <td><input type="text" name="id" ></td> </tr> <tr> <td colspan="2" align="left"><input type="submit" value="提交"></td> </tr> </table> </form> </body> </html>
5.2 編寫顯示部門詳細信息的Servlet
輸入要修改的部門編號以后,進入根據部門編號查詢部門信息的Servlet,把部門詳細信息顯示到頁面中,一些不可以修改的字段可以設置成只讀,這樣就不會把這些數據修改了,該Servlet的代碼如下:
QueryToUpdateServlet.java
package com.cn.update; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class QueryToUpdateServlet extends HttpServlet { /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=gb2312"); request.setCharacterEncoding("gb2312"); PrintWriter out = response.getWriter(); String id = request.getParameter("id"); Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("創建驅動成功!"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bank", "root", "1234"); System.out.println("數據庫連接成功!"); String sql = "SELECT * FROM dept WHERE id=?"; pstmt = con.prepareStatement(sql); pstmt.setString(1, id); rs = pstmt.executeQuery(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } //顯示單個部門的信息 out.println("<html>" + "<head><title>顯示單個部門信息</title></head>" + "<body>"); out.println("<h1>顯示單個部門信息</h1><br><br>"); out.print("<form action='/jdbc_servlet/servlet/UpdateDeptServlet' method='post'>"); try { while(rs.next()){ out.println("部門編號:"); out.print("<br>"); //在文本框中顯示部門編號,設置成只讀 out.println("<input type='text' name='id' readonly='true' value="); out.println(rs.getString(1).toString()); out.print(">"); out.print("<br>"); out.println("部門名稱:"); out.print("<br>"); //在文本框中顯示部門名稱 out.println("<input type='text' name='d_name' value="); out.println(rs.getString(2).toString()); out.print(">"); out.print("<br>"); out.println("部門地址:"); out.print("<br>"); //在文本框中顯示部門地址 out.println("<input type='text' name='address' value="); out.println(rs.getString(3).toString()); out.print(">"); out.print("<br>"); out.println("部門人數:"); out.print("<br>"); //在文本框中顯示部門人數 out.println("<input type='text' name='empnumber' value="); out.println(rs.getString(4).toString()); out.print(">"); out.print("<br>"); //提交按鈕 out.print("<input type='submit' value='Submit'>"); out.print("</form>"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } out.flush(); out.close(); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=gb2312"); request.setCharacterEncoding("gb2312"); PrintWriter out = response.getWriter(); this.doGet(request, response); out.flush(); out.close(); } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { // Put your code here } }
5.3編寫處理修改操作的Servlet
在UpdateDeptServlet中,修改數據以后,顯示出數據庫表中的全部信息。UpdateDeptServlet的代碼如下:
UpdateDeptServlet.java
package com.cn.update; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class UpdateDeptServlet extends HttpServlet { /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); this.doPost(request, response); out.flush(); out.close(); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=gb2312"); request.setCharacterEncoding("gb2312"); PrintWriter out = response.getWriter(); Connection con = null; PreparedStatement ps = null; ResultSet rs = null; Statement sta = null; String id = request.getParameter("id"); String address = request.getParameter("address"); int empnumber = Integer.parseInt(request.getParameter("empnumber")); String d_name = request.getParameter("d_name"); try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("創建驅動成功!"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bank", "root", "1234"); System.out.println("數據庫連接成功!"); String sql = "UPDATE dept SET id=?,address=?,empnumber=?,d_name=? WHERE id=?"; ps = con.prepareStatement(sql); //下面設置修改的數據值 ps.setString(1, id); ps.setString(2, address); ps.setInt(3, empnumber); ps.setString(4, d_name); ps.setString(5, id); ps.executeUpdate(); System.out.println("修改成功!"); /* * 添加成功后,顯示全部信息 */ sta = con.createStatement(); rs = sta.executeQuery("SELECT * FROM dept"); //在頁面中顯示表中的所有信息 out.println( "<html>"+ "<head><title>部門表信息</title></head>"+ "<body>"); out.println("<h1>部門表信息:</h1><br><br>"); //循環遍歷輸出查詢結果 while(rs.next()){ out.print("部門編號:"); out.print(rs.getString(1)+"\t"); out.print("部門名稱:"); out.print(rs.getString(2)+"\t"); out.print("部門地址:"); out.print(rs.getString(3)+"\t"); out.print("部門人數:"); out.print(rs.getString(4)+"\t"); out.println("<br>"); } out.print("</body></html>"); out.close(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } out.flush(); out.close(); } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { // Put your code here } }
6. 刪除數據
刪除數據時,要指定刪除的條件,否則會把表中的所有數據刪除。刪除以后,被刪除的數據在表中就不存在了。下面的例子是根據部門編號刪除數據的例子。首先在頁面中輸入要刪除的部門編號,輸入要刪除的部門編號的頁面代碼入下:
delete.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>delete.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=gb2312"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <form name="f1" id="f1" action="/jdbc_servlet/servlet/DeleteByIdServlet" method="post"> <table border="0"> <tr> <td>請輸入要刪除的部門編號:</td><tr></tr> <td><input type="text" name="id" ></td> </tr> <tr> <td colspan="2" align="left"><input type="submit" value="刪除"></td> </tr> </table> </form> </body> </html>
當輸入刪除條件后,單擊【刪除】按鈕,會進入form表單指定的DeleteByIdServlet中,這是一個servlet,用來處理刪除操作。DeleteByIdServlet中的代碼如下:
DeleteByIdServlet.java
package com.cn.delete; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DeleteByIdServlet extends HttpServlet { /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); this.doPost(request, response); out.flush(); out.close(); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=gb2312"); request.setCharacterEncoding("gb2312"); PrintWriter out = response.getWriter(); String id = request.getParameter("id"); Connection con = null; // ResultSet rs = null; PreparedStatement ps = null; try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("創建驅動成功!"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bank", "root", "1234"); System.out.println("數據庫連接成功!"); String sql = "DELETE FROM dept WHERE id=?"; ps = con.prepareStatement(sql); ps.setString(1, id); ps.executeUpdate(); System.out.println("刪除成功!"); //顯示結果信息 out.println("<html><head><title>" +"刪除部門表數據</title></head>"+"<body>"); out.println("<h1>刪除部門表數據成功!</h1>"); out.print("</body></html>"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } out.flush(); out.close(); } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { // Put your code here } }
在DeleteByIdServlet中,獲得頁面傳遞過來的部門編號,然后根據部門編號刪除該編號對應的數據,刪除成功則在頁面中提示刪除成功。