怎么判断集合里面有没有对应的id

来源:10-2 项目作业

宝慕林4199460

2023-03-09 19:43:53

package com.imooc.jdbc.newsapp.command;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.imooc.jdbc.newsapp.entity.News;
import org.apache.commons.dbutils.QueryRunner;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.net.URLDecoder;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Properties;
import java.util.Scanner;

/**
 *修改新闻
 */
public class UpdateCommand implements Command {
    @Override
    public List<News> execute() {
        //修改新闻前,先展示所有新闻。调用查询命令,显示所有数据。
        Command command = new QueryCommand();
        List<News> list=command.execute();
        Scanner in = new Scanner(System.in);
        boolean i = true;
        Integer id = 0;
        while (i){
            System.out.println("请输入要修改新闻的id");
            id = in.nextInt(); // 后面更新的时候用到id,所以放在while前面声明。
            //判断新闻id是否存在,如果不存在,重写输入
            for(News news : list){
                if (news.getId() == id){
                    i = false;
                    break;
                }
                System.out.println("不存在该新闻id,请重新输入!");
            }
        }
        System.out.println("请输入新闻标题");
        String title = in.next();
        System.out.println("请输入新闻内");
        String content = in.next();
        // Apache DBUtils + Druid 联合使用
        Properties properties = new Properties();
        String propertyFile = UpdateCommand.class.getResource("/druid-config.properties").getPath();
        Connection conn = null;
        try {
            propertyFile = new URLDecoder().decode(propertyFile, "UTF-8");
            properties.load(new FileInputStream(propertyFile));
            DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
            conn = dataSource.getConnection();
            conn.setAutoCommit(false);
            String sql = "update news set title = ? , content = ? where  id = ?";
            QueryRunner qr = new QueryRunner();
            qr.update(conn,sql,new Object[]{title,content,id});
            conn.commit();
            System.out.println("修改成功!");
        } catch (Exception e) {
            e.printStackTrace();
            try {
                if (conn!=null && !conn.isClosed()) {
                    conn.rollback();
                }
            } catch (SQLException ex) {
                e.printStackTrace();
            }
        }finally {
            try {
                if (conn!=null && !conn.isClosed()){
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return list;
    }
}

问题描述:

我这代码怎么实现不了,itellij工具我不会单步调试。下面这两个我看不懂,大佬救命

3.UpdateCommand类中可以调用QueryCommand类中的execute方法,并且判断list集合中的元素。在删除之前先将符合要求的元素进行存储,删除之后返回存储了被删除元素的List<News> list

4.DeleteCommand类的实现方式同第三条


写回答

1回答

好帮手慕小蓝

2023-03-10

同学你好,老师将需要修改的部分直接写在了代码中,并且提供了注释,同学可以参考一下。

package com.imooc.jdbc.newsapp.command;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.imooc.jdbc.newsapp.entity.News;
import org.apache.commons.dbutils.QueryRunner;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.net.URLDecoder;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Scanner;

/**
 *添加新闻
 */
public class UpdateCommand implements Command {
    @Override
    public List<News> execute() {
        //修改新闻前,先展示所有新闻。调用查询命令,显示所有数据。
        Command command = new QueryCommand();
        List<News> list=command.execute();
        Scanner in = new Scanner(System.in);
        boolean i = true;
        Integer id = 0;

        //将被修改的News对象进行存储
        News updated = null;
        while (i){
            System.out.println("请输入要修改新闻的id");
            id = in.nextInt(); // 后面更新的时候用到id,所以放在while前面声明。
            //判断新闻id是否存在,如果不存在,重写输入
            for(News news : list){
                if (news.getId() == id){
                    i = false;
                    //将符合条件的News对象进行存储
                    updated = news;
                    break;
                }
            }
            //打印语句应当写在循环外,并且需要进行判断
            if (i) System.out.println("不存在该新闻id,请重新输入!");
        }
        //将被更新的元素放在集合中,最终返回这个集合即可
        List<News> updateNews = new ArrayList<>();
        updateNews.add(updated);

        System.out.println("请输入新闻标题");
        String title = in.next();
        System.out.println("请输入新闻内");
        String content = in.next();
        // Apache DBUtils + Druid 联合使用
        Properties properties = new Properties();
        String propertyFile = UpdateCommand.class.getResource("/druid-config.properties").getPath();
        Connection conn = null;
        try {
            propertyFile = new URLDecoder().decode(propertyFile, "UTF-8");
            properties.load(new FileInputStream(propertyFile));
            DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
            conn = dataSource.getConnection();
            conn.setAutoCommit(false);
            String sql = "update news set title = ? , content = ? where  id = ?";
            QueryRunner qr = new QueryRunner();
            qr.update(conn,sql,new Object[]{title,content,id});
            conn.commit();
            System.out.println("修改成功!");
        } catch (Exception e) {
            e.printStackTrace();
            try {
                if (conn!=null && !conn.isClosed()) {
                    conn.rollback();
                }
            } catch (SQLException ex) {
                e.printStackTrace();
            }
        }finally {
            try {
                if (conn!=null && !conn.isClosed()){
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return updateNews;
    }
}

祝学习愉快~

0

0 学习 · 9886 问题

查看课程