这需求该怎么做呢

这需求该怎么做呢

package com.imooc.jdbc.newsapp.command;

import com.alibaba.druid.pool.DruidDataSourceFactory;
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.Properties;
import java.util.Scanner;

/**
 *添加新闻
 */
public class UpdateCommand implements Command {
    @Override
    public void execute() {
        //修改新闻前,先展示所有新闻。调用查询命令,显示所有数据。
        Command command = new QueryCommand();
        command.execute();
        Scanner in = new Scanner(System.in);
        System.out.println("请输入要修改新闻的id");
        Integer id = in.nextInt();
        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();
            }
        }
    }
}

问题描述:

当用户输入不存在的id值时,会提示修改成功。

先根据用户输入的id进行查询,如果没有对应数据则提示错误。如果能够查询到数据才提示输入数据和修改数据。

相关截图:

https://img1.sycdn.imooc.com//climg/640955e8097da1b208210405.jpg


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2023-03-09 12:23:29

同学你好,老师先给同学提供一个思路,同学可以先尝试实现一下:

在修改或者删除前,要先检查用户输入的id是否对应了数据库中的数据,此时需要进行数据库的查询操作。但是实际上每次更新或者删除之前,都已经进行过查询了,并且获取了数据中的数据,此时可以考虑将查询结果进行遍历,检查id值是否在集合中存在即可。

即利用查询功能的结果集,来进行数据的验证工作。

祝学习愉快~

  • 提问者 宝慕林4199460 #1
    ;
    
    ;
    ;
    ;
    ;
    ;
    
    ;
    ;
    ;
    ;
    ;
    ;
    ;
    ;
    ;
    ;
    
    {
        () {
            = Properties();
            = ..getResource().getPath();
            {
                = URLDecoder().(, );
                .load(FileInputStream());
                = .();
                = QueryRunner();
                <> = .query(,
                        BeanListHandler<>(.));
                ..println(.size()+);
                (:){
                    ..println(++.getId()++.getTitle()++.getContent()++.getCreate_time()+);
                }
            } (e) {
                e.printStackTrace();
            }
        }
    
        () {
            = Properties();
            = ..getResource().getPath();
            = ;
            {
                = URLDecoder().(, );
                .load(FileInputStream());
                = .();
                = QueryRunner();
                <> = .query(,
                        BeanListHandler<>(.));
                ..println(.size()+);
                = .size();(:){
                    ..println(++.getId()++.getTitle()++.getContent()++.getCreate_time()+);
                }
            } (e) {
                e.printStackTrace();
            }
            ;
        }
    }
    
    package com.imooc.jdbc.newsapp.command;
    
    import com.alibaba.druid.pool.DruidDataSourceFactory;
    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.Properties;
    import java.util.Scanner;
    
    /**
     *添加新闻
     */
    public class UpdateCommand implements Command {
        @Override
        public void execute() {
            //修改新闻前,先展示所有新闻。调用查询命令,显示所有数据。
            Command command = new QueryCommand();
            command.execute1();
            Scanner in = new Scanner(System.in);
            System.out.println("请输入要修改新闻的id");
            Integer id = in.nextInt();
            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();
                }
            }
        }
    }

    老师,我的思路是在查询方法里面加多一个execute1,来判断结果集里面是否有记录,如果cnt为0,就提示就修改失败。 可是我在UpdateCommand里面怎么调用不了 这个execute1

    2023-03-09 13:11:43
  • 好帮手慕小蓝 回复 提问者 宝慕林4199460 #2

    同学你好,同学提供的代码格式错乱,老师无法看出同学是如何书写的。

    同学可以尝试将commend接口的返回值类型更换为List<News>,当查询时直接返回结果集。

    当更新时,可以将更新前的数据存储在集合中进行返回。当删除时,可以将被删除的数据存储在集合中进行返回。这样在未来如果需要做数据回退功能时,还可以将数据恢复回去。

    祝学习愉快~

    2023-03-09 13:22:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师