第八周---MVC(实现对数据库数据添加删除修改)

完成添加更新删除操作

在这个练习过程中,即使是导入的教程中的代码,但还是遇到了很多的错误,也花了很长时间找错。

Hero.java

package bean;

public class Hero {
	 public int id;
	    public String name;
	    public float age;
	    public String xingbie;
	    public int getId() {
	        return id;
	    }
	    public void setId(int id) {
	        this.id = id;
	    }
	    public String getName() {
	        return name;
	    }
	    public void setName(String name) {
	        this.name = name;
	    }
	    public float getAge() {
	        return age;
	    }
	    public void setAge(float age) {
	        this.age = age;
	    }
	    public String getXingbie() {
	        return xingbie;
	    }
	    public void setXingbie(String xingbie) {
	        this.xingbie = xingbie;
	    }
	      
}

HeroDao.java

package dao;

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 java.util.ArrayList;
import java.util.List;
  
import bean.Hero;
   
public class HeroDao {
   
    public HeroDao() {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
   
    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=javaweb", "sa",
                "123456");
    }
    
   
    public int getTotal() {
        int total = 0;
        try (Connection c = getConnection(); Statement s = c.createStatement();) {
   
            String sql = "select count(*) from huiyuan";
   
            ResultSet rs = s.executeQuery(sql);
            while (rs.next()) {
                total = rs.getInt(1);
            }
   
            System.out.println("total:" + total);
   
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
        return total;
    }
   
    public void add(Hero hero) {
   
        String sql = "insert into huiyuan values(?,?,?)";
        try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {
   
            ps.setString(1, hero.name);
            ps.setFloat(2, hero.age);
            ps.setString(3, hero.xingbie);
   
            ps.execute();
   
            ResultSet rs = ps.getGeneratedKeys();
            if (rs.next()) {
                int id = rs.getInt(1);
                hero.id = id;
            }
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
    }
   
    public void update(Hero hero) {
   
        String sql = "update huiyuan set name= ?, age = ? , xingbie = ? where id = ?";
        try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {
   
            ps.setString(1, hero.name);
            ps.setFloat(2, hero.age);
            ps.setString(3, hero.xingbie);
            ps.setInt(4, hero.id);
   
            ps.execute();
   
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
   
    }
   
    public void delete(int id) {
   
        try (Connection c = getConnection(); Statement s = c.createStatement();) {
   
            String sql = "delete from huiyuan where id = " + id;
   
            s.execute(sql);
   
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
    }
   
    public Hero get(int id) {
        Hero hero = null;
   
        try (Connection c = getConnection(); Statement s = c.createStatement();) {
   
            String sql = "select * from huiyuan where id = " + id;
   
            ResultSet rs = s.executeQuery(sql);
   
            if (rs.next()) {
                hero = new Hero();
                String name = rs.getString(2);
                float age = rs.getInt("age");
                String xingbie = rs.getString(4);
                hero.name = name;
                hero.age = age;
                hero.xingbie = xingbie;
                hero.id = id;
            }
   
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
        return hero;
    }
   
   public List<Hero> list() {
        return list(0, Short.MAX_VALUE);
    }
   
    public List<Hero> list(int start, int count) {
        List<Hero> heros = new ArrayList<Hero>();
   
        String sql = "select * from huiyuan ORDER BY id DESC OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
   
        try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {
   
            ps.setInt(1, start);
            ps.setInt(2, count);
   
            ResultSet rs = ps.executeQuery();
   
            while (rs.next()) {
                Hero hero = new Hero();
                int id = rs.getInt(1);
                String name = rs.getString(2);
                float age = rs.getInt(3);
                String xingbie = rs.getString(4);
                hero.id = id;
                hero.name = name;
                hero.age = age;
                hero.xingbie = xingbie;
                heros.add(hero);
            }
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
        return heros;
    }
   
}

HeroAddServlet.java

package servlet;

import bean.Hero;
import dao.HeroDao;

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 java.io.IOException;
import java.util.List;

@WebServlet("/HeroAddServlet")
public class HeroAddServlet extends HttpServlet {

    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    	String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
        float age  =Float.parseFloat(request.getParameter("age"));
        //request.setCharacterEncoding("UTF-8");
        String xingbie = new String(request.getParameter("xingbie").getBytes("ISO-8859-1"),"UTF-8");
        Hero hero = new Hero();
        hero.setName(name);
        hero.setAge(age);
        hero.setXingbie(xingbie);
        new HeroDao().add(hero);

        response.sendRedirect("HeroListServlet");

    }
}

HeroDeleteServlet.java

package servlet;

import dao.HeroDao;

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 java.io.IOException;

@WebServlet("/HeroDeleteServlet")
public class HeroDeleteServlet extends HttpServlet {

    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        int id = Integer.parseInt(request.getParameter("id"));
        new HeroDao().delete(id);

        response.sendRedirect("HeroListServlet");

    }
}

HeroEditServlet.java

package servlet;

import bean.Hero;
import dao.HeroDao;

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 java.io.IOException;

@WebServlet("/HeroEditServlet")
public class HeroEditServlet extends HttpServlet {

    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        int id = Integer.parseInt(request.getParameter("id"));
        Hero hero =new HeroDao().get(id);
        request.setAttribute("hero", hero);
        request.getRequestDispatcher("editHero.jsp").forward(request, response);
    }
}

HeroUpdateServlet.java

package servlet;

import bean.Hero;
import dao.HeroDao;

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 java.io.IOException;

@WebServlet("/HeroUpdateServlet")
public class HeroUpdateServlet extends HttpServlet {

    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    	//request.setCharacterEncoding("UTF-8");
        String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
        float age  =Float.parseFloat(request.getParameter("age"));
        int id  = Integer.parseInt(request.getParameter("id"));
        String xingbie = new String(request.getParameter("xingbie").getBytes("ISO-8859-1"),"UTF-8");
        Hero hero = new Hero();
        hero.setName(name);
        hero.setAge(age);
        hero.setXingbie(xingbie);
       hero.setId(id);
        new HeroDao().update(hero);

        response.sendRedirect("HeroListServlet");

    }
}

HeroListServlet.java

package servlet;

import java.io.IOException;
import java.util.List;

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 bean.Hero;
import dao.HeroDao;
/**
 * Servlet implementation class HeroListServlet
 */
@WebServlet("/HeroListServlet")

 
public class HeroListServlet extends HttpServlet {
 
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    List<Hero> heros = new HeroDao().list();
        request.setAttribute("heros", heros);
        request.getRequestDispatcher("listHero.jsp").forward(request, response);
 
    }
}

editHero.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" import="java.util.*"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>


<div style="margin:50px auto; width:300px">
    <form action="HeroUpdateServlet" method="post">
        name:&nbsp;&nbsp;<input name="name" value="${hero.name}"> <br><br>
        age:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input name="age" value="${hero.age}"><br> <br>
        xingbie:&nbsp;&nbsp;<input name="xingbie" value="${hero.xingbie}">
        <br>

        <input type="hidden" name = "id" value="${hero.id}">
        <input type="submit" value="提交">
    </form>
</div>

listHero.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
 
<table align='center' border='1' cellspacing='0'>
    <tr>
        <td>id</td>
        <td>姓名</td>
        <td>年龄</td>
        <td>性别</td>
        <td>edit</td>
        <td>delete</td>
    </tr>
    <c:forEach items="${heros}" var="hero" varStatus="st">
        <tr>
            <td>${hero.id}</td>
            <td>${hero.name}</td>
            <td>${hero.age}</td>
            <td>${hero.xingbie}</td>
            <td><a href="HeroEditServlet?id=${hero.id}">edit</a></td>
            <td><a href="HeroDeleteServlet?id=${hero.id}">delete</a></td>
        </tr>
    </c:forEach>
</table>
<div style="margin:50px auto; width:300px">
    <form action="HeroAddServlet" method="post">
        name:&nbsp;&nbsp;<input name="name"> <br><br>
        age:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input name="age"><br><br>
        xingbie:&nbsp;&nbsp;<input name="xingbie"> <br><br>
        <br>
        <input type="submit" value="提交">
    </form>

</div>

错误1:

 解决方法:这是由于导入教程源代码后,教程中采用的是配置xml,而我最开始既没有配置xml,也忘记添加servlet注释,所以出现了该错误。

 错误2:

 解决方法:找不到相应文件,是路径出现了问题;通过查看教程源代码,可以发现它是在xml配置中设置了servlet以及对应的url,而我采用的是servlet注释的方式,所以找不到listHero等url路径,需要把相应位置的路径改为servlet注释的路径,如HeroListServlet等即可解决。

错误3:无法通过jsp提交页面将信息提交到数据库中,每次点击提交后数据库数据无变化,但可以正常delete。并报出如下图的错

 上网查找资料,发现是因为教程代码是针对my sql数据库的,而在连接sql server数据库中有些许区别。

解决方法:

 果然,当我将HeroDao.java中add方法源代码中的String sql = "insert into huiyuan values(null,?,?,?)";改为String sql = "insert into huiyuan values(?,?,?)";再运行便可以成功提交到数据库。

错误4:提交成功后,不管是在jsp页面显示出来,还是在数据库中,中文字符均出现了乱码的情况

 解决方法:按照Web应用技术(第八周/第5次练习/2h)_liukuande的博客-CSDN博客中所介绍的第三个方法将程序相关改为如下:

 最后编辑成功数据提交到数据库,中文字符也能正确显示出来。

错误5:点击edit按钮,在编辑页面并不能显示value值,而是一片空白

 解决方法:先在editHero.jsp中value随便输入一个信息,结果发现能显示出来;又仔细看了才发现是value值应该是hero.name,但是之前写的是huiyuan.name所以显示不出来,修改过来便可显示了。注意:value值这里不应该是数据表的表名,而是前面HeroListServlet.java中 Hero hero =new HeroDao().get(id);的对象名hero。

 错误6:在好不容易解决以上所有问题后,在编辑后提交仍然不能将更新数据显示到数据库中;由于之前的经验,所以我初步判断这里也是由于在HeroDao.java的update方法中,sql server和my sql有一些区别导致的。

解决方法:没有更改其他的值,当我今天再重新打开时,发现edit数据能够成功的提交到数据库

经历了不断地找错过程后,本次练习的查找添加更新删除都成功运行出来。功夫不负有心人,每次隔段时间再找到之前错误原因,成功运行出来还是很有成就感的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值