1.运行mysql数据库(之前没关闭mysql数据库的可省略)
2.在MYSQL-front新建一个名为hero的数据库
3.按要求下载好j2ee.rar案例并解压,并将其中一些文件拷贝到IDEA项目里的lib中,再导入必须的servlet-api.jar包
4.进行查询操作
作为控制器的HeroListServlet.java,其作用就是通过HeroDAO获取所有的heros对象,然后放在request中,跳转到listHero.jsp。
Hero.java文件代码:
package com.pjn.bean; public class Hero { public int id; public String name; public float hp; public int damage; 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 getHp() { return hp; } public void setHp(float hp) { this.hp = hp; } }
HeroDAO.java文件代码:
package com.pjn.dao; import com.pjn.bean.Hero; import java.sql.*; import java.util.ArrayList; import java.util.List; public class HeroDAO { public HeroDAO() { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public Connection getConnection() throws SQLException { return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "123456"); } public int getTotal() { int total = 0; try (Connection c = getConnection(); Statement s = c.createStatement();) { String sql = "select count(*) from hero"; 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 hero values(null,?,?,?)"; try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) { ps.setString(1, hero.name); ps.setFloat(2, hero.hp); ps.setInt(3, hero.damage); 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 hero set name= ?, hp = ? , damage = ? where id = ?"; try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) { ps.setString(1, hero.name); ps.setFloat(2, hero.hp); ps.setInt(3, hero.damage); 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 hero 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 hero where id = " + id; ResultSet rs = s.executeQuery(sql); if (rs.next()) { hero = new Hero(); String name = rs.getString(2); float hp = rs.getFloat("hp"); int damage = rs.getInt(4); hero.name = name; hero.hp = hp; hero.damage = damage; 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 hero order by id desc limit ?,? "; 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 hp = rs.getFloat("hp"); int damage = rs.getInt(4); hero.id = id; hero.name = name; hero.hp = hp; hero.damage = damage; heros.add(hero); } } catch (SQLException e) { e.printStackTrace(); } return heros; } }
HeroListServlet.java文件代码:
package com.pjn.servlet; import com.pjn.bean.Hero; import com.pjn.dao.HeroDAO; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; @WebServlet("/hero.do") public class HeroListServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { List<Hero> heros = new HeroDAO().list(); req.setAttribute("heros", heros); req.getRequestDispatcher("listHero.jsp").forward(req, resp); } }
listHero.jsp 文件代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%> <table align='center' border='1' cellspacing='0'> <tr> <td>id</td> <td>name</td> <td>hp</td> <td>damage</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.hp}</td> <td>${hero.damage}</td> <td><a href="editHero?id=${hero.id}">edit</a></td> <td><a href="deleteHero?id=${hero.id}">delete</a></td> </tr> </c:forEach> </table>
四个文件写完后,调试listHero.jsp 文件,即可在网页中查询到相关数据库
5.对数据表继续进行增删改查的操作
查询文件代码:
<%@ page language="java" import="java.sql.*, java.lang.System" pageEncoding="UTF-8" %> <% try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { out.println("加载数据库驱动时抛出异常,内容如下:"); e.printStackTrace(); } Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost/how2java", "root", "admin"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from hero"); while (rs.next()) { out.println("id:" + rs.getString(1) + " name: " + rs.getString(2) + " hp:" + rs.getString(3) + " damage:" + rs.getString(4) +"<br>"); } rs.close(); stmt.close(); conn.close(); %>
后面每进行一次操作就查看数据表一次,观察操作是否成功
插入文件代码 :
<%@ page language="java" import="java.sql.*" pageEncoding="UTF-8"%> <% try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("加载数据库驱动时抛出异常,内容如下:"); e.printStackTrace(); } Connection conn = DriverManager .getConnection( "jdbc:mysql://localhost/how2java?useUnicode=true&characterEncoding=utf8", "root", "admin"); Statement stmt = conn.createStatement(); int trn = stmt.executeUpdate("insert into hero(name,hp,damage) values('333','11','22')"); out.print("插入成功"+trn+"条"); stmt.close(); conn.close(); %>
插入数据成功后再进行下一步修改操作
修改文件代码:
<%@ page language="java" import="java.sql.*" pageEncoding="UTF-8"%> <% try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("加载数据库驱动时抛出异常,内容如下:"); e.printStackTrace(); } Connection conn = DriverManager .getConnection( "jdbc:mysql://localhost/how2java?useUnicode=true&characterEncoding=utf8", "root", "admin"); Statement stmt = conn.createStatement(); int trn = stmt.executeUpdate("update hero set name='111' where name='333'"); out.print("修改成功"+trn+"条"); stmt.close(); conn.close(); %>
修改数据成功后,再进行下一步的删除操作
删除文件代码:
<%@ page language="java" import="java.sql.*" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>删除操作</title> </head> <body> <% try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("加载数据库驱动时抛出异常,内容如下:"); e.printStackTrace(); } Connection conn = DriverManager .getConnection( "jdbc:mysql://localhost/how2java?useUnicode=true&characterEncoding=utf8", "root", "admin"); Statement stmt = conn.createStatement(); int trn = stmt.executeUpdate("delete from hero where name='111'"); out.print("删除成功"+trn+"条"); stmt.close(); conn.close(); %> </body> </html>
练习总结:本次练习难度稍大, 昨天问题一直没解决,今天才找到解决方案。通过这次练习,对Spring MVC框架有个一些认识,理解到了一些新的知识点,但是还不够熟练,后面还要花点时间对这次练习进行一些优化。