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

news2024/12/22 18:42:58

目录

一.实现删除功能

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();
    //接收删除的id
		String 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和out
		HttpSession 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.coloradmin.cn/o/482184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

区位码-GB2312

01-09区为特殊符号 10-15区为用户自定义符号区&#xff08;未编码&#xff09; 16-55区为一级汉字&#xff0c;按拼音排序 56-87区为二级汉字&#xff0c;按部首/笔画排序 88-94区为用户自定义汉字区&#xff08;未编码&#xff09; 特殊符号 区号:01 各类符号 0 1 2 3 4 …

I/O多路转接——epoll服务器代码编写

目录 一、poll​ 二、epoll 1.epoll 2.epoll的函数接口 ①epoll_create ②epoll_ctl ③epoll_wait 3.操作原理 三、epoll服务器编写 1.日志打印 2.TCP服务器 3.Epoll ①雏形 ②InitEpollServer 与 RunServer ③HandlerEvent 四、Epoll的工作模式 1.LT模式与ET…

第二十一章 光源

光源是每个场景必不可少的部分&#xff0c;光源除了能够照亮场景之外&#xff0c;还可以产生阴影效果。 Unity中分为四种光源类型&#xff1a; 1. 方向光&#xff1a;Directional Light 用于模拟太阳光&#xff0c;方向光任何地方都能照射到。 2. 点光源&#xff1a;Point L…

JavaWeb-Servlet【内含思维导图】

目录 Servlet思维导图​编辑 1.什么是Servlet 2.Servelt概述 3.Servlet-Quickstart Your Project 3.1创建一个Web项目&#xff0c;导入Servlet依赖 3.1.1 选择Servlet导入依赖 3.1.2 导入Servlet依赖 3.2 在Web项目&#xff0c;定义类&#xff0c;实现Servlet接口…

Java8新特性-流式操作

在Java8中提供了新特性—流式操作&#xff0c;通过流式操作可以帮助我们对数据更快速的进行一些过滤、排序、去重、最大、最小等等操作并且内置了并行流将流划分成多个线程进行并行执行&#xff0c;提供更高效、快速的执行能力。接下来我们一起看看Java8为我们新增了哪些便捷呢…

Python基础合集 练习19(类与对象3(多态))

多态 class Horse: def init(self, name) -> None: self.name name def fature(self):return 父亲-----马的名字: {0}.format(self.name)def mover(self):print(马儿跑起来很潇洒)class Monkey: def init(self, name) -> None: self.name name def fature(self):ret…

《用于准确连续非侵入性血压监测的心跳内生物标志物》阅读笔记

目录 0 基础知识 1 论文摘要 2 论文十问 3 实验结果 4 论文亮点与不足之处 5 与其他研究的比较 6 实际应用与影响 7 个人思考与启示 参考文献 0 基础知识 非侵入性是指在进行医学检查或治疗时&#xff0c;不需要切开皮肤或穿刺体内组织&#xff0c;而是通过外部手段进…

【VQGAN论文精读】Taming Transformers for High-Resolution Image Synthesis

【VQGAN论文精读】Taming Transformers for High-Resolution Image Synthesis 0、前言Abstract1. Introduction2. Related Work3. Approach3.1. Learning an Effective Codebook of Image Constituents for Use in Transformers学习一个有效的图像成分的Codebook为了在Transfor…

高性能:负载均衡

目录 什么是负载均衡 负载均衡分类 服务端负载均衡 服务端负载均衡——软硬件分类 服务端负载均衡——OSI模型分类 客户端负载均衡 负载均衡常见算法 七层负载均衡做法 DNS解析 反向代理 什么是负载均衡 将用户请求分摊&#xff08;分流&#xff09; 到不同的服务器上…

小记Java调用C++开发的动态链接库(DLL)

一、背景 五一快乐吖&#xff01;死肥宅正趁着五一这段时间&#xff0c;努力提升自己&#xff01; 最近使用Java拦截Windows系统中一些默认事件时&#xff0c;发现了一些瓶颈。 我用Java操作浏览器、用Java最小化其他应用窗口&#xff0c;但是我发现这个操作&#xff0c;他都…

【Unity-UGUI控件全面解析】| InputField 输入框组件详解

🎬【Unity-UGUI控件全面解析】| InputField 输入框组件详解一、组件介绍二、组件属性面板2.1 Content Type(内容类型)三、代码操作组件四、组件常用方法示例4.1 代码限制输入字符4.2 校验文本输入格式4.3 校验输入文本长度💯总结🎬 博客主页:https://xiaoy.blog.csdn.…

话说【永恒之塔sf】里面最有前途的职业:商人

如果有人问我永恒之塔里面什么职业最有前途&#xff01;那我告诉你就是商人&#xff01; 做一个NB商人比拥有一身牛b装备要更有成就感。 在老区由于进入的比较晚&#xff0c;所以最后随了大流被淹死在千万基纳中。为了证明商人在永恒之塔是钱途无量的&#xff0c;我转到了新区—…

快解析动态域名解析,实现外网访问内网数据库

今天跟大家分享一下如何借助快解析动态域名解析&#xff0c;在两种特定网络环境下&#xff0c;实现外网访问内网mysql数据库。 第1种网络环境&#xff1a;路由器分配的是动态公网IP&#xff0c;且有路由器登录管理权限。如何实现外网访问内网mysql数据库&#xff1f; 针对这种…

IDEA2022版教程上()

0、前景摘要 0.1 概览 0.2 套课程适用人群 初学Java语言&#xff0c;熟悉了记事本、EditPlus、NotePad或Sublime Text3等简易开发工具的Java初学者熟练使用其他Java集成开发环境&#xff08;IDE&#xff09;&#xff0c;需要转向IDEA工具的Java工程师们关注IDEA各方面特性的J…

Hadoop大数据分析技术(伪分布式搭建)

一.安装JDK和配置SSH免密登录 &#xff08;1&#xff09;准备软件 &#xff08;2&#xff09;解压压缩包 tar -zxvf jdk-8u221-linux-x64.tar.gz &#xff08;3&#xff09;在此处我们配置系统环境变量&#xff0c;使用命令&#xff1a; vim /etc/profile &#xff08;4&#x…

Python入门教程(高级版)

Python用了好几年了&#xff0c;但似乎一直没 “系统入门” 过&#xff08;o(╯□╰)o&#xff09;。今年&#xff08;2023年&#xff09;趁着五一假期&#xff0c;我做了一次相对完整的 “入门” ——本文是这次学习历程的详细记录。 目录 1 Python基础1.1 Python1.1.1 认识Py…

Oracle VM VirtualBox安装centos7步骤 for win10

目录 1.安装VirtualBox 2.安装vagrant 3.安装centos7 4.查看网络与百度和物理机连通情况 5.设置IP 1.安装VirtualBox 下载的链接:Downloads – Oracle VM VirtualBox 2.安装vagrant 根据自己的操作系统选择对应的版本。 Install | Vagrant | HashiCorp Developer 我的P…

asp.net+sqlserver旅游网站zjy99A2

1&#xff0e;系统登录&#xff1a;系统登录是用户访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括用户名、密码和验证码&#xff0c;然后对登录进来的用户判断身份信息&#xff0c;判断是管理员用户还是普通用户。 2&#xff0e;系统用户管理&#xff1a;不管是…

redis使用总结

目录 redis安装与登录redis 持久化RDB(Redis DataBase)AOF(Append Only File)RDB-AOF混合持久纯缓存模式 redis 的 keyredis 的数据类型和常见应用场景StringListHashMapSet集合ZSet有序集合bitmap位图HyperLogLog基数统计GEO 地理空间Stream 流bitfiled redis 事务事务的正常执…

《基于EPNCC的脉搏信号特征识别与分类研究》阅读笔记

目录 一、论文摘要 二、论文十问 三、论文亮点与不足之处 四、与其他研究的比较 五、实际应用与影响 六、个人思考与启示 参考文献 一、论文摘要 为了快速获取脉搏信号的完整表征信息并验证脉搏信号在相关疾病临床诊断中的敏感性和有效性。在本文中&#xff0c;提出了一…