本文提供一个完整的示例程序,实现由页面对数据库数据进行增、删、改、查。
开发环境是jdk-14.0.2、mysql-8.0.22、tomcat-9.0.37、IntelliJ IDEA 2018。
项目文件、数据库文件打包下载:
JavaWebDemo_增删改查.rar_webdemocsdn下载-互联网文档类资源-CSDN下载
页面划分为四个独立的部分:头部、左部、中部、右部。各部分的功能是:
头部——展示标题;
左部——添加信息;
中部——查询、删除、修改;
右部——查看全部信息。
A.增加
在左部页面,完成添加信息功能。
输入编号、姓名,选择性别,点击提交(当该编号的记录已存在时,无法加入)。
B.删除
在中部页面,先查询、再删除。
查询出编号为A008的记录
点击“删除”,删除成功。
C.修改
在中部页面,先查询、再修改。
查询出编号为A007的记录
点击“修改”,进入修改页面,原信息自动导入
将“萧峰”修改为“乔峰”
点击“提交”,修改成功。
D.查询
在删除和修改操作中,已经查询过单条记录。这里,在右部页面,查询出全部信息。
点击“点击查看全部信息”
整体视角
创建数据库,命名为“javawebdemo1”
-> 建立一张数据表,命名为“person”
-> 创建三个字段,分别为:
number(主键)—— 编号;
name —— 姓名;
gender —— 性别。
表结构:
(1)整体结构
src,即后台部分:先创建cn.sigma包,再在下面创建entity、 database、 dao、 service、 servlet等子包。各包的功能含义为:
entity —— 实体类;
database —— 数据库连接类;
dao —— 数据访问;
service —— 业务逻辑;
servlet —— 用户功能和响应。
web,即前端部分:创建pageHeader、pageLeft、 pageMid、 pageRight等目录。各目录的含义为:
pageHeader —— 页面头部目录;
pageLef —— 页面左部目录;
pageMid —— 页面中部目录;
pageRight —— 页面右部目录。
(2)web部分的结构
前端使用
建立的jsp文件的功能含义为:
1)index.jsp —— 总页面;
2)pageHeader
home.jsp —— 头部页面;
3)pageLeft
home.jsp —— 左部页面;
4)pageMid
home.jsp —— 中部删除页面;
mod.jsp —— 中部修改页面;
5)pageRight
home.jsp —— 右部页面。
(3)src部分的结构
其中,各java类的功能含义为:
1)entity
Person —— 人员类;
2)database
Database —— 数据库连接类,由jdbc实现;
3)dao
PersonDao —— 人员dao层接口;
imp/PersonDaoImp —— 人员dao层实现类;
4)service
PersonService ——人员service层接口;
imp/PersonServiceImp —— 人员service层实现类;
5)servlet,访问路径均采用注解配置
AddServlet —— 添加信息;
DeleteServlet —— 删除信息;
OldRecordServlet —— 得到原记录信息;
SelectAllServlet —— 得到全部记录信息;
SelectOneServlet —— 得到一个记录信息;
UpdateServlet —— 修改信息。
(1)添加信息
用户在页面的一个form表单中输入了编号、姓名、性别等信息,点击提交后,访问并将表单数据传输到AddServlet。在AddServlet中,首先获取到页面输入的编号、姓名、性别等信息值,然后验证编号所属的记录是否在数据库中已存在,若不存在,将数据实例化为对象,加入数据库;若已存在,不做操作,给出页面提示信息。
(2)删除信息
先查询出一条记录,再删除。
查询过程:用户在页面的一个表单中输入要查询的编号,点击提交,将编号传到SelectOneServlet;SelectOneServlet获取到编号后,在数据库中查询出相对应的记录信息,然后以请求转发的方式将记录信息返回页面;页面用EL表达式的方式接收到该条记录。
删除过程:用户点击删除按钮,访问并将记录的编号传到DeleteServlet;在DeleteServlet中,首先接收到页面传来的编号,然后在数据库中删除与之对应的记录,并在页面给出提示消息。
(3)修改信息
先查询出一条记录,再修改。
查询过程:同删除中的描述。
修改过程:用户点击修改按钮,访问将记录的编号传到OldRecordServlet;在OldRecordServlet中,接收到编号,在数据库中查询出相对应的记录,将记录信息返回给修改页面mod.jsp。mod.jsp接收到该记录,并将信息直接地置在表单中,用户修改信息后,点击提交,将信息传至UpdateServlet;UpdateServlet接收到页面的表单信息后,将数据实例化为对象,更新数据库的此条记录,并在页面给出提示消息。
(4)查询信息
在右部页面,查询得到了所有的记录信息
用户点击“点击查看全部信息”按钮;后台接收到请求,查询出数据库中的全部记录,将记录信息返回页面;页面用EL表达式的方式接收信息并展示。
前端
(1)index.jsp —— 总页面
JavaWeb Demo1
(2)pageHeader/home.jsp —— 头部
Title JavaWebDemo1:增、删、改、查
(3)pageLeft/home.jsp —— 左部
Title 添加信息 编号: 姓名: 性别: 男 女 <%-- 单选框方法:两个input设置成一样的name值 加入空格: 默认选中:加入checked属性。 --%>
(4)
<%--删除按钮和修改按钮的响应函数--%> 更改信息 —— 先查询,再删除、修改 编号: 编号 姓名 性别 操作 ${person.number} ${person.name} 男 女
修改信息 编号: 姓名: 性别: 男 女 性别: 男 女
(5)pageRight/home.jsp —— 右部
点击查看全部信息 内容为空! 编号 姓名 性别 ${person.number} ${person.name} 男 女
后台
(1)实体类Person
public class Person { private String number; private String name; private boolean gender; //无参构造方法 public Person() { } //全参构造方法 public Person(String number, String name, boolean gender) { this.number = number; this.name = name; this.gender = gender; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isGender() { return gender; } public void setGender(boolean gender) { this.gender = gender; } }
(2)数据库连接类database,由jdbc实现
public class Database { public static Connection conn(){ //定义地址,"jdbc:mysql://ip地址:端口号/数据库名" String url = "jdbc:mysql://localhost:3306/javawebdemo1"; Connection connection = null; try { //加载驱动 Class.forName("com.mysql.jdbc.Driver"); //建立连接,用户名:root,密码:hello connection = DriverManager.getConnection(url, "root", "hello"); }catch (SQLException e){ e.printStackTrace(); }catch (ClassNotFoundException e){ e.printStackTrace(); } return connection; } }
(3)dao层,先定义接口,再完成实现类
接口:
public interface PersonDao { //增加 public int addPerson(Person person); //删除 public int delete(Person person); //修改 public int update(Person person); //查询一个 public Person selectone(Person person); //查询全部 public List selectall(Person person); }
实现类:
public class PersonDaoImp implements PersonDao { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; @Override public int addPerson(Person person) { int a = 0; try { con = Database.conn(); //连接数据库 String sql = "insert into person values(?, ?, ?)"; //设置sql语句的字符串 ps = con.prepareStatement(sql); //解析sql语句 ps.setString(1, person.getNumber()); //为第一个位置赋值 ps.setString(2, person.getName()); //为第二个位置赋值 ps.setBoolean(3, person.isGender()); //为第三个位置赋值 a = ps.executeUpdate(); //执行sql语句,返回的改变的行数。这里,插入记录成功后,返回1;否则返回0。 }catch (SQLException e){ e.printStackTrace(); } return a; } @Override public int delete(Person person) { int a = 0; try { con = Database.conn(); String sql = "delete from person where number=?"; ps = con.prepareStatement(sql); ps.setString(1, person.getNumber()); a = ps.executeUpdate(); }catch (SQLException e){ e.printStackTrace(); } return a; } @Override public int update(Person person) { int a = 0; try { con = Database.conn(); String sql = "update person set number=?, name=?, gender=? where number=?"; ps = con.prepareStatement(sql); ps.setString(1, person.getNumber()); ps.setString(2, person.getName()); ps.setBoolean(3, person.isGender()); ps.setString(4, person.getNumber()); a = ps.executeUpdate(); }catch (SQLException e){ e.printStackTrace(); } return a; } @Override public Person selectone(Person person) { Person person1 = new Person(); try { con = Database.conn(); String sql = "select * from person where number=?"; ps = con.prepareStatement(sql); ps.setString(1, person.getNumber()); rs = ps.executeQuery(); if (rs.next()){ person1.setNumber(rs.getString("number")); person1.setName(rs.getString("name")); person1.setGender(rs.getBoolean("gender")); }else { return null; } }catch (SQLException e){ e.printStackTrace(); } return person1; } @Override public List selectall(Person person) { List list = new ArrayList<>(); try { con = Database.conn(); String sql="select * from person"; ps = con.prepareStatement(sql); rs = ps.executeQuery(); while (rs.next()){ Person person1 = new Person(rs.getString("number"), rs.getString("name"), rs.getBoolean("gender")); list.add(person1); //存入list的,是每个对象的地址 } }catch (SQLException e){ e.printStackTrace(); } return list; } }
(4)service层,先定义接口,再完成实现类
public interface PersonService { //增加 public int addPerson(Person person); //删除 public int delete(Person person); //修改 public int update(Person person); //查询一个 public Person selectone(Person person); //查询全部 public List selectall(Person person); }
public class PersonServiceImp implements PersonService { PersonDao personDao = new PersonDaoImp(); @Override public int addPerson(Person person) { int a = personDao.addPerson(person); return a; } @Override public int delete(Person person) { int a = personDao.delete(person); return a; } @Override public int update(Person person) { int a = personDao.update(person); return a; } @Override public Person selectone(Person person) { Person person1 = personDao.selectone(person); return person1; } @Override public List selectall(Person person) { List list = personDao.selectall(person); return list; } }
(5)servlet层,访问路径采用注解配置
AddServlet —— 添加信息:
@WebServlet("/AddServlet") public class AddServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置请求响应的编码 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); PersonService personService = new PersonServiceImp(); String number = request.getParameter("number"); //获取页面输入的编号 String name = request.getParameter("name"); //获取页面输入的姓名 String gender_str = request.getParameter("gender"); //获取页面输入的性别值 boolean gender = Boolean.valueOf(gender_str); //将性别值转化为布尔类型 //判断该编号所属的记录是否已存在,若不存在,加入记录 Person person0 = new Person(); person0.setNumber(number); Person person = personService.selectone(person0); PrintWriter printWriter = response.getWriter(); if (person == null){ //该编号所属的记录不存在,可加入 Person person1 = new Person(number,name,gender); //全参构造初始化 int a = personService.addPerson(person1); //加入数据库 if (a > 0){ //添加成功 printWriter.print(""); }else { //添加失败 printWriter.print(""); } }else { //该编号所属的记录已存在,不可加入 printWriter.print(""); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
DeleteServlet —— 删除信息:
@WebServlet("/DeleteServlet") public class DeleteServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置请求响应的编码 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); PersonService personService = new PersonServiceImp(); String number = request.getParameter("number"); //获取页面输入的编号 Person person0 = new Person(); person0.setNumber(number); int a = personService.delete(person0); PrintWriter printWriter = response.getWriter(); if (a > 0){ //删除成功 printWriter.print(""); }else { //删除失败 printWriter.print(""); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
OldRecordServlet —— 得到原记录信息:
@WebServlet("/OldRecordServlet") public class OldRecordServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置请求响应的编码 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); PersonService personService = new PersonServiceImp(); String number = request.getParameter("number"); //获取页面输入的编号 Person person0 = new Person(); person0.setNumber(number); Person person = personService.selectone(person0); request.setAttribute("person", person); request.getRequestDispatcher("/pageMid/mod.jsp").forward(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
SelectAllServlet —— 得到全部记录信息:
@WebServlet("/SelectAllServlet") public class SelectAllServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置请求响应的编码 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); PersonService personService = new PersonServiceImp(); List personList = personService.selectall(null); request.setAttribute("personList", personList); request.getRequestDispatcher("/pageRight/home.jsp").forward(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
SelectOneServlet —— 得到一个记录信息:
@WebServlet("/SelectOneServlet") public class SelectOneServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置请求响应的编码 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); PersonService personService = new PersonServiceImp(); String number = request.getParameter("number"); //获取页面输入的编号 Person person0 = new Person(); person0.setNumber(number); Person person = personService.selectone(person0); PrintWriter printWriter = response.getWriter(); if (person != null){ request.setAttribute("person", person); request.getRequestDispatcher("/pageMid/home.jsp").forward(request, response); }else { printWriter.print(""); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
UpdateServlet —— 修改信息:
@WebServlet("/UpdateServlet") public class UpdateServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置请求响应的编码 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); PersonService personService = new PersonServiceImp(); String number = request.getParameter("number"); //获取页面输入的编号 String name = request.getParameter("name"); //获取页面输入的姓名 String gender_str = request.getParameter("gender"); //获取页面输入的性别值 boolean gender = Boolean.valueOf(gender_str); //将性别值转化为布尔类型 Person person1 = new Person(number, name, gender); int a = personService.update(person1); PrintWriter printWriter = response.getWriter(); if (a > 0){ //修改成功 printWriter.print(""); }else { //修改失败 printWriter.print(""); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
1.本文提供了一个关于javaweb增、删、改、查完整的示例程序。
2.本文的基本特点有:a.基于MVC开发模式;b.开发过程力求高内聚、低耦合;c.面向对象的编程思想。前端使用了frameset标签进行分页操作;后台功能分dao、service、servlet三层结构完成;数据库建立了一张数据表,由字符串类型做主键,提高了对数据的兼容性。
3.规范的开发方式和习惯能够有效地释放开发过程中的思维量,提高效率。