首页 > 其他分享 >吃货联盟项目用Apache DBUtils工具改写

吃货联盟项目用Apache DBUtils工具改写

时间:2024-09-10 20:25:17浏览次数:11  
标签:return int 吃货 System id println Apache DBUtils public

最基础的是创建一个数据库,用来存储要用到的数据

#创建数据库 CREATE DATABASE IF NOT EXISTS ChiHuoSystem;

#订单序号(id)、订餐人姓名(name)、菜品信息(dishMegs)、送餐时间(time)、 #送餐地址(addresses)、订单状态(states)、订单总价格(sumPrices) #创建Order表,将id设置为自增长,其他均设置为非空

CREATE TABLE IF NOT EXISTS order

( id INT PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(10) NOT NULL,

dishMegs VARCHAR(20) NOT NULL,

fen INT NOT NULL,

time INT,

addresses VARCHAR(30) NOT NULL,

states INT NOT NULL COMMENT '只能填写1(已完成)或0(未完成)',

sumPrices DOUBLE NOT NULL );

#菜品序号(cid)、菜品名称(dishNames)、菜品单价(prices)、菜品点赞数(praiseNum) #初始化两条订单信息,向表中插入,使用不带字段名的插入方式,需和表中字段名顺序一致 INSERT INTO order VALUES(1,'张三','红烧肉',2,12,'北大青鸟',1,60);

INSERT INTO order VALUES(2,'李四','鱼香肉丝',2,18,'怡园小区',1,56);

#创建Food表,将cid设置为自增长,其他均设置为非空order

CREATE TABLE IF NOT EXISTS food

( cid INT PRIMARY KEY AUTO_INCREMENT,

dishNames VARCHAR(20) NOT NULL,

prices DOUBLE NOT NULL,

praiseNum INT NOT NULL COMMENT '点赞数' );

#罗列三个菜的菜品信息,菜的名称,单价,点赞数,插入表中,使用不带字段名的插入方式(多条一起插入),需和表中字段名顺序一致

INSERT INTO food VALUES(1,'红烧肉',30,70);

INSERT INTO food VALUES(2,'西红柿炒蛋',18,99);

INSERT INTO food VALUES(3,'鱼香肉丝',28,66);

INSERT INTO food VALUES(4,'特色地锅鸡',79,289);

之后就是Java代码的编写部分:

首先创建一个项目chlm-ApacheDBUtils,并在新建一个lib目录导入三个jar包commons-dbutils-1.7 (1).jar,druid-1.2.8 (1).jar,mysql-connector-j-8.0.33.jar。并将三个jar包添加为库。

第二步:在默认文件src文件下创建一个包,包名自定义,再创建一个db.properties文件,里面是关于数据库访问文件的配置。然后在包里创建5个包,分别为Dao包(Data Access Object的缩写,代表数据访问对象层,主要负责与数据库进行交互,封装了与数据库的连接、查询、更新等操作。),entity包(实体层,放置一个个实体类,这些类通常对应于数据库中的表,包含了表中的字段和相关的getter和setter方法。),service包(业务逻辑层,封装了数据库底层操作的更高级的操作,将Dao层和Entity层整合起来,进行再次封装,封装成一个方法,以便于业务逻辑的实现),utils包(工具类层,包含一些常用的工具方法,如字符串处理、日期处理、文件操作等,用于辅助开发人员快速完成开发任务。 ),view包(表示层,存放与用户界面相关的类或组件,有时也用于存放DTO(Data Transfer Object)或VO(Value Object),用于数据的传输和展示,这里一般用来作为测试类)。

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/chihuosystem
username=root
password=CSY123
​
# ???????????????这里粘贴过去就是会变乱码,不过是注释无所谓
initialSize=10
​
#?????
maxActive=30
​
#??????
maxIdle=5
​
#?????????????
maxWait=3000

我这里用的数据库是8.0版本的,所以数据库注册驱动是com.mysql.cj.jdbc.Driver,地址是本地地址加数据库,mysql一般默认3306.不同版本不一样,同时用户名密码也是自己设置的。

然后就是要先创建第二个包,实体类的包

分别根据数据库提供的数据创建出两个实体类,分别为Food和Order类

public class Food {
    private int cid;
    private String dishNames;
    private double prices;
    private int praiseNum;
​
    public Food() {
    }
    //不包含cid的构造方法
​
    public Food(String dishNames, double prices, int praiseNum) {
        this.dishNames = dishNames;
        this.prices = prices;
        this.praiseNum = praiseNum;
    }
​
​
//包含cid的构造方法
​
​
    public Food(int cid, String dishNames, double prices, int praiseNum) {
        this.cid = cid;
        this.dishNames = dishNames;
        this.prices = prices;
        this.praiseNum = praiseNum;
    }
    //只含cid和的praiseNum的构造方法
​
​
    public Food(int cid, int praiseNum) {
        this.cid = cid;
        this.praiseNum = praiseNum;
    }
​
    public int getCid() {
        return cid;
    }
​
    public void setCid(int cid) {
        this.cid = cid;
    }
​
    public String getDishNames() {
        return dishNames;
    }
​
    public void setDishNames(String dishNames) {
        this.dishNames = dishNames;
    }
​
    public double getPrices() {
        return prices;
    }
​
    public void setPrices(double prices) {
        this.prices = prices;
    }
​
    public int getPraiseNum() {
        return praiseNum;
    }
​
    public void setPraiseNum(int praiseNum) {
        this.praiseNum = praiseNum;
    }
​
    @Override
    public String toString() {
        return "Food{" +
                "cid=" + cid +
                ", dishNames='" + dishNames + '\'' +
                ", prices=" + prices +
                ", praiseNum=" + praiseNum +
                '}';
    }
}
public class Order {
    private int id;
    private String name;
    private String dishMegs;
    private int fen;
    private int time;
    private String addresses;
    private int states;
    private double sumPrices;
    //定义构造方法
​
​
    public Order() {
    }
​
    //不包含id的构造方法
    public Order(String name, String dishMegs, int fen, int time, String addresses, int states, double sumPrices) {
        this.name = name;
        this.dishMegs = dishMegs;
        this.fen = fen;
        this.time = time;
        this.addresses = addresses;
        this.states = states;
        this.sumPrices = sumPrices;
    }
​
    //包含id的构造方法
​
​
    public Order(int id, String name, String dishMegs, int fen, int time, String addresses, int states, double sumPrices) {
        this.id = id;
        this.name = name;
        this.dishMegs = dishMegs;
        this.fen = fen;
        this.time = time;
        this.addresses = addresses;
        this.states = states;
        this.sumPrices = sumPrices;
    }
​
    public int getId() {
        return id;
    }
​
    public void setId(int id) {
        this.id = id;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public String getDishMegs() {
        return dishMegs;
    }
​
    public void setDishMegs(String dishMegs) {
        this.dishMegs = dishMegs;
    }
​
    public int getFen() {
        return fen;
    }
​
    public void setFen(int fen) {
        this.fen = fen;
    }
​
    public int getTime() {
        return time;
    }
​
    public void setTime(int time) {
        this.time = time;
    }
​
    public String getAddresses() {
        return addresses;
    }
​
    public void setAddresses(String addresses) {
        this.addresses = addresses;
    }
​
    public int getStates() {
        return states;
    }
​
    public void setStates(int states) {
        this.states = states;
    }
​
    public double getSumPrices() {
        return sumPrices;
    }
​
    public void setSumPrices(double sumPrices) {
        this.sumPrices = sumPrices;
    }
​
    @Override
    public String toString() {
        return "Order{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", dishMegs='" + dishMegs + '\'' +
                ", fen=" + fen +
                ", time=" + time +
                ", addresses='" + addresses + '\'' +
                ", states=" + states +
                ", sumPrices=" + sumPrices +
                '}';
    }
}

这里注意生成构造方法的时候要生成带主键和不带主键的。

然后就是创建Dao包,分别根据实体类创建两个daoimpl包,分别对应两个接口的实现类,也就是编写2个实体类的接口,并将接口的实现类定义出来。FoodDaoImpl.java。OrderDaoImpl.java。FoodDao.java。OrderDao.java。

public interface FoodDao {
    // 定义更新点赞数的方法
    int update(Food food);
    // 定义查询单个食品的方法
    Food selectOneFood(int cid);
    // 定义查询所有食品的方法
    List<Food> selectAllFood();
}
public interface OrderDao {
    // 定义添加订单的方法
    int insert(Order order);
    // 定义删除订单的方法
    int delete(int id);
    // 定义修改订单的方法
    int update(Order order);
    // 定义查询单个订单的方法
    Order selectOneOrder(int id);
    // 定义查询所有订单的方法
    List<Order> selectAllOrder();
}
public class FoodDaoImpl implements FoodDao {
    // 创建QueryRunner对象,需要传递数据源
    private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource());
​
    // 实现更新点赞数的方法
    @Override
    public int update(Food food) {
        // 准备SQL更新语句
        String sql = "update `food` set praiseNum=? where cid=?";
        // 准备参数数组
        Object[] args = {food.getPraiseNum(), food.getCid()};
        try {
            // 执行更新操作,返回受影响的行数
            return queryRunner.update(sql, args);
        } catch (SQLException e) {
            // 异常处理,抛出运行时异常
            throw new RuntimeException(e);
        }
    }
​
    // 实现查询单个食品的方法
    @Override
    public Food selectOneFood(int cid) {
        // 创建BeanHandler对象,用于处理查询结果
        BeanHandler<Food> beanHandler = new BeanHandler<Food>(Food.class);
        // 准备SQL查询语句
        String sql = "select * from `food` where cid=?";
        try {
            // 执行查询操作,返回单个Food对象
            return queryRunner.query(sql, beanHandler, cid);
        } catch (SQLException e) {
            // 异常处理,抛出运行时异常
            throw new RuntimeException(e);
        }
    }
​
    // 实现查询所有食品的方法
    @Override
    public List<Food> selectAllFood() {
        // 创建BeanListHandler对象,用于处理查询结果
        BeanListHandler<Food> beanListHandler = new BeanListHandler<Food>(Food.class);
        // 准备SQL查询语句
        String sql = "select * from `food`";
        try {
            // 执行查询操作,返回Food对象列表
            return queryRunner.query(sql, beanListHandler);
        } catch (SQLException e) {
            // 异常处理,抛出运行时异常
            throw new RuntimeException(e);
        }
    }
}
​
    
public class OrderDaoImpl implements OrderDao {
    //定义一个私有对象,方便后面的方法的调用,且传递一个数据源对象
    private QueryRunner queryRunner=new QueryRunner(DBUtils.getDataSource());
    //增删改调用update的方法,查询调用Query方法
​
    //方法一 添加订单数据
    @Override
    public int insert(Order order) {
        //准备sql语句,id是自增长
        String sql="insert into `Order` (name,dishMegs,fen,time,addresses,states,sumPrices) values(?,?,?,?,?,?,?)";
        //准备一个可变数组,对占位符进行赋值,占位符的赋值来源于Order对象
        Object[] args={order.getName(),order.getDishMegs(),order.getFen(),order.getTime(),order.getAddresses(),order.getStates(),order.getSumPrices()};
​
        try {
            //传入一个sql语句和一个可变数组,并抛出异常,添加受影响的是行数
            int result=queryRunner.update(sql,args);
            return  result;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
​
    @Override
    public int delete(int id) {
        //准备sql语句,id是自增长
        String sql="delete from `order` where id=?";
        //删除数据不需要对象,是根据id进行删除的,故不需要可变数组
        try {
            //使用queryRunner调用update方法,返回值是受影响的行数
            int result=queryRunner.update(sql,id);
            //返回结果
            return  result;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
​
    @Override
    public int update(Order order) {
        //准备sql语句,id是自增长
        String sql="update `order` set states=? where id=?";
       //准备一个可变数组
        Object [] args={order.getStates(),order.getId()};
        try {
            //使用queryRunner调用update方法,返回值是受影响的行数
             return  queryRunner.update(sql,args);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
​
    @Override
    public Order selectOneOrder(int id) {
        //创建beanHandler泛型集合对象
        BeanHandler<Order> beanHandler=new BeanHandler<>(Order.class);
        //使用queryRunner调用query方法,返回值是一个结果集,即Order对象
        //准备sql语句
        String sql="select * from `order` where id=?";
        //查询单个不需要准备可变数组,直接使用id查询,返回的是一个对象Order
        try {
            return  queryRunner.query(sql,beanHandler,id);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
​
    }
​
    @Override
    public List<Order> selectAllOrder() {
        //创建beanListHandler泛型集合对象
        BeanListHandler<Order> beanListHandler=new BeanListHandler<Order>(Order.class);
        //准备一个sql语句
        String sql="select * from `Order`";
        //查询无占位符,故不需要准备可变数组
        //使用queryRunner调用query方法,返回值是一个结果集,即多个Order对象,可组装成为一个集合
​
        try {
            return  queryRunner.query(sql,beanListHandler);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

之后再创建一个服务类service,同样是创建2个2个service接口,以及2个实现类。分别为FoodServiceImpl.java OrderServiceImpl.java FoodService.java OrderService.java。这个包是业务逻辑层,封装了数据库底层操作的更高级的操作,将Dao层和Entity层整合起来,进行再次封装,封装成一个方法,以便于业务逻辑的实现

public class FoodServiceImpl implements FoodService {
    //实现规范服务类方法的接口
    //定义FoodDao对象,指向其实现类,方便调用方法
    FoodDao foodDao=new FoodDaoImpl();
    //创建scanner对象
    Scanner scanner=new Scanner(System.in);
    Food food=new Food();
    @Override
    public int updateFood() {
        System.out.println("请输入你要点赞的菜品序号");
        int id=scanner.nextInt();
        //根据用户输入的id,调用查询方法查询菜品存在与否
        Food food1=foodDao.selectOneFood(id);
        if (food1==null){
            System.out.println("对不起,你输入的菜品不存在,无法点赞");
        }else {
            food1.setPraiseNum(food1.getPraiseNum()+1);
            //存在则调用修改方法
            int result= foodDao.update(food1);
            return result;
        }
        return 0;
    }
​
    @Override
    public Food selectOneFood(int cid) {
        Food food1=foodDao.selectOneFood(food.getCid());
        return food1;
    }
​
    @Override
    public List<Food> selectAllFood() {
        List<Food> foodList=foodDao.selectAllFood();
        return null;
    }
​
​
}
public class OrderServiceImpl implements OrderService {
    //实现规范服务类方法的接口
    //创建OrderDao对象,指向其实现类,方便调用其中的方法
    OrderDao orderDao=new OrderDaoImpl();
    //创建FoodDao对象,指向其实现类,方便调用其中的方法
    FoodDao foodDao=new FoodDaoImpl();
​
    //创建order的对象
    Order order=new Order();
    //因为订餐等数据来源于用户从键盘输入,创建Scanner对象
    Scanner scanner=new Scanner(System.in);
    //添加订单,首先需要查看系统是否有此订单
    @Override                                                                                                                                     
    public int add() {
            //使用foodDao调用查询所有方法,返回一个food集合对象
            List<Food> foodList=foodDao.selectAllFood();
            System.out.println("请输入订餐人姓名:");
            String name =scanner.next();
            System.out.println("请选择你要点的菜(输入序号):");
            int dishChoose=scanner.nextInt();
​
            Food food = foodDao.selectOneFood(dishChoose);
​
            //通过food对象获取用户点的什么菜,并定义变量接收
            String dishNames=food.getDishNames();
            //通过food对象获取该菜品的价格
            double newPprices=food.getPrices();
            Syst
                
                em.out.println("请输入你要点餐的份数");
            int fen=scanner.nextInt();
​
            System.out.println("请输入您的送餐时间(请输入10~22的整数)");
            int time=scanner.nextInt();
            //对用户输入的时间进行判断
            while (time <10 && time>22){
                System.out.println("对不起,您输入的时间不在配送范围内(请重新输入)");
                int ErrTime=scanner.nextInt();
            }
            System.out.println("请输入你的配送地址");
            String addresses=scanner.next();
            //设置订单状态
            order.setStates(0);
            //计算订单价格,从对象之中获取的菜品价格 * 用户输入的份数
            double sumPrices=newPprices * fen;
            double newSumPrices= 0;
            //对价格进行判断,如果订单总金额大于50,免配送费,否则收取配送费6元
            if (sumPrices>=50){
                newSumPrices=sumPrices;
                System.out.println("订单总金额为"+newSumPrices);
​
            }else {
                //订单总金额小于50时,加配送费6元
                newSumPrices=sumPrices+6;
                System.out.println("订单总金额为"+newSumPrices);
            }
            //将获取到的总金额添加到对象之中,再将对象添加到数据库之中
            Order order2=new Order(name,dishNames,fen,time,addresses,0,newSumPrices);
            //使用orderDao调用添加方法,将组成的对象添加进数据库之中
            int rows=orderDao.insert(order2);
            System.out.println(rows==0?"点餐失败":"点餐成功");
​
​
​
        return 0;
    }
    //删除订单
    @Override
    public int delete() {
        System.out.println("请输入您要删除的订单编号");
        int id1=scanner.nextInt();
        //使用 orderDao调用方法查询系统内部是否有此订单,返回一个order的对象
        Order order1=orderDao.selectOneOrder(id1);
        //对返回的结果进行判断,若系统内部无此订单,则不可以删除,反之有订单则可删除
        if (order1==null){
            System.out.println("对不起,订单不存在,不可删除");
        }else {
​
            //调用方法执行删除
            int result =orderDao.delete(id1);
            return  result;
        }
        return 0;
    }
    //签收订单(修改订单)
    @Override
    public int update() {
        System.out.println("请输入你要签收的订单号");
        int id =scanner.nextInt();
        //使用 orderDao调用方法查询系统内部是否有此订单,返回一个order的对象
        Order order1=orderDao.selectOneOrder(id);
        //对返回的结果进行判断,若系统内部无此订单,则不可以签收,反之有订单则可签收
        //设置订单状态为1,1表示已签收,0表示未签收
        if (order1==null){
            System.out.println("对不起,您要签收的订单不存在");
        }else {
            //调用修改方法,进行修改订单状态,返回受影响的行数
            order1.setStates(1);
            int result=orderDao.update(order1);
            return  result;
​
        }
        return 0;
    }
    //查看餐袋
    @Override
    public Order selectOneOrder(int id) {
        //使用 orderDao调用查询单个方法查询系统内部是否有此订单,返回一个order的对象
        Order order1=orderDao.selectOneOrder(id);
        return order1;
    }
​
    @Override
    public List<Order> selectAllOrder() {
        //使用 orderDao调用查询所有方法查询系统内部是否有此订单,返回一个List<Order>的泛型集合
        List<Order> orderList=orderDao.selectAllOrder();
        return orderList;
    }
​
    @Override
    public void showOrder() {
        System.out.println("1、我要订餐");
        System.out.println("2、查看餐袋");
        System.out.println("3、签收订单");
        System.out.println("4、删除订单");
        System.out.println("5、我要点赞");
        System.out.println("6、退出系统");
        System.out.println("-------------------------------------------");
        System.out.println("请小主选择菜单,输入序号即可");
    }
​
}
import com.bdqn.Entity.Food;
​
import java.util.List;
​
public interface FoodService {
    //规范一下服务类的方法
    int updateFood();
    Food selectOneFood(int cid);
    List<Food> selectAllFood();
}
public interface OrderService {
    //规范一下服务类的方法
    int add();//添加
    int delete();//删除
    int update();//修改
    Order selectOneOrder(int id); //查单个
    List<Order> selectAllOrder(); //查所有
​
    void showOrder();
}

接下来就是工具类

date工具类和DBUtils工具类

import java.text.ParseException;
import java.text.SimpleDateFormat;
​
/**
 * 日期时间工具类DateUtils
 *
 *
 *
 */
public class DateUtils {
​
    private static final SimpleDateFormat SIMPLEDATEFORMAT = new SimpleDateFormat("yyyy-MM-dd");
​
    // 字符串转换为java.util.Date类型日期时间
    public static java.util.Date strDateToUtilDate(String strDate) {
        try {
            return SIMPLEDATEFORMAT.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
​
    // java.util.Date类型日期时间转换为java.sql.Date类型日期时间
    public static java.sql.Date utilDateToSqlDate(java.util.Date date) {
        // long date.getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT以来此 Date对象表示的毫秒数
        return new java.sql.Date(date.getTime());
    }
​
    // java.util.Date类转换为字符串类型
    public static String utilDateToString(java.util.Date date) {
        return SIMPLEDATEFORMAT.format(date);
    }
​
​
}

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
​
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
​
public class DBUtils {
​
    // 声明一个连接池对象
    private static DruidDataSource druidDataSource;
​
    static {
        // 实例化配置文件对象
        Properties properties = new Properties();
​
        try {
            // 加载配置文件内容
            InputStream is = DBUtils.class.getResourceAsStream("/db.properties");
            properties.load(is);
            // 创建连接池
            druidDataSource = (DruidDataSource) DruidDataSourceFactory
                    .createDataSource(properties);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
​
    //返回一个数据源
    public static DataSource getDataSource(){
        return druidDataSource;
    }
​
}

最后也就是view类,也就是测试类

public class chiHuoSystemTest {
    public static void main(String[] args) {
        //因为订餐等数据来源于用户从键盘输入,创建Scanner对象
        Scanner scanner=new Scanner(System.in);
        //定义一个num的值用来控制while循环
        int num=-1;
        //定义一个布尔值用来退出系统
        boolean isExit=false;
        //创建OrderServiceImpl对象,方便后面的方法调用
        OrderServiceImpl orderService=new OrderServiceImpl();
        //创建FoodServiceImpl对象,方便后面的方法调用
        FoodServiceImpl foodService=new FoodServiceImpl();
        System.out.println("--------------------------------------------欢迎光临牛逼外卖---------------------------------------------");
        do {
            orderService.showOrder();
            //定义变量用来接收用户输入的订单序号
            int choose=scanner.nextInt();
            switch(choose){
                case 1:
                    //具体功能表现
                    System.out.println("---------------------------------我要订餐---------------------------------");
                    //调用方法实现我要点餐
                    orderService.add();
                    break;//该break的作用是用来结束整个switch选择结构
                case 2:
                    //具体功能表现
                    System.out.println("---------------------------------查看餐袋---------------------------------");
                    //调用方法查询数据库,实现查询餐袋,这里需要对集合进行遍历,输出集合(数据库)里面已经有的对象
                    List<Order> orderList =orderService.selectAllOrder();
                    orderList.forEach(System.out::println);
                    break;//该break的作用是用来结束整个switch选择结构
                case 3:
                    //具体功能表现
                    System.out.println("---------------------------------签收订单---------------------------------");
                    //调用修改的方法
                    int rows=orderService.update();
                    System.out.println(rows==0?"签收失败":"签收成功");
                    break;//该break的作用是用来结束整个switch选择结构
                case 4:
                    //具体功能表现
                    System.out.println("---------------------------------删除订单---------------------------------");
                    //调用删除的方法
                    int result=orderService.delete();
                    System.out.println(result==0?"删除失败":"删除成功");
                    break;//该break的作用是用来结束整个switch选择结构
                case 5:
                    //具体功能表现
                    System.out.println("---------------------------------我要点赞---------------------------------");
                    //调用food之中修改的方法
                    int result1=foodService.updateFood();
                    System.out.println(result1==0?"点赞失败":"点赞成功");
                    break;//该break的作用是用来结束整个switch选择结构
                case 6:
                    //具体功能表现
                    System.out.println("---------------------------------退出系统---------------------------------");
                    isExit=true;
                    break;//该break的作用是用来结束整个switch选择结构
                default:
                    System.out.println("退出系统");
                    isExit=true;
                    break;
            }
            if (!isExit){
                System.out.println("------------输入0返回------------");
                //定义变量接收用户输入的数字
                num=scanner.nextInt();
            }else {
                break;
            }
        }while(num==0);
        System.out.println("----------------------------------------欢迎下次光临----------------------------------------");
    }
}


标签:return,int,吃货,System,id,println,Apache,DBUtils,public
From: https://blog.csdn.net/qq_57071220/article/details/142108345

相关文章

  • Goby 漏洞发布|(CVE-2024-45195)Apache OFBiz /viewdatafile 代码执行漏洞【已复现】
    漏洞名称:ApacheOFBiz/viewdatafile代码执行漏洞(CVE-2024-45195)EnglishName:ApacheOFBiz/viewdatafileCodeExecutionVulnerability(CVE-2024-45195)CVSScore: 8.0漏洞描述:ApacheOFBiz是一个开源企业资源规划(ERP)系统。它提供了一套企业应用程序,集成并自动化企业的......
  • 镜像:PHP 8.0、Apache 和 phpMyAdmin 的集成​
    一、引言背景随着云计算和容器技术的快速发展,Docker已经成为了现代应用开发和部署的重要工具。在本文中,我们将介绍如何使用Docker镜像来集成PHP8.0、Apache和phpMyAdmin,以构建一个高效、可靠的Web应用开发环境。通过使用Docker,我们可以轻松地管理应用的依赖关系,提高开发......
  • Apache SeaTunnel 2.3.8 新功能与特性预览
    ApacheSeaTunnel最近持续发力,继2.3.6和2.3.7版本之后,2.3.8版本也即将与大家见面。每一个新版本都带来了新的功能和特性,2.3.8版本也不例外,这对于用户而言是一个令人振奋的消息!新的功能意味着SeaTunnel的能力更为强大,性能也会有显著提升。为让社区成员抢先了解2.3.8版本的精彩内......
  • Apache:从Web服务器到数据可视化的技术探索
    Apache:从Web服务器到数据可视化的技术探索Apache,作为开源技术的佼佼者,自诞生以来便以其稳定、高效和跨平台等特性赢得了广泛的应用。从ApacheHTTPServer到ApacheSuperset,Apache项目涵盖了从Web服务到数据可视化等多个领域。本文将深入探讨Apache在Web服务器配置与Apache......
  • Apache License 2.0:全面解析与商用指南
    目录引言基本要求主要特性商用要求分发被授权软件时需要注意的问题容易出现的纠纷总结引言随着开源软件的发展,选择合适的许可证对于项目的成功至关重要。ApacheLicense2.0(简称ALv2)是当前最受欢迎的开源许可证之一,因其灵活度高、兼容性强而备受推崇。本文将详细介绍A......
  • 配置免安装版的apache-tomcat环境,jdk11版本以上。解决控制台环境配置显示成功,确打不开
    我这里下的是jdk22版,https://download.oracle.com/java/22/latest/jdk-22_windows-x64_bin.ziphttps://download.oracle.com/java/22/latest/jdk-22_windows-x64_bin.zip 解压后放在没有中文路径的地方。win+s搜env回车打开环境变量,新建一个变量名:JAVA_HOME,值:为你的jdk解压......
  • DataX实战之MongoDB导入数据到mysql——打包jar包时出现Could not find goal assembly
    使用idea打开我们本地的datax源码或者下载的源码下载地址:https://github.com/alibaba/DataX/blob/master/mongodbreader/doc/mongodbreader.md进行编译,打包上传:指定mongodbreader模块以及它所依赖的模块进行打包【推荐使用,大约只运行3分钟左右】mvn-Ucleanpac......
  • Apache RocketMQ 批处理模型演进之路
    本文收录于ApacheRocketMQ中文社区,更多RocketMQ文章和答疑请访问:https://rocketmq-learning.com/RocketMQ的目标,是致力于打造一个消息、事件、流一体的超融合处理平台。这意味着它需要满足各个场景下各式各样的要求,而批量处理则是流计算领域对于极致吞吐量要求的经典解法,这当......
  • 关于Apache如何多个端口发布多个网站(新手教程)
    一.背景:1.基于系统:Windowsserver20222.基于版本:Apache2.4.57php8.2.23mysql8.0.16二.检查:1.Apache的安装:确认Apache安装成功;如果没有:前往Apache官网;详细步骤会后续新章补上;2.PHP的安装:确认PHP安装成功;如果没有:前往PHP官网;详细步骤会后续新章补上;3.MYSQL的安......
  • apache服务器如何配置多虚拟站点
    演示环境用的是macos下的MAMPPRO5.21、首先启动MAMPPRO,界面如下:2、创建虚拟站点:首先选择“Hosts”,再点击图上的“+”号按钮,如下图出现如下界面:演示创建的站点名为“testa”,选择的目录如下图:再点击“CreateHost”创建虚拟站点,如下图:若要更改PHP的版本,可以选......