JavaWeb练习补充之修改和模糊查询

修改思维逻辑:

两步:1.数据的回显;2.数据的更新

1.点击修改跳转到servlet,后端根据id查询到该商品的信息;

2.把商品信息添加到request作用域中请求转发到信息展示页面;

3.用户根据需求修改表单中的字段,重新提交表单;

4.编写后端servlet获取用户最新修订的商品信息,执行数据库的修改操作;

5.重新请求查询所有商品,跳转到商品信息主页;

zhuye.jsp页面:添加修改a标签

 showGoods.jsp页面:编写商品修改页面

<html>
<head>
    <title>商品信息修改</title>
</head>
<body>
<h2>商品信息修改</h2>
<form action="updateGoods" method="post">
    商品编号:<input type="text" name="gid" value="${goods.gid}" readonly="readonly" placeholder="商品编号"><br/>
    商品名称:<input type="text" name="gname" value="${goods.gname}" placeholder="商品名称"><br/>
    商品价格:<input type="number" name="price" step="0.01" value="${goods.price}" placeholder="商品价格"><br/>
    商品说明:<input type="text" name="mark" value="${goods.mark}" placeholder="商品说明"><br/>
    <input type="submit" value="修改">
</form>
</body>
</html>

GoodsDao.java页面:1.添加selectById()方法执行JDBC查询操作

public Goods selectById(int gid) {
        Goods goods = null;
            try {
                //加载驱动
                Class.forName(driver);
                //获取连接
                con = DriverManager.getConnection(url, user, password);
                //编写sql语句
                String sql = "select * from t_goods where gid = ?";
                ps = con.prepareStatement(sql);
                ps.setObject(1,gid);
                rs = ps.executeQuery();
                if (rs.next()) {
                    goods = new Goods();
                    goods.setGid(rs.getInt("gid"));
                    goods.setGname(rs.getString("gname"));
                    goods.setPrice(rs.getDouble("price"));
                    goods.setMark(rs.getString("mark"));
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (rs != null) {
                        rs.close();
                    }
                    if (ps != null) {
                        ps.close();
                    }
                    if (con != null) {
                        con.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return goods;
        }

 2.编写JDBC根据id修改操作

public int update(Goods goods){
            try {
                //加载驱动
                Class.forName(driver);
                //获取连接
                con = DriverManager.getConnection(url, user, password);
                //编写sql语句
                String sql = "update t_goods set gname=?,price=?,mark=? where gid =?";
                ps = con.prepareStatement(sql);
                ps.setObject(1,goods.getGname());
                ps.setObject(2,goods.getPrice());
                ps.setObject(3,goods.getMark());
                ps.setObject(4,goods.getGid());
                row = ps.executeUpdate();
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                try {
                    if (ps != null) {
                        ps.close();
                    }
                    if (con != null) {
                        con.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        return row;
        }

FindById.java页面:地址请求;根据id获取商品信息

package com.su.servlet;

import com.su.Bean.Goods;
import com.su.dao.GoodDao;

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("/findById")//地址请求

public class FindById extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取gid
        int gid = Integer.parseInt(request.getParameter("gid"));//强制转换
        //根据gid查询商品信息
        GoodDao goodsDao = new GoodDao();//实例化一个对象
        Goods goods = goodsDao.selectById(gid);//调用方法
        //
        if(goods!=null){
            //查询商品信息成功,存入request域中,然后请求转发到页面展示数据
            request.setAttribute("goods",goods);
            request.getRequestDispatcher("showGoods.jsp").forward(request,response);

        }else{
            request.setAttribute("error_msg","修改出了异常!");
            request.getRequestDispatcher("error.jsp").forward(request,response);
        }

    }
}

 UpdateGoods.java:地址请求;获取数据,封装

package com.su.servlet;

import com.su.Bean.Goods;

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("/updateGoods")

public class UpdateGoods extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码格式
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");//设置响应的编码格式
        //获取表单提交的数据,封装到goods对象中
        Goods goods=new Goods();
        goods.setGid(Integer.parseInt(request.getParameter("gid")));
        goods.setGname(request.getParameter("gname"));
        goods.setPrice(Double.parseDouble(request.getParameter("price")));
        goods.setMark(request.getParameter("mark"));
        //输出
        System.out.println(goods);
        //执行数据库JDBC修改操作
        GoodDao goodsDao = new GoodDao();
        int row = goodsDao.update(goods);

        if (row>0){
            request.getRequestDispatcher("selectAllGoods").forward(request,response);
        }else{
            request.setAttribute("error_msg","修改出现问题!");
            request.getRequestDispatcher("error.jsp").forward(request,response);
        }
    }
}

登录后跳转到主页,点击修改跳转到商品修改页面 

 

点击修改,跳到主页并刷新数据; 

控制台日志

模糊查询思维逻辑:

1.在zhuye.jsp定义搜索的表单页面,请求地址;

2.在GoodsDao.java页面定义seach方法,编写JDBC模糊查询,便于调用;

public List<Goods> seach(String keyword){
        List<Goods> goodsList = new ArrayList<>();
        try {
            //加载驱动
            Class.forName(driver);
            //获取连接
            con = DriverManager.getConnection(url, user, password);
            //编写sql语句
            String sql = "select * from t_goods where gname like concat('%',?,'%')";
            ps = con.prepareStatement(sql);
            ps.setObject(1,keyword);
            rs = ps.executeQuery();
            while (rs.next()) {
                Goods goods = new Goods();
                goods.setGid(rs.getInt("gid"));
                goods.setGname(rs.getString("gname"));
                goods.setPrice(rs.getDouble("price"));
                goods.setMark(rs.getString("mark"));
                goodsList.add(goods);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (ps != null) {
                    ps.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return goodsList;
    }

3.Seach.java中地址请求,获取用户搜索的关键词,执行模糊查询,把查询到的商品信息存到session中起别名,之后跳转到主页展示信息;

@WebServlet("/seach")
public class Seach extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码格式
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        //获取表单提交的数据,封装到goods对象中
        String keyword = request.getParameter("keyword");
        //执行数据库JDBC模糊查询
        GoodDao goodsDao = new GoodDao();
        List<Goods> goodsList = goodsDao.seach("%" + keyword + "%");
        System.out.println(goodsList);
        //把模糊查询到的商品信息集合存储到session中
        HttpSession session= request.getSession();
        session.setAttribute("goodsList",goodsList);
        //跳转到主页进行信息展示
        response.sendRedirect("zhuye.jsp");
    }
}

在文本框输入查询的关键词,点击搜索

点击搜索后,查询出包含关键词的商品信息

 

控制台日志信息 

 

 

 

 

  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值