Javaweb实现增删改查操作操作

2023-10-26

Javaweb实现增删改查操作操作

一:准备工作
1:Idea编辑器(eclispe和myeclispe都可以,个人推荐使用idea),新建一个web项目
2:数据库mysql
3:需要提前了解的知识点
servlet
el和jstl表达式
项目的基本的框架实现(Javaweb经典的三层架构)
4:UUID自动生成id的工具
5:在idea中生成的包结构
在这里插入图片描述
二:数据库的设计和实现操作
需要在设计库中实现数据库的创建和数据表的填写
1.数据库和数据表的创建
在这里插入图片描述
在这里插入图片描述
2.向数据库中添加数据
在这里插入图片描述
3.数据库连接工具druid和dbutils
在这里插入图片描述

package cn.ujiuye.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
 * JDBC工具类 使用Durid连接池
 */
public class JDBCUtils {
    private static DataSource ds ;
    static {

        try {
            //1.加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件,获取字节输入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);

            //2.初始化连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接池对象
     */
    public static DataSource getDataSource(){
        return ds;
    }


    /**
     * 获取连接Connection对象
     */
    public static Connection getConnection() throws SQLException {
        return  ds.getConnection();
    }
}

三:常用工具类和架构解析
1:bootstrap是一个很强大的前端框架,集合了html,css,js的集合,让像我这样的前端菜鸡的新手能够也实现对美的页面的追求,有需要的去中文网去了解吧https://www.bootcss.com/
2:UUID是Java.utils包下提供的一个自动生成的一个工具类,能够自动生成不会重复的id,可以把它简单封装一下,后面直接调用,下面贴出封装源码

package cn.ujiuye.utils;
import java.util.UUID;

public class UUIDUtils {
	public static String getPid() {
		String str = UUID.randomUUID().toString().replace("-", "");
		return str;
	}
}

3.常用jar包分析,后期会使用到maven工程,就不用手动导入jar包了,不过作为基础还是希望大家能够用心对待基础
在这里插入图片描述
4.简单说一下三层架构
servlet和jsp主要是控制和显示,让用户能够直接看到现象
service 处理业务逻辑层,能够更好的实现其相关的业务逻辑的实现
dao 数据持久化层,主要用于和数据库进行交互,返回和传递数据
除此之外别忘了实体类Javabean的书写,本篇博客我更多的使用了接口的思想
四 简单实现一下增删改查

首先说下JavaBean的书写,尽可能的让其和数据库中的字段和前端传过来的的数据三者合一,这样才能尽可能的后期不会存在这个值那个值没有被赋值上,出现空值的现象,还有最好使用其包装类型,不会出现数据库中出现了空值而赋不上值的现象

package cn.ujiuye.domain;

import java.util.Date;

/**
 * product
 * javabean
 */
public class Product {
    private String pid;
    private String pname;
    private double market_price;
    private double shop_price;
    private Date pdate;
    private String pdesc;

    public String getPid() {
        return pid;
    }

    public void setPid(String pid) {
        this.pid = pid;
    }

    public String getPname() {
        return pname;
    }

    public void setPname(String pname) {
        this.pname = pname;
    }

    public double getMarket_price() {
        return market_price;
    }

    public void setMarket_price(double market_price) {
        this.market_price = market_price;
    }

    public double getShop_price() {
        return shop_price;
    }

    public void setShop_price(double shop_price) {
        this.shop_price = shop_price;
    }

    public Date getPdate() {
        return pdate;
    }

    public void setPdate(Date pdate) {
        this.pdate = pdate;
    }

    public String getPdesc() {
        return pdesc;
    }

    public void setPdesc(String pdesc) {
        this.pdesc = pdesc;
    }

    @Override
    public String toString() {
        return "Product{" +
                "pid='" + pid + '\'' +
                ", pname='" + pname + '\'' +
                ", market_price=" + market_price +
                ", shop_price=" + shop_price +
                ", pdate=" + pdate +
                ", pdesc='" + pdesc + '\'' +
                '}';
    }
}

增加的servlet

package cn.ujiuye.web.servlet;

import cn.ujiuye.domain.Product;
import cn.ujiuye.service.ProductService;
import cn.ujiuye.service.impl.ProductServiceImpl;
import cn.ujiuye.utils.UUIDUtils;
import org.apache.commons.beanutils.BeanUtils;

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;
import java.lang.reflect.InvocationTargetException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@WebServlet("/addProductServlet")
public class AddProductServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //1.设置编码格式
    response.setContentType("text/html;charset=utf-8");
    request.setCharacterEncoding("utf-8");
    //2.封装数据
    Map<String, String[]> map = request.getParameterMap();
    Product product = new Product();
    try {
        //先把当前时间按照格式转化成对应的字符串
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String currentTime = sdf.format(date);
        System.out.println(currentTime);
        //再把字符串转化为相对于的时间格式
        Date time = sdf.parse(currentTime);
        System.out.println(time);
        //封装一下上架的时间
        product.setPdate(time);
        //使用UUID工具类,随机生成Pid,保证数据不重复
        product.setPid(UUIDUtils.getPid());
        BeanUtils.populate(product,map);
        //3.处理业务逻辑
        ProductService service = new ProductServiceImpl();
        service.addProduct(product);
        System.out.println(product);
    } catch (Exception e) {
        e.printStackTrace();
    }

    //4.重定向到登录页面
    response.sendRedirect(request.getContextPath()+"/findAllProductServlet");

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
}

}
增加的时候要特别注意哪些数据不能够直接封装进入JavaBean中去,需要手动给传入进入,比如这个时间是使用UUID工具类生成的,故需要手动给传入进去,还有当前时间也是自动生成的,也需要手动给传入进入,才能够是生成了一个完成的对象,数据完整来实现操作

删除的servlet

package cn.ujiuye.web.servlet;

import cn.ujiuye.service.ProductService;
import cn.ujiuye.service.impl.ProductServiceImpl;

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("/delUserServlet")
public class DelUserServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //从后台的数据获取相对于的id
        String pid = request.getParameter("id");
        System.out.println(pid);
        //处理业务逻辑
        ProductService service = new ProductServiceImpl();
        service.deleteProduct(pid);
        //对结果进行相应,不管删除不删除都重定向到findAllProductServlet
        response.sendRedirect(request.getContextPath()+"/findAllProductServlet");

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }


}

注意从前台获取你点击的事件的按钮,从而将其id给传入进来,从id来获取其数据的详细信息从而反馈过来

修改的servlet

package cn.ujiuye.web.servlet;

import cn.ujiuye.domain.Product;
import cn.ujiuye.service.ProductService;
import cn.ujiuye.service.impl.ProductServiceImpl;
import org.apache.commons.beanutils.BeanUtils;

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;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

@WebServlet("/updateProductServlet")
public class UpdateProductServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码格式
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //1.封装数据
        Map<String, String[]> map = request.getParameterMap();
        Product product =  new Product();
        try {
            BeanUtils.populate(product,map);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //2.处理业务逻辑
        ProductService service = new ProductServiceImpl();
        service.updateProduct(product);
        //3.重定向到findAllProductservlet
        response.sendRedirect(request.getContextPath()+"/findAllProductServlet");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }


}

注意修改的操作第一步需要实现数据的回显,然后将该对象传入到后台,从而达到修改的目的

package cn.ujiuye.web.servlet;

import cn.ujiuye.domain.Product;
import cn.ujiuye.service.ProductService;
import cn.ujiuye.service.impl.ProductServiceImpl;

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;
import java.util.List;

@WebServlet("/findAllProductServlet")
public class FindAllProductServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //设置编码格式
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    //处理业务逻辑
    ProductService service = new ProductServiceImpl();
    List<Product> products = service.fandAll();
    System.out.println(products);
    //将域对象存起来,实现数据的传递
    request.setAttribute("products",products);
    request.getRequestDispatcher("/list.jsp").forward(request,response);
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
}

}
无论是查询单个的信息还是查询所有的人的信息,都需要我们明确要查询的条件,传递什么参数,让其返回什么类型的数据,只有明确了这些细节问题,才能够让我们能够快速定位自己的需要,从而达到自己想要的效果

service层接口,引入接口的思想,更多的是想控制一下业务逻辑,不至于有很多很多的servlet,对自己的需求不太清楚

package cn.ujiuye.service;

import cn.ujiuye.domain.PageBean;
import cn.ujiuye.domain.Product;

import java.util.List;

/**
 * 业务逻辑层接口层
 */
public interface ProductService {
    /**
     * 查询所有的商品信息
     * @return
     */
    List<Product> fandAll();

    /**
     * 添加商品
     */
    void addProduct(Product product);

    /**
     * 根据id查询当前的商品信息
     * @param id
     * @return
     */
    Product findProductById(String id);

    /**
     * 修改商品的信息
     * @param product
     */
    void updateProduct(Product product);

    /**
     * 删除商品信息
     * @param pid
     */
    void deleteProduct(String pid);

    /**
     * 删除多选中的商品信息
     * @param pids
     */
    void deleteSelectedProduct(String[] pids);

    /**
     * 分页查询
     * @param currentPage
     * @param rows
     * @return
     */
    PageBean<Product> findUserByPage(String currentPage, String rows);
}

package cn.ujiuye.service.impl;

/**
 * 业务逻辑实现层
 */
import cn.ujiuye.dao.ProductDao;
import cn.ujiuye.dao.impl.ProductDaoImpl;
import cn.ujiuye.domain.PageBean;
import cn.ujiuye.domain.Product;
import cn.ujiuye.service.ProductService;

import java.util.List;

public class ProductServiceImpl implements ProductService {

    private ProductDao dao = new ProductDaoImpl();
    /**
     * 查询所有的商品信息
     * @return
     */
    @Override
    public List<Product> fandAll() {
        return dao.findAllProduct();
    }


    /**
     * 添加商品信息
     */
    @Override
    public void addProduct(Product product) {
        dao.addProduct(product);
    }

    @Override
    public Product findProductById(String id) {
        return dao.findProductById(id);
    }

    @Override
    public void updateProduct(Product product) {
        dao.updateProduct(product);
    }

    @Override
    public void deleteProduct(String pid) {
        dao.delteProductById(pid);
    }

    @Override
    public void deleteSelectedProduct(String[] pids) {
        for (String pid : pids) {
            dao.delteProductById(pid);
        }
    }
}

dao层实现数据的持久化操作,更多的是实现对数据的前后台交互,数据能够来回之间相互传递,这里我也引入了接口的概念,里面可能有点语句是关于关于分页的,我怕删除的不去,对各位有所影响

package cn.ujiuye.dao;

import cn.ujiuye.domain.Product;

import java.util.List;

/**
 * 持久化接口
 */
public interface ProductDao {
    /**
     * 查询所有的商品的信息
     * @return
     */
    List<Product> findAllProduct();

    /**
     * 添加商品
     * @param product
     */
    void addProduct(Product product);

    /**
     * 查询当前的商品的信息
     * @param id
     * @return
     */
    Product findProductById(String id);

    void updateProduct(Product product);

    void delteProductById(String pid);

    /**
     * 查询总的记录数的方法
     * @return
     */
    int findTotalCount();

    /**
     * 查询每页数据
     * @param start
     * @param rows
     * @return
     */
    List<Product> findByPage(int start, int rows);
}

package cn.ujiuye.dao.impl;

import cn.ujiuye.dao.ProductDao;
import cn.ujiuye.domain.Product;
import cn.ujiuye.utils.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

/**
 * 持久化dao接口的实现类
 */
public class ProductDaoImpl implements ProductDao {

    //加载数据源
    JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
    /**
     * 查询所有的商品的信息
     * @return
     */
    @Override
    public List<Product> findAllProduct() {
        //1.定义sql
        String sql = "select * from product order by pdate desc";
        return template.query(sql,new BeanPropertyRowMapper<Product>(Product.class));
    }

    /**
     * 添加商品信息
     * @param product
     */
    @Override
    public void addProduct(Product product) {
        //1.定义sql
        String sql = "insert into product values(?,?,?,?,?,?)";
        //处理sql
        template.update(sql,product.getPid(),product.getPname(),product.getMarket_price(),product.getShop_price(),product.getPdate(),product.getPdesc());
    }

    /**
     * 查询当前的商品信息
     * @param id
     * @return
     */
    @Override
    public Product findProductById(String id) {
        String sql = "select * from product where pid = ?";
        return template.queryForObject(sql,new BeanPropertyRowMapper<Product>(Product.class),id);
    }

    /**
     * 修改当前商品的信息
     * @param product
     */
    @Override
    public void updateProduct(Product product) {
         String sql = "update product set pname=?,market_price=?,shop_price=?,pdesc=? where pid=?";
         template.update(sql,product.getPname(),product.getMarket_price(),product.getShop_price(),product.getPdesc(),product.getPid());
    }

    /**
     * 根据id来删除对应的商品的信息
     * @param pid
     */
    @Override
    public void delteProductById(String pid) {
        String sql = "delete from product where pid = ?";
        template.update(sql,pid);
    }

}

持久化层对数据进行操作,我个人比较喜欢的druid连接池和spring操控JDBCtemplete对数据库进行操作,方便便捷,当然c3p0和dbutils也是一样的道理,看个人爱好

下面关于前端jsp页面,我就重点展示一下我的list.jsp页面,其他的都大概贴一下源码和运行结果

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
    <head>
        <!-- 指定字符集 -->
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>修改用户</title>

        <link href="css/bootstrap.min.css" rel="stylesheet">
        <script src="js/jquery-2.1.0.min.js"></script>
        <script src="js/bootstrap.min.js"></script>
        
    </head>
    <body>
        <div class="container" style="width: 400px;">
        <h3 style="text-align: center;">修改商品信息</h3>
        <form action="${pageContext.request.contextPath}/updateProductServlet" method="post">
          <%--设置影藏域,提交信息的时候同时也把id也给提交了,作为后面运行的标准--%>
          <input type="hidden" name="pid" value="${product.pid}">
              <div class="form-group">
                  <label for="pname">商品名称:</label>
                  <input type="text" value="${product.pname}" class="form-control" id="pname" name="pname">
              </div>

              <div class="form-group">
                  <label for="market_price">出厂价格:</label>
                  <input type="text" value="${product.market_price}" class="form-control" id="market_price" name="market_price">
              </div>

              <div class="form-group">
                  <label for="shop_price">零售价格:</label>
                  <input type="text"  value="${product.shop_price}"  class="form-control" id="shop_price" name="shop_price">
              </div>

              <div class="form-group">
                  <label for="pdesc">商品详情:</label>
                  <input type="text"  value="${product.pdesc}" class="form-control" id="pdesc" name="pdesc"/>
              </div>

             <div class="form-group" style="text-align: center">
                <input class="btn btn-primary" type="submit" value="提交" />
                <input class="btn btn-default" type="reset" value="重置" />
                <input class="btn btn-default" type="button" value="返回"/>
             </div>
        </form>
        </div>
    </body>
</html>

在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
    <head>
        <!-- 指定字符集 -->
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>修改用户</title>

        <link href="css/bootstrap.min.css" rel="stylesheet">
        <script src="js/jquery-2.1.0.min.js"></script>
        <script src="js/bootstrap.min.js"></script>
        
    </head>
    <body>
        <div class="container" style="width: 400px;">
        <h3 style="text-align: center;">修改商品信息</h3>
        <form action="${pageContext.request.contextPath}/updateProductServlet" method="post">
          <%--设置影藏域,提交信息的时候同时也把id也给提交了,作为后面运行的标准--%>
          <input type="hidden" name="pid" value="${product.pid}">
              <div class="form-group">
                  <label for="pname">商品名称:</label>
                  <input type="text" value="${product.pname}" class="form-control" id="pname" name="pname">
              </div>

              <div class="form-group">
                  <label for="market_price">出厂价格:</label>
                  <input type="text" value="${product.market_price}" class="form-control" id="market_price" name="market_price">
              </div>

              <div class="form-group">
                  <label for="shop_price">零售价格:</label>
                  <input type="text"  value="${product.shop_price}"  class="form-control" id="shop_price" name="shop_price">
              </div>

              <div class="form-group">
                  <label for="pdesc">商品详情:</label>
                  <input type="text"  value="${product.pdesc}" class="form-control" id="pdesc" name="pdesc"/>
              </div>

             <div class="form-group" style="text-align: center">
                <input class="btn btn-primary" type="submit" value="提交" />
                <input class="btn btn-default" type="reset" value="重置" />
                <input class="btn btn-default" type="button" value="返回"/>
             </div>
        </form>
        </div>
    </body>
</html>

在这里插入图片描述
下面重点来讲一下list.jsp显示页面,实现数据的从域对象中获取出来,再在前台显示的效果

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>商品列表</title>
    <!-- 1. 导入CSS的全局样式 -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="js/jquery-2.1.0.min.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="js/bootstrap.min.js"></script>
    <style type="text/css">
        td, th {
            text-align: center;
        }
    </style>
    <script>
        /*对删除的代码提示框的显示*/
        function deleteUser(id) {
            //${pageContext.request.contextPath}/delUserServlet?id=${product.id}
            //安全提示
            if (confirm("您确定要删除吗?")){
                //访问路径
                location.href="${pageContext.request.contextPath}/delUserServlet?id="+id;
            }
        }
        /*提交表单,对表单中的数据进行校验  随着页面的加载就开始加载的数据*/
       $(function () {
           //全选和全不选
           $("[type=checkbox]:first").click(function () {
                $("[type=checkbox]").prop("checked",this.checked);
           });
           //批量删除
           $("#delSelected").click(function () {
               var pids = $("[type=checkbox]:gt(0):checked").serialize();
               //判断pids是否有值
               if (pids.length==0 || pids==""){
                   alert("请您选择需要删除的选项?");
                   return;
               }
               if (confirm("确定要删除吗?")){
                   location.href="${pageContext.request.contextPath}/delSelectedServlet?"+pids;
               }
           });
       });

    </script>
</head>
<body>

     <h3 style="text-align: center">商品信息列表</h3>

     <div style="float: right;margin: 5px;">
         <a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加商品</a>
         <a class="btn btn-primary" href="javascript:void(0);" id="delSelected">删除选中</a>
     </div>
     <form id="form" action="" method="post">
         <table border="1" class="table table-bordered table-hover">
             <tr class="success">
                 <th><input type="checkbox" id="firstCb"></th>
                 <th>序号</th>
                 <th>商品名称</th>
                 <th>出厂价</th>
                 <th>销售价</th>
                 <th>出厂日期</th>
                 <th>商品描述</th>
                 <th>操作</th>
             </tr>
             <%--遍历域对象中的数据,var是为了给对象起一个别名,方便读取--%>

             <c:forEach items="${pb.list}" var="product" varStatus="s">
                 <tr>
                     <td><input type="checkbox" name="pids" value="${product.pid}"></td>
                     <td>${s.count}</td>
                     <td>${product.pname}</td>
                     <td>${product.market_price}</td>
                     <td>${product.shop_price}</td>
                     <td>${product.pdate}</td>
                     <td>${product.pdesc}</td>
                     <td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findProductServlet?id=${product.pid}">修改</a>&nbsp;
                         <a class="btn btn-default btn-sm" href="javascript:deleteUser('${product.pid}');">删除</a></td>
                 </tr>
             </c:forEach>
         </table>
     </form>
  
         </ul>
     </nav>

</body>
</html>

该功能是使用jstl和el表达式来实现其功能的,大家可以多看看,该用法真的很秒,本人很喜欢
在这里插入图片描述

以上就是我对Javaweb中实现增删改查的一点拙见,希望大家有意见只管在评论区里提,还有有需要源码的私聊我,大家一块共同进步吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javaweb实现增删改查操作操作 的相关文章

随机推荐

  • VMWARE修改CPUID

    在cmd shell下执行wmic cpu get ProcessorId命令 可是查看机器的cpuID 但这个命令显示的只是2组ID 实际CPUID 有4组 通过更改虚拟机配置文件 vmx可是实现任意cpu序列号的指定 而且重启虚拟机后c
  • html怎么在网页中加滚动条,在html中如何加滚动条?滚动条的用法!

    随着经济和科技的发展 互联网的大趋势造就了很大的就业机会 而且在我们日常的生活中大家多多少少会去浏览一些网站和网页吧 那么今天呀 我们就来说说在html中如何加滚动条 和一些有关于滚动条的用法 的经验分享 1 首先我们打开我们的前端的开发工
  • Docker安装Elasticsearch的遇到的那些坑

    1 根据百度到的一篇文章 https segmentfault com a 1190000004376504下载其最新镜像 hangxin1940 docker elasticsearch cn v2 1 0 使用 docker run d
  • 工作笔记-关于安卓和ios兼容遇到的问题

    工作笔记 关于安卓和ios兼容 一 移动端开发 客户端的键盘bug 现象 当用户点击卡面的按钮 弹出密码验证框和客户端键盘 此时点击验证框的按钮 ios的弹窗和键盘消失 然而并无其他事发生 bug定位 安卓功能完好 ios出现 所以采用打印
  • Spring Boot + Vue的网上商城之客服系统实现

    Spring Boot Vue的网上商城之客服系统实现 在网上商城中 客服系统是非常重要的一部分 它能够为用户提供及时的咨询和解答问题的服务 本文将介绍如何使用Spring Boot和Vue js构建一个简单的网上商城客服系统 思路 在本教
  • 编程猫编程平台的使用介绍

    编程猫编程平台的使用介绍 编程猫是由深圳点猫科技有限公司自主研发的国内知名青少年编程教育平台 通过图形化编程 可以创作出游戏 软件 动画 故事等 编程猫编程平台的使用介绍 cnds123的专栏 CSDN博客
  • ChatGPT专业应用:小红书文案生成

    正文共 1263 字 阅读大约需要 5 分钟 内容运营 社媒运营必备技巧 您将在5分钟后获得以下超能力 快速撰写小红书文案 Beezy评级 B级 经过简单的寻找 大部分人能立刻掌握 主要节省时间 推荐人 nanako 编辑者 Linda 此
  • 使用unixODBC并发连接mysql数据库频繁SIGSEGV及SIGABRT崩溃

    使用unixODBC并发连接mysql数据库频繁SIGSEGV及SIGABRT崩溃 2013 05 18 15 18 19 分类 UnixODBC 标签 unixodbc 举报 字号 订阅 下载LOFTER 我的照片书 这几周在测试自己写的
  • 编译XT720 gingerbread

    在android根目录下执行 build envsetup sh 然后执行lunch 选择你要的套餐 然后直接make 编译中有3处错误 1 packages apps CMStats Android mk中 把LOCAL STATIC J
  • [数值计算-3]:误差的种类、误差传播、误差分析

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119790035 目录 第1章
  • 华为校招机试题- 新员工座位安排系统-2023年

    题目描述 工位由序列F1 F2 Fn组成 Fi值为0 1或2 其中0代表空置 1代表有人 2代表障碍物 1 某一空位的友好度为左右连续老员工数之和 2 为方便新员工学习求助 优先安排友好度高的空位 给出工位序列 求所有空位中友好度的最大值
  • 统计学习方法 例7.1 超详细求解过程

    例7 1 已知一个如图所示的训练数据集 其正例点是 x 1 3 3
  • C#软件开发实例.私人订制自己的屏幕截图工具(九)使用自定义光标,QQ截图时的光标

    本实例全部文章目录 一 功能概览 二 创建项目 注册热键 显示截图主窗口 三 托盘图标及菜单的实现 四 基本截图功能实现 五 针对拖拽时闪烁卡顿现象的优化 六 添加配置管理功能 七 添加放大镜的功能 八 添加键盘操作截图的功能 九 使用自定
  • HashMap实现原理, 扩容机制,面试题和总结

    文章目录 1 讲下对HashMap的认识 2 HashMap的一些参数 3 为什么HashMap的长度必须是2的n次幂 4 HashMap 为什么在获取 hash 值时要进行位运算 5 HashMap在JDK1 7和JDK1 8中有哪些不同
  • PHP实现读取指定目录下的所有文件

    在php中读取指定目录下的文件主要用到了opendir和readdir函数 一 opendir 打开目录句柄 1 语法 opendir path context 2 参数说明 参数 描述 path 必需 规定要打开的目录路径 context
  • 【傻瓜向装系统】电脑重装&&加固态硬盘

    市面上大部分PE制作工具都会在操作系统中内嵌广告或软件等 慎重使用 重装 顺序步骤 重要数据备份 备份到移动硬盘或其他设备 格式化U盘 至少8G 准备作为系统启动盘 安装PE制作工具 如老毛桃等 制作启动盘 下载对应操作系统放到U盘中 某个
  • 极大极小树

    博弈树作为传统AI领域的一个传统又经典的算法 有着广泛的应用 尤其是棋类AI 记得曾经刚学C语言的时候 用控制台写了一个五子棋的程序 后来突发奇想 给它增加可以人机对战的AI 设计了一个简单的根据当前局面判断最优落子的AI 但是只能想到两手
  • DNS、HTTP 与 HTTPS

    DNS HTTP与HTTPS DNS 域名的层级 查找过程 优化 常见的 DNS 攻击 使用的协议 CDN 路由解析 内容分发 HTTP 协议 HTTP 请求报文 GET 和 POST 有什么区别 幂等性和非幂等性 前后端传参 HTTP响应
  • Ubuntu 20.04 开启SSH服务

    更新软件下载源 sudo apt update 安装ssh服务 sudo apt install openssh server 开启防火墙ssh的服务端口 sudo ufw allow ssh 附 还可以查看或更改ssh服务的状态 查看ss
  • Javaweb实现增删改查操作操作

    Javaweb实现增删改查操作操作 一 准备工作 1 Idea编辑器 eclispe和myeclispe都可以 个人推荐使用idea 新建一个web项目 2 数据库mysql 3 需要提前了解的知识点 servlet el和jstl表达式