JavaWeb05(删除增加修改功能实现连接数据库)

news/2024/10/17 18:20:32/

目录

一.实现删除功能

1.1 url如何传参?

xx.do?参数=参数值&参数名=参数值

1.2 servlet如何拿对应值?

//根据参数名拿到对应的参数值 

String str = req.getParameter("参数名")

1.3 如何询问?

οnclick="return confirm('确定要删除嘛?')"

1.4 代码分析

1.4.1 前端传参

删除 >

1.4.2 后台业务处理

二.实现增加功能

2.1 效果预览

 2.2 代码实现

2.2.1 前端实现

2.2.2 标识列实现

①触发器+序列

--序列

create sequence seq_goods;

--触发器:前触发

create or replace trigger t_goods

before insert

on tb_goods

for each row 

begin

        :new.gid:=seq_goods.nextval;---插入之前给商品编号列赋值

end;

②取表的最大序号+1

三.实现修改功能

3.1 总思路

3.2 效果预览

3.3 核心代码分析

3.3.1 修改前业务处理(servlet:preupdate.do)

//实例化dao对象  GoodsDao gd = new GoodsDao();

//接收修改的id  String gid=req.getParameter("gid");

//调用单个查询的方法(根据gid拿到商品对象=单个查询)  Goods goods = gd.getGoods(gid);//存起来   req.setAttribute("goods", goods);

 //转发到修改界面进行绑值   req.getRequestDispatcher("update.jsp").forward(req, resp);        

3.3.2 前端页面处理(update.jsp)

①页面显示编号  但不可编辑

商品编号:

商品名称:
 

②页面不显示编号  隐藏域传值

 

     

3.3.3 修改后业务处理(servlet:update.do)

 //重定向跳转去加载并展示数据            resp.sendRedirect("goods.do");        }        else {            out.print("");        }


一.实现删除功能

1.1 url如何传参?

xx.do?参数=参数值&参数名=参数值

1.2 servlet如何拿对应值?

//根据参数名拿到对应的参数值 

String str = req.getParameter("参数名")

1.3 如何询问?

onclick="return confirm('确定要删除嘛?')"

1.4 代码分析

1.4.1 前端传参

<a href="delete.do?gid=${g.gid }" >删除 ></a>

1.4.2 后台业务处理

	//实例化dao对象GoodsDao gd = new GoodsDao();//接收删除的idString gid=req.getParameter("gid");//调用dao方法 连接数据库进行判断/*** 删除商品* @param gid 商品编号* @return 影响行数*/public int delete(String gid) {int n = 0;try {con=DBHelper.getCon();String sql="delete from tb_goods where gid="+gid;ps=con.prepareStatement(sql);n=ps.executeUpdate();} catch (Exception e) {e.printStackTrace();}finally {DBHelper.myClose(con, ps, rs);}return n;}//运用//调用删除的dao方法int n = gd.delete(gid);if(n>0) {//删除成功resp.sendRedirect("goods.do");}else {out.print("<script>alert('删除失败');location.href='goods.do';</script>");}

二.实现增加功能

2.1 效果预览

 2.2 代码实现

2.2.1 前端实现

	//实例化dao对象GoodsDao gd = new GoodsDao();//设置编码方式req.setCharacterEncoding("utf-8");resp.setContentType("text/html; charset=UTF-8");//获取session和outHttpSession session = req.getSession();PrintWriter out = resp.getWriter();//接收表单提交过来的数据(增加)String gname=req.getParameter("gname");String s=req.getParameter("gprice");double gprice=Double.parseDouble(s);String ginfo=req.getParameter("ginfo");//实例化一个对象Goods g = new Goods(gname, gprice, ginfo);//调用增加的dao方法int n = gd.addGoods(g);if(n>0) {//增加成功resp.sendRedirect("goods.do");}else {out.print("<script>alert('增加失败');location.href='add.jsp';</script>");}//dao方法/*** 增加商品* @param g 商品对象* @return 返回影响行数*/public int addGoods(Goods g) {int n = 0;int gid = getID("gid", "tb_goods");g.setGid(gid);try {con=DBHelper.getCon();String sql="insert into tb_goods(gid,gname,gprice,ginfo) values(?,?,?,?)";ps=con.prepareStatement(sql);//给占位符赋值4个ps.setInt(1, g.getGid());ps.setString(2, g.getGname());ps.setDouble(3, g.getGprice());ps.setString(4, g.getGinfo());n=ps.executeUpdate();} catch (Exception e) {e.printStackTrace();}finally {DBHelper.myClose(con, ps, rs);}return n;}

2.2.2 标识列实现

①触发器+序列

--序列

create sequence seq_goods;

--触发器:前触发

create or replace trigger t_goods

before insert

on tb_goods

for each row 

begin

        :new.gid:=seq_goods.nextval;---插入之前给商品编号列赋值

end;

②取表的最大序号+1

/**
     * 获取id
     * @param colName     列名
     * @param tabName 表名
     * @return
     */

    public int getID(String colName,String tabName) {//uuid tb_user
        int n = 0;
        try {
            con=DBHelper.getCon();
            String sql="select nvl(max("+colName+"),0)+1 from "+tabName;
            ps=con.prepareStatement(sql);
            rs=ps.executeQuery();
            if(rs.next()) {
                n=rs.getInt(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBHelper.myClose(con, ps, rs);
        }
        return n;
    }

三.实现修改功能

3.1 总思路

3.2 效果预览

 

3.3 核心代码分析

3.3.1 修改前业务处理(servlet:preupdate.do)

//实例化dao对象
  GoodsDao gd = new GoodsDao();

//接收修改的id
  String gid=req.getParameter("gid");

//调用单个查询的方法(根据gid拿到商品对象=单个查询)
  Goods goods = gd.getGoods(gid);
//存起来
   req.setAttribute("goods", goods);

 //转发到修改界面进行绑值
   req.getRequestDispatcher("update.jsp").forward(req, resp);
        

3.3.2 前端页面处理(update.jsp)

①页面显示编号  但不可编辑

商品编号:<input name="gid"  value="${goods.gid }" readonly="readonly"/><br/><br/>
商品名称:<input name="gname"  value="${goods.gname }"/><br/><br/>

②页面不显示编号  隐藏域传值

 <!-- 隐藏域传值:会随着表单的提交而提交 根据name值拿value值  必须写在表单 -->

      <input type="hidden" name="gid" value="${goods.gid}"/>

3.3.3 修改后业务处理(servlet:update.do)

        //实例化dao对象
        GoodsDao gd = new GoodsDao();
        //设置编码方式
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html; charset=UTF-8");
        
        //获取session和out
        HttpSession session = req.getSession();
        PrintWriter out = resp.getWriter();
        
        //接收表单提交过来的数据(增加)
        String gid=req.getParameter("gid");
        String gname=req.getParameter("gname");
        String s=req.getParameter("gprice");
        double gprice=Double.parseDouble(s);
        String ginfo=req.getParameter("ginfo");
        //实例化一个对象
        Goods g = new Goods(gname, gprice, ginfo);
        //调用修改的dao方法  连接数据库进行判断
        int n = gd.updateGoods(g, gid);
        if(n>0) {//修改成功

        //重定向跳转去加载并展示数据
            resp.sendRedirect("goods.do");
        }
        else {
            out.print("<script>alert('修改失败');location.href='preupdate.do?gid="+gid+"';</script>");
        }


http://www.ppmy.cn/news/59381.html

相关文章

20230501-win10-制作U盘启动盘-firpe

20230501-win10-制作U盘启动盘-firpe 一、软件环境 zh-cn_windows_10_consumer_editions_version_22h2_updated_march_2023_x64_dvd_1e27e10b.isofirpe 1.8.2标签&#xff1a;firpe win10分栏&#xff1a;WINDOWS 二、硬件环境 8G或以上的U盘一个FX86笔记本一台 三、官方下…

自动驾驶中地图匹配定位技术总结

引言 汽车定位是让自动驾驶汽车知道自身确切位置的技术&#xff0c;在自动驾驶系统中担负着相当重要的职责。汽车定位涉及多种传感器类型和相关技术&#xff0c;主要可分为卫星定位、惯性导航定位、地图匹配定位以及多传感器融合定位几大类。其中地图匹配定位技术利用道路物理…

深度学习入门篇1

1. 目前流行的深度学习框架简介 深度学习框架&#xff08;点击跳转&#xff09; 2.神经网络工具箱torch.autograd与torch.nn torch.autograd库虽然实现了自动求导与梯度反向传播&#xff0c;但如果我们要完成一个模型的训练&#xff0c;仍需要手写参数的自动更新、训练过程的…

第六章结构型模式—代理模式

文章目录 代理模式解决的问题概念结构 静态代理动态代理织入的概念JDK 动态代理JDK 动态代理分析 CGLIB 动态代理 三种代理的对比JDK 和 CGLIB 的区别动态代理和静态代理的对比代理模式的优缺点使用场景 结构型模式描述如何将类或对象按某种布局组成更大的结构&#xff0c;有以…

洛谷 P2782 友好城市 线性DP 最长上升子序列 二分查找 lower_bound

&#x1f351; 算法题解专栏 &#x1f351; 洛谷&#xff1a;友好城市 题目描述 有一条横贯东西的大河&#xff0c;河有笔直的南北两岸&#xff0c;岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸&#xff0c;而且不同城市的友好城市不相同。每对…

供应链 | 需求不确定情况下的物料需求规划: 基于随机优化的研究

作者&#xff1a;Simon Thevenin, Yossiri Adulyasak, Jean-Francois Cordeau​ 引用&#xff1a;Thevenin S, Adulyasak Y, Cordeau J F. Material requirements planning under demand uncertainty using stochastic optimization[J]. Production and Operations Management,…

汇编三、51单片机汇编指令1

1、指令格式 (1)举例&#xff1a;将立即数0x30送入累加器A MOV  A, #0x30 标号 操作码 目标地址&#xff0c;数据源 ;注解 (2)标号&#xff0c;注解可选项&#xff0c;不一定有。 2、指令执行时间和指令存储空间 (1)指令执…

解决Matlab在Linux下无法使用hardware OpenGL的问题

解决Matlab在Linux下无法使用hardware OpenGL的问题 1 报错信息 在命令行使用命令matlab -nodesktop -nosplash启动Matlab时&#xff0c;出现如下报错&#xff1a; MATLAB is selecting SOFTWARE OPENGL rendering.在查阅ArchWiki Matlab OpenGL Acceleration栏目后&#xf…