1. 添加數據
在jsp頁面中添加數據,和在serv中添加數據相似。獲得頁面中提交的數據以后,把數據保存到數據庫表中,JSP的代碼如下:
add.jsp
<%@ page language="java" import="java.sql.*" pageEncoding="gb2312"%> <% request.setCharacterEncoding("gb2312"); String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'add.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="" method="post"> <h1><label>請輸入部門信息:</label></h1> <label>部門號:</label><br/> <input type="text" name="id"/><br/> <label>部門名:</label><br/> <input type="text" name="d_name"/><br/> <label>部門人數:</label><br/> <input type="text" name="empnumber"/><br/> <label>地址:</label><br/> <input type="text" name="address"/><br/><br/> <input type="submit" value="提交"/> </form> </body> </html> <% Connection conn = null; PreparedStatement ps = null; try{ Class.forName("com.mysql.jdbc.Driver"); System.out.println("創建數據庫驅動成功!"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bank","root","1234"); System.out.println("數據庫連接成功!"); String sql = "insert into dept(id,d_name,address,empnumber) values(?,?,?,?)"; ps = conn.prepareStatement(sql); String id = request.getParameter("id"); String d_name = request.getParameter("d_name"); String address = request.getParameter("address"); int empnumber = Integer.parseInt(request.getParameter("empnumber")); ps.setString(1,id); ps.setString(2,d_name); ps.setString(3,address); ps.setInt(4,empnumber); int result = ps.executeUpdate(); if(result == 1) out.print("插入數據成功!"); else out.print("插入數據失敗,請重新插入!"); }catch(Exception e){ out.println("無法連接數據庫,請檢查數據庫連接是否正確!"); } %>
2. 顯示全部數據
在頁面中顯示全部數據,也就是要把數據庫中的全部數據查詢出來,要實現這個功能,需要用到實體類,即數據庫和實體對象的映射類。實體類代碼如下:
DeptVo.java
package com.cn.vo; public class DeptVo { private String id; private String address; private int empnumber; private String d_name; private int d_id; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getEmpnumber() { return empnumber; } public void setEmpnumber(int empnumber) { this.empnumber = empnumber; } public String getD_name() { return d_name; } public void setD_name(String dName) { d_name = dName; } public int getD_id() { return d_id; } public void setD_id(int dId) { d_id = dId; } }
編寫好實體類型后,就可以在頁面中調用該類,在JSP頁面中編寫JDBC,連接數據庫和查詢數據,再用JSTL標簽庫中的c標簽遍歷輸出數據,使用EL表達式取值。JSP中的代碼如下:
showAll.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page import="com.cn.vo.*" %> <%@ page import="java.sql.*" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'showAll.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <% List<DeptVo> list = new ArrayList<DeptVo>(); try{ Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bank","root","1234"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM dept"); while(rs.next()){ DeptVo deptVo = new DeptVo(); deptVo.setId(rs.getString("id")); deptVo.setAddress(rs.getString("address")); deptVo.setD_id(rs.getInt("d_id")); deptVo.setD_name(rs.getString("d_name")); deptVo.setEmpnumber(rs.getInt("empnumber")); list.add(deptVo); } request.setAttribute("list",list); //把list集合放入request對象中 }catch(Exception e){ e.printStackTrace(); } %> <body> <table border="1" align="center" width="70%"> <tr> <td>部門編號</td> <td>部門地址</td> <td>部門人數</td> <td>部門名稱</td> <td>部門id</td> </tr> <c:forEach items="${list}" var="list"> <tr> <td>${list.id }</td> <td>${list.address }</td> <td>${list.empnumber }</td> <td>${list.d_name }</td> <td>${list.d_id }</td> </tr> </c:forEach> </table> </body> </html>
3. 顯示單條數據信息
顯示單條信息就是根據數據的唯一標示符來查詢出單條數據的詳細信息。在dept表中,主鍵d_id的值是自動增長的,不會有重復,可以根據d_id查詢出單條數據信息。首先要在頁面中輸入要查詢的d_id值,然后根據d_id來查詢數據的詳細信息。輸入查詢條件的JSP文件代碼如下:
item.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'item.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="ShowById.jsp" method="post"> <label>請輸入部門id:</label><br/><br/> <input type="text" name="d_id"/><br/><br/> <input type="submit" value="查找"/> </form> </body> </html>
顯示在同一頁面中的ShowById.jsp文件的代碼如下:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ page import="com.cn.vo.*" %> <%@ page import="java.sql.*" %> <%@page import="javax.servlet.jsp.tagext.TryCatchFinally"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'ShowById.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <% int d_id = Integer.parseInt(request.getParameter("d_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 d_id =?"; pstmt = con.prepareStatement(sql); pstmt.setInt(1,d_id); rs = pstmt.executeQuery(); while(rs.next()){ DeptVo deptVo = new DeptVo(); deptVo.setId(rs.getString("id")); deptVo.setAddress(rs.getString("address")); deptVo.setD_id(rs.getInt("d_id")); deptVo.setD_name(rs.getString("d_name")); deptVo.setEmpnumber(rs.getInt("empnumber")); request.setAttribute("deptVo",deptVo); System.out.println(deptVo.getD_id()); } }catch(Exception e){ e.printStackTrace(); } %> <body> <jsp:include flush="true" page="item.jsp"></jsp:include> <hr/> <h2>d_id值為<%=d_id%>的數據詳細信息</h2> <table border="1" align="center" width="70%"> <tr> <td>部門編號</td> <td>部門地址</td> <td>部門人數</td> <td>部門名稱</td> <td>部門id</td> </tr> <tr> <td>${deptVo.id }</td> <td>${deptVo.address }</td> <td>${deptVo.empnumber }</td> <td>${deptVo.d_name }</td> <td>${deptVo.d_id }</td> </tr> </table> </body> </html>
4. 修改數據
修改數據的時候,要把修改的數據信息顯示到頁面中,然后在頁面中根據實際情況來修改數據,修改數據成功后,數據庫會保存修改后的數據。
先編寫輸入修改數據條件的頁面,代碼如下:
updateItem.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'updateItem.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="queryToUpdate.jsp" method="post"> <label>請輸入部門id:</label><br/><br/> <input type="text" name="d_id"/><br/><br/> <input type="submit" value="查找"/> </form> </body> </html>
上述代碼中,form表單的action值是queryToUpdate.jsp,當提交查詢時,會打開queryToUpdate.jsp頁面,在queryToUpdate.jsp頁面中查詢出的d_id指向的數據信息,並顯示到頁面中。queryToUpdate.jsp頁面代碼如下:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ page import="com.cn.vo.*" %> <%@ page import="java.sql.*" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'queryToUpdate.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% response.setCharacterEncoding("gb2312"); request.setCharacterEncoding("gb2312"); Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try{ int d_id = Integer.parseInt(request.getParameter("d_id")); 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 d_id=?"; ps = con.prepareStatement(sql); ps.setInt(1,d_id); rs = ps.executeQuery(); while(rs.next()){ DeptVo deptVo = new DeptVo(); deptVo.setAddress(rs.getString("address")); deptVo.setD_id(rs.getInt("d_id")); deptVo.setD_name(rs.getString("d_name")); deptVo.setEmpnumber(rs.getInt("empnumber")); deptVo.setId(rs.getString("id")); request.setAttribute("deptVo",deptVo); System.out.println(deptVo.getD_id()); } }catch(Exception e){ e.printStackTrace(); } %> <form action="update.jsp" method="post"> <h1><label>請輸入部門信息:</label></h1> <label>部門號:</label><br/> <input type="text" name="id" value="${deptVo.id}"/><br/> <label>部門名:</label><br/> <input type="text" name="d_name" value="${deptVo.d_name}"/><br/> <label>部門人數:</label><br/> <input type="text" name="empnumber" value="${deptVo.empnumber}"/><br/> <label>地址:</label><br/> <input type="text" name="address" value="${deptVo.address}"/><br/> <label>部門id:</label><br/> <input type="text" name="d_id" value="${deptVo.d_id}"/><br/><br/> <input type="submit" value="修改"/> </form> </body> </html>
頁面效果如下所示:
在上面的頁面中提交修改后,會打開form表單action指定的update.jsp頁面,在該頁面中處理數據修改,並包含了輸入修改條件的頁面。update.jsp代碼如下:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ page import="java.sql.*" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'update.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <% response.setCharacterEncoding("gb2312"); request.setCharacterEncoding("gb2312"); Connection con = null; PreparedStatement ps = 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"); int d_id = Integer.parseInt(request.getParameter("d_id")); 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=?,d_id=? where d_id=?"; ps = con.prepareStatement(sql); ps.setString(1,id); ps.setString(2,address); ps.setInt(3,empnumber); ps.setString(4,d_name); ps.setInt(5,d_id); ps.setInt(6,d_id); ps.executeUpdate(); out.println("<h1>修改成功!</h1>"); }catch(Exception e){ e.printStackTrace(); } %> <body> <jsp:include flush='true' page='updateItem.jsp'></jsp:include> </body> </html>
程序運行后界面如下: