后端(实例)08

设计一个前端在数据库调取数据的表格,并完成基础点击增删改查的功能:

1.首先写一个前端样式(空壳)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="jQuery/jquery.js"></script>
<script>
   //待填写
</script>
    <style>
        *{
            margin: 0%;
            padding: 0%;
        }
        .body{
            background: #ddd;
            width:400px;
            height:300px;
            margin: 200px auto;
            border-radius: 20px;
        }
        .top{
            display: flex;
            margin:20px 0;
            padding: 10px;
            justify-content: space-between;
            background: lightblue;
            border-radius: 30px;
        }
        .top h3{
            font-weight: 500;
            margin: 0 10px;
        }
        table{
        	text-align: center;
            margin: 20px 30px;
            height:180px;
            width:80%;
        }
        li{
            list-style: none;
        }
        .to{
            background:#8e3b3b1a;
            width:300px;
            height:150px;
            line-height: 30px;
            margin:-120px auto;
            display: none; 
        }
        .ch{
            background:#8e3b3b1a;
            width:300px;
            height:150px;
            line-height: 30px;
            margin:-120px auto;
            display: none; 
        }
    </style>
</head>
<body>
    <div class="body">
        <div class="top">
            <h3>商品名称:</h3>
            <input type="text" placeholder="请输入商品名称"  class="input">
            <input type="button" value="查找" class="search">
            <input type="button" value="添加" class="add">
        </div>
        <table border="1">
              <thead>
                <tr>
                  <th>商品名称</th>
                  <th>数量</th>
                  <th>价格</th>
                  <th>操作</th>
               </tr>
              </thead>
              <tbody>
            <tr>
                <td>name</td>
                <td>count</td>
                <td>price</td>
                <td>
                    <input type="button" value="修改">
                    <input type="button" value="删除">
                </td>
            </tr>
           </tbody>
        </table>
     </div>
     <div class="to"> <!-- 添加模块--实现点击出现,完成添加或取消操作后消失 -->
        <ul>
            <li>商品名称: <input type="text" class="name"></li>
            <li>商品数量: <input type="text" class="count"></li>
            <li>商品价格: <input type="text" class="price"></li>
            <li><input type="button" value="添加商品" class="end"></li>
            <li><input type="button" value="取消" class="no"></li>
        </ul>
    </div>
     <div class="ch">  <!-- 修改模块--实现点击出现,完成修改或取消操作后消失 -->
        <ul>
            <li>商品名称: <input type="text" class="name_c"></li>
            <li>商品数量: <input type="text" class="count_c"></li>
            <li>商品价格: <input type="text" class="price_c"></li>
            <li><input type="button" value="修改商品" class="end_c"></li>
            <li><input type="button" value="取消" class="no_c"></li>
        </ul>
    </div>
</body>
</html>

2.开始第一步:查数据--即在数据库中调出所需表格放入前端界面中

 $.ajax({
			url:"buy_list",
			type:"get",
			data:{
				
			},  
			success:function(value){
				$("tbody").empty()//清空
				var arr=value.data
				for (var i=0;i<arr.length;i++){
                  //添加到前端界面
					$("tbody").append(
							    "<tr>"+
				          		"<td>"+arr[i].name+"</td>"+
				           		"<td>"+arr[i].count+"</td>"+
				           		"<td>"+arr[i].price+"</td>"+
				          		"<td><input type='button' value='删除' class='delete' index='"+arr[i].name+"'><input type='button' class='change' value='修改' index='"+arr[i].name+"'></td>"+
				       		"</tr>")
				    }
			},
			error:function(){
				alert("请求失败!");
			},
	   })

对应Java(此处只给出关键部分,也就是doget部分) 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//解决中文乱码问题
				request.setCharacterEncoding("utf-8");
				response.setCharacterEncoding("utf-8");		
				response.setContentType("text/json;charset=utf-8");
				 System.out.println("接受到啦!");
				String sql="select * from buy_list";
				String[] colums= {"name","count","price"};
				String res =MysqlUtil.getJsonBySql(sql, colums);
				System.out.println(res);
				//后端给前端返回数据
				response.getWriter().write(res);
	}

3.删除模块

 $("tbody").on("click",".delete",function(){//注意:绑定的delete按钮是后生成的,所以绑定事件形式采取这种格式进行书写
		  //alert($(this).attr("index"))
		  var name=$(this).attr("index")
		   //删除
	      $.ajax({
			url:"delete",
			type:"post",
			data:{
				name
			},  
			success:function(value){
				alert(value)
				//刷新操作
				location.reload()
			},
			error:function(){
				alert("请求失败!");
			},
	   })
	})

删除模块所对应的Java文件内部:(此处只给出关键部分,也就是dopost部分)

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");		
		System.out.println("接受到了post");
		String name=request.getParameter("name");
		System.out.println("name");
		//删除
		String sql="delete from buy_list where name='"+name+"'";
		//注意:这里的name位置,需要被两个引起来
		int num = MysqlUtil.del(sql);
		//返回信息
		String res ="删除失败";
		if(num>0) {
			res="删除成功";
		}
		//后端给前端返回数据
		response.getWriter().write(res);
	}

4.添加模块

  //添加
	   $(".end").on("click",function(){
		   var add_name=$(".name").val()
		   var add_count=$(".count").val()
		   var add_price=$(".price").val()
		   console.log(add_name)
		   console.log(add_count)
		   console.log(add_price)
		  $.ajax({
			url:"add",
			type:"post",
			data:{
				add_name,
				add_count,
				add_price
			},  
			success:function(value){
				alert(value)
				//刷新操作
				location.reload()
			},
			error:function(){
				alert("请求失败!");
			},
	   })
	 })

对应Java部分(同样只给出关键的dopost部分)

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");	
		
		System.out.println("add");
		
		String name=request.getParameter("add_name");
		String count=request.getParameter("add_count");
		String price=request.getParameter("add_price");
		
		//添加
		String sql="insert into buy_list(name,count,price) values(\""+name+"\","+count+","+price+")";
		
		int num=MysqlUtil.add(sql);
		//返回信息
		String res ="添加失败";
		if(num>0) {
			res="添加成功";
		}
		//后端给前端返回数据
		response.getWriter().write(res);		
		
	}

5.修改部分较为特殊(增加了一步查找并返回原数据的操作)

 //隐藏修改
	   $(".no_c").on("click",function(){
		   $(".ch").css("display","none")
	   })
	   //回显(点击修改后的操作)
	  $("tbody").on("click",".change",function(){
		  $(".to").css("display","none")
		  $(".ch").css("display","block")
		  var name=$(this).attr("index")
		  $.ajax({
				url:"change",//在change中写入后端代码
				type:"get",
				data:{
					name
				},  
				success:function(value){
					var obj=value.data[0]//获取返回值(有且只有一条,所以是data[0])
					console.log(obj)
					//让获取的返回值添加到输入框的位置,即回显
					$(".name_c").val(obj.name)
				    $(".count_c").val(obj.count)
				    $(".price_c").val(obj.price)
					$(".end_c").attr("index",obj.name)
				},
				error:function(){
					alert("请求失败!");
				},
		   })
	  })
	   //修改
	   $(".end_c").on("click",function(){ 
		   //获取回显显示在输入框内返回值
		   var addname=$(".name_c").val()
		   var addcount=$(".count_c").val()
		   var addprice=$(".price_c").val()
		   var name=$(this).attr("index")
		   //验证 //console.log(addname)
		  $.ajax({
			url:"change_end",
			type:"post",
			data:{
				addname,
				addcount,
				addprice,
				name
			},  
			success:function(value){
				alert(value)
				//刷新操作
				location.reload()
			},
			error:function(){
				alert("请求失败!");
			},
	   })
	   //修改完成后,隐藏修改模块
	    $(".ch").css("display","none")
	   })
	

对应Java代码(回显)

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	  
    //  解决中文乱码
      request.setCharacterEncoding("utf-8");
      response.setCharacterEncoding("utf-8");
    //  设置后端给前端返回的数据为json格式(因为返回对象类型的值了)
      response.setContentType("text/json;charset=utf-8");
      String name=request.getParameter("name");
    //  查找
      String sql="select * from buy_list where name = \""+name+"\"";
      String[] colums= {"name","count","price"};
      String res=MysqlUtil.getJsonBySql(sql, colums);
      System.out.println(res);
    //  后端给前端返回数据
      response.getWriter().write(res);
     }

对应Java代码(修改)

【注:空格的书写规范】

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//解决乱码问题
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		
		String name=request.getParameter("name");
		String addname =request.getParameter("addname");
		String addcount=request.getParameter("addcount");
		String addprice=request.getParameter("addprice");
		System.out.println("name");
		
		//【注意:替换成外部数据+ +后一定要注意保留原有的空格问题】
		String sql="update buy_list set name=\""+addname+"\",count="+addcount+",price="+addprice+" where name=\""+name+"\"";

		//注意:这里的name位置,需要被两个引起来
		int num = MysqlUtil.update(sql);
		//返回信息
		String res ="修改失败";
		if(num>0) {
			res="修改成功";
		}
		//后端给前端返回数据
		response.getWriter().write(res);
	
	}

完整版HTML文件:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="jQuery/jquery.js"></script>
<script>
   $(function(){
	   $.ajax({
			url:"buy_list",
			type:"get",
			data:{
				
			},  
			success:function(value){
				$("tbody").empty()//清空
				var arr=value.data
				for (var i=0;i<arr.length;i++){
					$("tbody").append(
							    "<tr>"+
				          		"<td>"+arr[i].name+"</td>"+
				           		"<td>"+arr[i].count+"</td>"+
				           		"<td>"+arr[i].price+"</td>"+
				          		"<td><input type='button' value='删除' class='delete' index='"+arr[i].name+"'><input type='button' class='change' value='修改' index='"+arr[i].name+"'></td>"+
				       		"</tr>")
				    }
			},
			error:function(){
				alert("请求失败!");
			},
	   })
	   
	   $("tbody").on("click",".delete",function(){
		  //alert($(this).attr("index"))
		  var name=$(this).attr("index")
		   //删除
	      $.ajax({
			url:"delete",
			type:"post",
			data:{
				name
			},  
			success:function(value){
				alert(value)
				//刷新操作
				location.reload()
			},
			error:function(){
				alert("请求失败!");
			},
	   })
	})
	   //显示添加模块
	   $(".add").on("click",function(){
		   $(".to").css("display","block")
		   $(".ch").css("display","none")
	   })
	   //隐藏添加模块
	    $(".end").on("click",function(){
		   $(".to").css("display","none")
	   })
	   $(".no").on("click",function(){
		   $(".to").css("display","none")
	   })
	
	   //添加
	   $(".end").on("click",function(){
		   var add_name=$(".name").val()
		   var add_count=$(".count").val()
		   var add_price=$(".price").val()
		   console.log(add_name)
		   console.log(add_count)
		   console.log(add_price)
		  $.ajax({
			url:"add",
			type:"post",
			data:{
				add_name,
				add_count,
				add_price
			},  
			success:function(value){
				alert(value)
				//刷新操作
				location.reload()
			},
			error:function(){
				alert("请求失败!");
			},
	   })
	 })
	   //隐藏修改
	   $(".no_c").on("click",function(){
		   $(".ch").css("display","none")
	   })
	   //回显(点击修改后的操作)
	  $("tbody").on("click",".change",function(){
		  $(".to").css("display","none")
		  $(".ch").css("display","block")
		  var name=$(this).attr("index")
		  $.ajax({
				url:"change",//在change中写入后端代码
				type:"get",
				data:{
					name
				},  
				success:function(value){
					var obj=value.data[0]//获取返回值(有且只有一条,所以是data[0])
					console.log(obj)
					//让获取的返回值添加到输入框的位置,即回显
					$(".name_c").val(obj.name)
				    $(".count_c").val(obj.count)
				    $(".price_c").val(obj.price)
					$(".end_c").attr("index",obj.name)
				},
				error:function(){
					alert("请求失败!");
				},
		   })
	  })
	   //修改
	   $(".end_c").on("click",function(){ 
		   //获取回显显示在输入框内返回值
		   var addname=$(".name_c").val()
		   var addcount=$(".count_c").val()
		   var addprice=$(".price_c").val()
		   var name=$(this).attr("index")
		   //验证 //console.log(addname)
		  $.ajax({
			url:"change_end",
			type:"post",
			data:{
				addname,
				addcount,
				addprice,
				name
			},  
			success:function(value){
				alert(value)
				//刷新操作
				location.reload()
			},
			error:function(){
				alert("请求失败!");
			},
	   })
	   //修改完成后,隐藏修改模块
	    $(".ch").css("display","none")
	   })
	
	   
 })
</script>
    <style>
        *{
            margin: 0%;
            padding: 0%;
        }
        .body{
            background: #ddd;
            width:400px;
            height:300px;
            margin: 200px auto;
            border-radius: 20px;
        }
        .top{
            display: flex;
            margin:20px 0;
            padding: 10px;
            justify-content: space-between;
            background: lightblue;
            border-radius: 30px;
        }
        .top h3{
            font-weight: 500;
            margin: 0 10px;
        }
        table{
        	text-align: center;
            margin: 20px 30px;
            height:180px;
            width:80%;
        }
        li{
            list-style: none;
        }
        .to{
            background:#8e3b3b1a;
            width:300px;
            height:150px;
            line-height: 30px;
            margin:-120px auto;
            display: none; 
        }
        .ch{
            background:#8e3b3b1a;
            width:300px;
            height:150px;
            line-height: 30px;
            margin:-120px auto;
            display: none; 
        }
    </style>
</head>
<body>
    <div class="body">
        <div class="top">
            <h3>商品名称:</h3>
            <input type="text" placeholder="请输入商品名称"  class="input">
            <input type="button" value="查找" class="search">
            <input type="button" value="添加" class="add">
        </div>
        <table border="1">
              <thead>
                <tr>
                  <th>商品名称</th>
                  <th>数量</th>
                  <th>价格</th>
                  <th>操作</th>
               </tr>
              </thead>
              <tbody>
            <tr>
                <td>name</td>
                <td>count</td>
                <td>price</td>
                <td>
                    <input type="button" value="修改">
                    <input type="button" value="删除">
                </td>
            </tr>
           </tbody>
        </table>
     </div>
     <div class="to"> <!-- 添加模块--实现点击出现,完成添加或取消操作后消失 -->
        <ul>
            <li>商品名称: <input type="text" class="name"></li>
            <li>商品数量: <input type="text" class="count"></li>
            <li>商品价格: <input type="text" class="price"></li>
            <li><input type="button" value="添加商品" class="end"></li>
            <li><input type="button" value="取消" class="no"></li>
        </ul>
    </div>
     <div class="ch">  <!-- 修改模块--实现点击出现,完成修改或取消操作后消失 -->
        <ul>
            <li>商品名称: <input type="text" class="name_c"></li>
            <li>商品数量: <input type="text" class="count_c"></li>
            <li>商品价格: <input type="text" class="price_c"></li>
            <li><input type="button" value="修改商品" class="end_c"></li>
            <li><input type="button" value="取消" class="no_c"></li>
        </ul>
    </div>
</body>
</html>

结果:

【注:此处只给出了一个简单的css样式,详细可见style部分】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/883332.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习之开发环境(CUDA、Conda、Pytorch)准备(4)

目录 1.CUDA 介绍 1.1 CUDA 的基本概念 1.2 CUDA 的工作原理 1.3 CUDA 的应用领域 2. 安装CUDA 2.1 查看GPU版本 2.2 升级驱动&#xff08;可选&#xff09; 2.3 查看CUDA版本驱动对应的支持的CUDA ToolKit工具包 2.4 下载Toolkit 2.5 安装&#xff08;省略&#xff0…

Docker从入门到精通_01 Docker:引领云计算的新浪潮

Docker从入门到精通_01 Docker&#xff1a;引领云计算的新浪潮 云计算作为信息技术领域的重要支柱&#xff0c;正以前所未有的速度发展。然而&#xff0c;传统的虚拟化架构在资源利用、部署效率、应用扩展等方面已逐渐显露出其局限性。在这样的背景下&#xff0c;容器云技术应…

零信任内网安全访问

随着互联网的持续发展&#xff0c;便捷的共享方式极大地提高了企业的生产力和工作效率&#xff0c;但随之也给企业内网带来了极大的安全隐患。企业内网承载大量的核心资产和机密数据&#xff0c;一旦受到攻击可能会造成大量损失&#xff0c;因此&#xff0c;如何通过零信任内网…

iOS 项目中的多主题颜色设计与实现

引言 在现代iOS应用中&#xff0c;用户对个性化体验的需求越来越高&#xff0c;除了功能上的满足&#xff0c;多样的视觉风格也是提升用户体验的重要手段之一。提供多主题颜色的切换功能不仅能满足用户的审美偏好&#xff0c;还可以让应用更具活力&#xff0c;适应不同场景下的…

一区黏菌算法+双向深度学习+注意力机制!SMA-BiTCN-BiGRU-Attention黏菌算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测

一区黏菌算法双向深度学习注意力机制&#xff01;SMA-BiTCN-BiGRU-Attention黏菌算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测 目录 一区黏菌算法双向深度学习注意力机制&#xff01;SMA-BiTCN-BiGRU-Attention黏菌算法优化双向时间卷积双向门控循环单元…

免费视频无损压缩工具+预览视频生成工具

视频无损压缩工具 功能与作用 &#xff1a;视频无损压缩工具是一种能够减少视频文件大小&#xff0c;但同时保持视频质量的工具。它通过先进的编码技术和算法&#xff0c;有效降低视频文件的存储空间&#xff0c;同时保证视频的清晰度和观感。这对于需要分享或存储大量视频内容…

力扣每日一题 公司命名 集合 找规律

Problem: 2306. 公司命名 &#x1f468;‍&#x1f3eb; 灵神题解 class Solution {public long distinctNames(String[] ideas) {// 创建一个大小为26的HashSet数组&#xff0c;用于存储每个首字母对应的字符串集合Set<String>[] groups new HashSet[26];Arrays.set…

QProgressDialog运行初始不显示的问题

我用的是qt手册上的示例代码&#xff0c;结果运行时却出现如下问题&#xff1a; 如图程序运行时&#xff0c;开始一段时间是不显示进度条、百分比之类的。 运行一段时间之后&#xff0c;到50%才显示。当时数字是2&#xff0c;总数是4。 我用了网上的方案&#xff0c;增加了一条…

众数信科AI智能体政务服务解决方案——寻知智能笔录系统

政务服务解决方案 寻知智能笔录方案 融合民警口供录入与笔录生成需求 2分钟内生成笔录并提醒错漏 助办案人员二次询问 提升笔录质量和效率 寻知智能笔录系统 众数信科AI智能体 产品亮点 分析、理解行业知识和校验规则 AI实时提醒用户文书需注意部分 全文校验格式、内…

【第3期】INFINI Easysearch 免费认证培训开放报名

探索 Easysearch 的无限可能&#xff0c;与 INFINI Labs 共赴搜索技术前沿&#xff01; 随着数字化转型的加速&#xff0c;搜索技术已成为企业数据洞察的核心。INFINI Labs 作为搜索创新技术的引领者&#xff0c;诚邀所有对 Easysearch 搜索引擎感兴趣的开发者、技术爱好者及合…

【笔记】光的衍射

一、 衍射现象 波遇到障碍物时&#xff0c;绕过障碍物 进入几何阴影区。 光偏离直线传播路径进入几何 阴影区&#xff0c;并形成光强非均匀稳 定分布。 二、菲涅耳原理 1、 惠更斯原理 波面上的每一点均为发 射子波的波源&#xff0c;这些子波的 包络面即新的波阵面 成功…

基于python+spark的外卖餐饮数据分析系统设计与实现(含论文)-Spark毕业设计选题推荐

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

Swagger 教程(笔记) Knife4j

假设获取到了整个项目&#xff0c;创建项目相应的结构 MySQL user 表 DROP DATABASE if EXISTS study; CREATE DATABASE study; USE study; CREATE TABLE users (id INT(10) NOT NULL AUTO_INCREMENT,username VARCHAR(255) NOT NULL COLLATE utf8_general_ci,password VARCHA…

Hbase日常运维

1 Hbase日常运维 1.1 监控Hbase运行状况 1.1.1 操作系统 1.1.1.1 IO 群集网络IO&#xff0c;磁盘IO&#xff0c;HDFS IO IO越大说明文件读写操作越多。当IO突然增加时&#xff0c;有可能&#xff1a;1.compact队列较大&#xff0c;集群正在进行大量压缩操作。 2.正在执行…

NTLM Relay攻击原理 + 工具使用

前言 仅仅是记录自己看《域内攻防指南》的体会&&理解&#xff0c;具体的知识学习建议看windows protocol &#xff08;✨&#xff09; ✅&#xff1a;NTLM是不依赖于上层协议的&#xff01;&#xff01;&#xff01;NTLM起到的就是认证&#xff0c;只认证Client的身份…

蓝桥杯15届C/C++B组省赛题目

问题描述 小蓝组织了一场算法交流会议&#xff0c;总共有 5050 人参加了本次会议。在会议上&#xff0c;大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手 (且仅有一次)。但有 77 个人&#xff0c;这 77 人彼此之间没有进行握手 (但这 77 人与…

828华为云征文 | 在Huawei Cloud EulerOS系统中安装Docker的详细步骤与常见问题解决

前言 Docker是一种轻量级的容器技术&#xff0c;广泛用于应用程序的开发、部署和运维。在华为云的欧拉&#xff08;Huawei Cloud EulerOS&#xff09;系统上安装和运行Docker&#xff0c;虽然与CentOS有相似之处&#xff0c;但在具体实现过程中&#xff0c;可能会遇到一些系统…

【Python机器学习】NLP信息提取——提取人物/事物关系

目录 词性标注 实体名称标准化 实体关系标准化和提取 单词模式 文本分割 断句 断句的方式 使用正则表达式进行断句 词性标注 词性&#xff08;POS&#xff09;标注可以使用语言模型来完成&#xff0c;这个语言模型包含词及其所有可能词性组成的字典。然后&#xff0c;该…

重头开始嵌入式第四十二天(硬件 ARM体系架构)

目录 一&#xff0c;ARM是什么&#xff1f; 1.公司名称 ARM的主流架构&#xff1a; 2.处理器架构 二&#xff0c;什么是处理器架构&#xff1f;什么是处理器&#xff1f; 一、处理器 二、处理器架构 三&#xff0c;一个计算机由什么构成呢&#xff1f; 一、硬件系统 二…

阿里云百炼SFT微调实践

1. 场景识别 用户进行SFT前需要对应用场景进行识别和分析&#xff0c;一般进行模型微调的诉求是希望提升对应业务场景的能力&#xff0c;用户需要明确哪些能力是需要进行重点提升的。 场景划分上来讲&#xff0c;以垂类场景进行划分可分为教育、医疗、金融、法律、电商、旅游、…