完成添加更新删除操作
在这个练习过程中,即使是导入的教程中的代码,但还是遇到了很多的错误,也花了很长时间找错。
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: <input name="name" value="${hero.name}"> <br><br>
age: <input name="age" value="${hero.age}"><br> <br>
xingbie: <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: <input name="name"> <br><br>
age: <input name="age"><br><br>
xingbie: <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数据能够成功的提交到数据库
经历了不断地找错过程后,本次练习的查找添加更新删除都成功运行出来。功夫不负有心人,每次隔段时间再找到之前错误原因,成功运行出来还是很有成就感的。