1、眼见为实

(1)欢迎界面,总索引:带下划线的三个都是链接

(2)搜索界面:--有颜色的为链接

(3)、点击上面图片中的修改链接之后就会弹出下面的修改界面:
(4)、修改用户信息的界面
(5)、项目总结构:(别忘了还有WEB-INF里面的lib的mysql连接包)

(6)、源码:

package com.huai.dbc;

import java.sql.DriverManager;

public class DBConnection {

    private final String Driver = "com.mysql.jdbc.Driver"; private final String url = "jdbc:mysql://localhost:3306/test"; private java.sql.Connection con;

  public DBConnection()throws Exception{        Class.forName(Driver);        con = DriverManager.getConnection(url, "root", "mysql"); }

  public java.sql.Connection getConnection(){       return this.con;  }

  public void close()throws Exception{      if(this.con != null){            this.con.close();     } }

//    public static void main(String args[]){//     try {//           new Connection().getConnection();//       } catch (Exception e) {//         e.printStackTrace();//        }//   }}
package com.huai.dao;

import java.util.*;import com.huai.vo.*;

/* * 数据库操作的接口,里面的方法分别是增删改查 */public interface IDAOImpl {

   public ArrayList<User> queryData(String keyWord)throws Exception;

  public boolean deleteData(String keyWord)throws Exception;

  public boolean updateData(User user)throws Exception;

  public boolean insertData(User user)throws Exception;}
package com.huai.dao.impl;

import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import com.huai.dao.IDAOImpl;import com.huai.vo.User;

/* * 此类实现数据库的操作接口 * 注意:在此还没有实现数据库连接的实例化(对象), * 只是提供了一个构造放法,以便在后面的实例化后传入 */public class UserDAOImpl implements IDAOImpl{

  Connection con = null;   PreparedStatement state = null;

  public UserDAOImpl(Connection con) {      this.con = con;  }

  @Override    public ArrayList<User> queryData(String keyWord)throws Exception{       String sql = "select * from member where hobby like ? or name like ?";     ResultSet rs = null;     ArrayList<User> users = new ArrayList<User>();

      this.state = con.prepareStatement(sql);      //百分号表示代表未知的字符        this.state.setString(1, "%"+keyWord+"%");       this.state.setString(2, "%"+keyWord+"%");

      rs = this.state.executeQuery();      while(rs.next()){         User user = new User();          user.setId(rs.getString(1));          user.setName(rs.getString(2));            user.setSex(rs.getString(3));         user.setHobby(rs.getString(4));

          users.add(user);      }

      return users; }

   @Override    public boolean deleteData(String keyWord) throws Exception {      boolean flag = false;

      String sql = "delete from member where id = ?";

      this.state = con.prepareStatement(sql);      this.state.setString(1, keyWord);

      int i = this.state.executeUpdate();      if(i != 0){          flag = true;     }     return flag;  }

   @Override    public boolean updateData(User user) throws Exception {       boolean flag = false;

      String sql = "update member set name=?, sex=?, hobby=? where id=?";

      this.state = con.prepareStatement(sql);      this.state.setString(1, user.getName());      this.state.setString(2, user.getSex());       this.state.setString(3, user.getHobby());     this.state.setString(4, user.getId());

      int i = this.state.executeUpdate();      if(i != 0){          flag = true;     }     return flag;  }

   @Override    public boolean insertData(User user) throws Exception {

      boolean flag = false;        String sql = "insert into member(id, name, sex, hobby) values(?, ?, ?, ?)";        this.state = con.prepareStatement(sql);      this.state.setString(1, user.getId());        this.state.setString(2, user.getName());      this.state.setString(3, user.getSex());       this.state.setString(4, user.getHobby());

      int i = this.state.executeUpdate();      if(i != 0){          flag = true;     }     return flag;  }}
package com.huai.dao.impl;

import java.util.ArrayList;

import com.huai.dao.IDAOImpl;import com.huai.dbc.DBConnection;import com.huai.vo.User;

/* * 这个类和UserDAOImpl都实现了IDAOImpl接口 * 但是这个类是UserDAOImpl的代理类,目的是在大的项目中更好地进行代码的管理 */public class UserDAOImplProxy implements IDAOImpl{

  UserDAOImpl userDAOImpl = null;  DBConnection dBConnection = null;

  public UserDAOImplProxy()throws Exception{        dBConnection = new DBConnection();       userDAOImpl = new UserDAOImpl(dBConnection.getConnection()); }

  @Override    public ArrayList<User> queryData(String keyWord) throws Exception {     ArrayList<User> list = null;       try{          list = userDAOImpl.queryData(keyWord);       }catch(Exception e){          throw e;      }     return list;  }

   @Override    public boolean deleteData(String keyWord) throws Exception {      return userDAOImpl.deleteData(keyWord);

  }

   @Override    public boolean updateData(User user) throws Exception {

      return userDAOImpl.updateData(user);  }

   @Override    public boolean insertData(User user) throws Exception {

      return userDAOImpl.insertData(user);  }

}
package com.huai.dao.factory;

import com.huai.dao.impl.UserDAOImplProxy;

public class DaoFactory {

 public static UserDAOImplProxy getUserDAOImplProxy() throws Exception{        return new UserDAOImplProxy();    }}

package com.huai.servlet;

import java.io.IOException;import java.util.ArrayList;

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

import com.huai.dao.factory.DaoFactory;import com.huai.dao.impl.UserDAOImplProxy;import com.huai.vo.User;

//此处是新建servlet文件是自动加上的,如果没有它,需要在项目中增加web.xml文件,并且进行相关的映射配置//否则的话jsp文件找不到这个MyServlet文件@WebServlet("/MyServlet")

public class MyServlet extends HttpServlet {    private static final long serialVersionUID = 1L;

   UserDAOImplProxy userDAOImplProxy = null;

  public MyServlet() {      try {         userDAOImplProxy = DaoFactory.getUserDAOImplProxy();     } catch (Exception e) {           e.printStackTrace();      } }

   protected void doGet(HttpServletRequest request,          HttpServletResponse response) throws ServletException, IOException {      request.setCharacterEncoding("gbk");

      //status表示的是hidden域,目的是辨清是哪张表所发出的命令        String status = request.getParameter("status");

      if ("search".equals(status)) {          try {

               ArrayList<User> list = null;

             list = userDAOImplProxy.queryData(request                        .getParameter("keyWord"));

                request.setAttribute("users", list);

              request.getRequestDispatcher("searchPage.jsp").forward(request,                     response);

          } catch (Exception e) {               e.printStackTrace();          }     } else if ("insert".equals(status)) {           String info = "";

            String name = request.getParameter("name");            String sex = request.getParameter("sex");          String hobby = request.getParameter("hobby");          if (name == null || sex == null || hobby == null || "".equals(name)                   || "".equals(sex) || "".equals(hobby)) {              info = "The information is not completed";         } else {              User user = new User();              user.setName(name);               user.setSex(sex);             user.setHobby(hobby);

               try {                 if (userDAOImplProxy.insertData(user)) {                      info = "succeed to insert!";                   } else {                      info = "failed to insert!";                    }             } catch (Exception e) {                   e.printStackTrace();              }

           }         request.setAttribute("info", info);         request.getRequestDispatcher("insertPage.jsp").forward(request,                 response);

      } else if ("delete".equals(status)) {           String keyWord = request.getParameter("id");

         try {             String info = "";              if (userDAOImplProxy.deleteData(keyWord)) {                   info = "succeed to delete!";               } else {                  info = "failed to delete!";                }             request.setAttribute("info", info);

               //注意:这里的是内部跳转,也就是服务器端的跳转。外在表现是地址栏没变。好处就是提高性能                request.getRequestDispatcher("searchPage.jsp").forward(request,                     response);            } catch (Exception e) {               e.printStackTrace();          }     } else if ("update".equals(status)) {           String info = "";          String path = null;

            String id = request.getParameter("id");            String name = request.getParameter("name");            String sex = request.getParameter("sex");          String hobby = request.getParameter("hobby");          if (name == null || sex == null || hobby == null || "".equals(name)                   || "".equals(sex) || "".equals(hobby)) {              info = "The information is not completed";             path = "updatePage.jsp";           } else {              User user = new User();              user.setId(id);               user.setName(name);               user.setSex(sex);             user.setHobby(hobby);

               try {                 if (userDAOImplProxy.updateData(user)) {                      info = "succeed to update!";                       path = "searchPage.jsp";                   } else {                      info = "failed to update!";                        path = "updatePage.jsp";                   }             } catch (Exception e) {                   e.printStackTrace();              }         }         request.setAttribute("info", info);         request.getRequestDispatcher(path).forward(request,                   response);

      } }

   protected void doPost(HttpServletRequest request,         HttpServletResponse response) throws ServletException, IOException {      this.doGet(request, response);    }

}
package com.huai.vo;

public class User {

  private String id;    private String name;  private String sex;   private String hobby;

  public User(){

  }

   public String getId() {       return id;    }

   public void setId(String id) {        this.id = id;    }

   public String getName() {     return name;  }

   public void setName(String name) {        this.name = name;    }

   public String getSex() {      return sex;   }

   public void setSex(String sex) {      this.sex = sex;  }

   public String getHobby() {        return hobby; }

   public void setHobby(String hobby) {      this.hobby = hobby;  }

}
<%@ page language="java" contentType="text/html; charset=gbk"    pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gbk"><title>welcome page</title></head><body><center><%request.setCharacterEncoding("gbk"); %><h1>Welcome !</h1><h3><a href="searchPage.jsp">search_page</a><br></h3><h3><a href="insertPage.jsp">insert_page</a><br></h3><h3><a href="updatePage.jsp">update_page</a><br></h3></center></body></html>
<%@ page language="java" contentType="text/html; charset=gbk "    pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gbk"><title>insertPage</title></head><body><center>   <%request.setCharacterEncoding("gbk"); %>

   <h1>Insert_Page</h1>  <h2>${requestScope.info}</h2>

   <form action="MyServlet" method="post">       name:<input type="text" name="name"><br>        UserSex:<input type="text" name="sex"><br>      Hobby:<input type="text" name="hobby"><br>

      <input type="submit" value="insert">      <input type="reset" value="reset">        <input type="hidden" name="status" value="insert"><br>       <a href="index.jsp">-->>index_page</a>   </form></center></body></html>
<%@ page language="java" contentType="text/html; charset=gbk"    pageEncoding="GB18030"%><%@page import="java.util.*" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gbk"><title>searchPage</title></head><body><center>   <%request.setCharacterEncoding("gbk"); %> <h3>${requestScope.info}</h3>

   <form action="MyServlet" method="post">       <input type="text" name="keyWord">        <input type="hidden" name="status" value="search"/>        <input type="submit" value="search">      <a href="index.jsp">-->>index_page</a>   </form>

  <%request.setCharacterEncoding("gbk"); %> <%List list = (List)request.getAttribute("users");    if(list != null){  %>     <table border="1">           <tr>                <td>id</td>               <td>name</td>             <td>sex</td>              <td>hobby</td>

          </tr>

  <%     Iterator iter = list.iterator();         while(iter.hasNext()){                pageContext.setAttribute("de", iter.next());    %>             <tr>                    <td>${de.id}</td>                 <td>${de.name}</td>                   <td>${de.sex}</td>                    <td>${de.hobby}</td>                  <td><a href="updatePage.jsp?id=${de.id}&name=${de.name}&sex=${de.sex}&hobby=${de.hobby}">修改</a></td>                   <td><a href="MyServlet?id=${de.id}&status=delete">删除</a></td>                </tr>   <%

          } %>     </table>

  <%   }   %></center></body></html>
<%@ page language="java" contentType="text/html; charset=gbk"    pageEncoding="gbk"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gbk"><title>update_page</title></head><body><center>

<%request.setCharacterEncoding("gbk"); %>

<h1>Update_Page</h1>

<form action="MyServlet" method="post">   <h3>id =  ${param.id}</h3>

  name:<input type="text" name="name" value=${param.name}><br>   sex:<input type="text" name="sex" value=${param.sex}><br>  hobby:<input type="text" name="hobby" value=${param.hobby}><br>    <input type="hidden" name="id" value=${param.id}><br>  <input type="hidden" name="status" value="update">

  <input type="submit" value="提交">  <a href="index.jsp">-->index_page</a><br></form></center></body></html>

下面是对上面的项目的相关重构,我加入了sun公司开发的jsp标准标签库,利用标签来换掉view层的<%%>中的代码。其他的不变!!!(重点只修改了search.jsp中的代码)
<%@ page language="java" contentType="text/html; charset=gbk"   pageEncoding="gbk"%><!-- 导入标准标签库,也就是说,我们需要实现在WEB-INF/lib中放入相关的jar包,具体见截图 --><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><html><head><title>searchPage</title></head><body> <%     request.setCharacterEncoding("gbk");    %> <h3>${requestScope.info}</h3>

   <form action="MyServlet" method="post">       <input type="text" name="keyWord">        <input type="hidden" name="status" value="search" />       <input type="submit" value="search">      <a href="index.jsp">-->>index_page</a>   </form>

 <table border="1">       <tr>            <td>num</td>          <td>id</td>           <td>name</td>         <td>sex</td>          <td>hobby</td>            <td>修改</td>           <td>删除</td>       </tr>       <c:forEach var="student" items="${requestScope.users}" varStatus="num">            <tr>            <!-- varStatus表示当前变量student的状态,所以会有num.count(从1开始计数);还有num.index(从0开始计数) 等等-->             <td><c:out value="${num.count}"></c:out></td>              <td><c:out value="${student.id}"></c:out></td>             <td><c:out value="${student.name}"></c:out></td>               <td><c:out value="${student.sex}"></c:out></td>                <td><c:out value="${student.hobby}"></c:out></td>              <!-- 生成一个带有属性id,name, sex, hobby的url地址 -->             <td><c:url value="updatePage.jsp" var="update_url" scope="page">                     <c:param name="id" value="${student.id}" />                       <c:param name="name" value="${student.name}" />                       <c:param name="sex" value="${student.sex}" />                     <c:param name="hobby" value="${student.hobby}" />                     <!-- 根据合成的url地址形成一个超链接,其中update_url是所合成地址的名字 -->                 </c:url> <a href="${update_url}">修改</a></td>               <td><c:url value="MyServlet" var="delete_url" scope="page">                      <c:param name="id" value="${student.id}" />                       <c:param name="status" value="delete" />                  </c:url> <a href="${delete_url}">删除</a></td>           </tr>       </c:forEach>    </table></body></html>
注意新增加的包,这些包可以在http://tomcat.apache.org/taglibs/以及xalan官网中下载到

MVC、JSP实现mysql的增删改查功能的封装和简陋的界面交互相关推荐

  1. 微信小程序+mysql实现增删改查

    目录 微信小程序+mysql实现增删改查 一.效果展示 二.相关知识点 1.wx.chooseImage(Object object) 选择图片 2.wx.uploadFile(Object obje ...

  2. sqlalchemy 对 mysql 进行增删改查

    我其实还是喜欢原生的 sql 语句,sqlalchemy是对pymysql的封装,用的时候经常出各种错误.但是orm操作较简单,可以实现外键的关联操作. 视频 https://www.bilibili ...

  3. 使用三层架构实现简单的MVC登陆操作!并实现基本的增删改查功能!!

    一丶使用三层架构创建一个简单的MVC登录操作 1.首先,创建一个项目以及BLL层.DAL层.Entity层,如图一: 图一 2.创建一个数据库如图二: 图二 3基本工作已做好,接下来就编BLL层.DA ...

  4. python操作mysql的增删改查_详解使用pymysql在python中对mysql的增删改查操作(综合)...

    这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: #!/usr/bin/python #coding ...

  5. 怎么用php操作mysql删除数据库代码_如何使用php操作mysql的增删改查?

    php操作mysql的增删改查方法:1.插入语句[insert into 数据表名(字段1,字段2,....) values("值1","值2",..)]:2. ...

  6. Mysql (一)Mysql 数据库增删改查

    mysql数据库增删改查增:create database DBname charset gbk; 删:drop database DBname; 改:alter database DBname ch ...

  7. Go操作mysql实现增删改查及连接池

    [-] 下载驱动 创建测试表 数据库连接 插入操作 查询操作 修改操作 删除操作 完整代码 小结 开启web服务 db对象初始化 请求方法 小结 golang本身没有提供连接mysql的驱动,但是定义 ...

  8. Java连接Mysql数据库增删改查实现

    Java连接Mysql数据库增删改查实现 时间比较赶,我这里只实现查询,有时间再添加另外两个 难度 : ⭐⭐⭐(全星5颗星的情况下) 新建一个动态的网站工程, 把jar包全部复制进去,主要要那个mys ...

  9. php对mysql进行增删改查,php对mysql进行增删改查

    php对mysql进行增删改查 /* 用户名 : MYSQL_USER 密 码 : MYSQL_PASS 域 名 : MYSQL_HOST 端 口 : MYSQL_PORT 数据库名 : MYSQL_ ...

最新文章

  1. 【小白学习C++ 教程】十八、C++ 中文件处理
  2. css :after :berfor
  3. Apache Maven ToolChains的使用
  4. java 多项式拟合最多的项数_Matlab概率统计与曲线拟合
  5. WinCE中的RAM-Based Registry与HIVE-Based Registry
  6. c语言折半查找法找字符,C语言折半查找法练习题冒泡排序
  7. learning hmm
  8. 04. Make sure that objects are initialized before they're used
  9. python求解LeetCode习题Maximum Gap
  10. matlab对文件夹的遍历
  11. javax.persistence.TransactionRequiredException: No transactional EntityManager available
  12. representation learning的理解
  13. 靶机Who Wants To Be King 1渗透记录
  14. cesium加载entity图片缩放_教你使用最简单粗暴的js方法实现图片最小边展示
  15. 第二证券|扶持政策频发,教育板块再度爆发,全通教育“20cm”涨停
  16. 【系统分析师之路】计算机组成原理章节错题集锦
  17. 如何利用Python动态模拟太阳系运转
  18. 面试官:为啥要axios 的二次封装呢 及其使用是干啥的
  19. 中国地区“MMM dd, yyyy HH:mm:ss a“的时间格式问题
  20. 情感分析Sentiment Analysis 知识资料全集(入门/进阶/论文/综述/视频/专家,附查看

热门文章

  1. php 求数组组合数,php实现求数组全排列,元素所有组合的方法
  2. 11月8日学习内容整理:js的引入方式,变量数据类型,运算符,流程控制,函数...
  3. CentOS7定制封装发行版-基于CentOS minimal
  4. django定时任务实现(言简意赅) Django折腾记之启动定时任务(转)
  5. Theano 中文文档 0.9 - 7.2.5 循环
  6. Cocos2d之Texture2D类详解之将文件加载成Texture2D对象
  7. Windows 8.1 应用再出发 - 创建我的第一个应用
  8. Linux下锁用户与解锁问题
  9. Linux安装图解全过程(Linux Text文本界面安装)
  10. 惠普鼠标g260_惠普g260鼠标怎么样 惠普鼠标怎么样?