自由编程打卡,请老师检查!

来源:4-4 自由编程

Mycheol

2020-08-26 14:44:07

package com.imooc.jdbc.goodsapp;

import com.imooc.jdbc.common.DbUtils;
import com.imooc.jdbc.hrapp.command.Command;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

public class InsertCommand implements Command {
    @Override
    public void excute() throws SQLException, ClassNotFoundException {
        Scanner in = new Scanner(System.in);
        System.out.print("请输入商品名称:");
        String name = in.next();
        System.out.print("请输入商品价格:");
        float price = in.nextFloat();
        System.out.print("请输入商品描述:");
        String desp = in.next();
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            conn = DbUtils.getConnection();
            String sql = "INSERT INTO goods (name,price,desp) VALUE (?,?,?)";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, name);
            pstmt.setFloat(2, price);
            pstmt.setString(3, desp);
            int cnt = pstmt.executeUpdate();
            if (cnt == 1) {
                System.out.println("商品信息添加成功:");
                System.out.println(name + " " + price + " " + desp);
            } else {
                System.out.println("商品信息添加失败!");
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            DbUtils.closeConnection(null, pstmt, conn);
        }
    }

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Command cmd = new InsertCommand();
        cmd.excute();
    }
}

修改价格和删除数据比较简单,就不贴出代码了!这里贴的是添加数据(耳机)的代码,我想问一下老师,题目里面写的是如果成功,就输出所有数据,我只能写一条输出新增的数据,如果输出全部数据(包括自增字段id)呢?我尝试了用结果集接收pstmt.excuteQuery()方法的返回值,但是貌似运行不太成功,能不能指点一下?另外我怎么输入才能验证数据录入失败的情况,我在控制台直接回车也不能打一条错误数据或者null值写入数据表

写回答

2回答

好帮手慕小尤

2020-08-26

同学你好,1. 同学是想知道如何输出全部数据吗?如果是,则同学需要定义查询语句,进行查询,然后修改输出数据。如下所示:

http://img.mukewang.com/climg/5f461ff00902c95d08390335.jpg

2. 同学可以对输入数据做一下异常处理,当发生此异常时,则输出提示。如下所示:

http://img.mukewang.com/climg/5f4620fa094d10fa05440274.jpg

@Override
public void excute() throws SQLException, ClassNotFoundException {
    Scanner in = new Scanner(System.in);
    System.out.print("请输入商品名称:");
    String name = in.next();
    System.out.print("请输入商品价格:");
    float price = 0;
    try {
        price = in.nextFloat();
    } catch (java.util.InputMismatchException e) {
        System.out.println("数据错误,默认添加0");
        in.next();
    }
    System.out.print("请输入商品描述:");
    String desp = in.next();
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
        conn = DbUtils.getConnection();
        String sql = "INSERT INTO goods (name,price,desp) VALUE (?,?,?)";
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, name);
        pstmt.setFloat(2, price);
        pstmt.setString(3, desp);
        int cnt = pstmt.executeUpdate();
        if (cnt == 1) {
            System.out.println("商品信息添加成功:");
            String sql2="SELECT * FROM goods";
            rs=pstmt.executeQuery(sql2);
            while (rs.next()) {
                System.out.println(rs.getInt("id")+rs.getString("name")
                        +rs.getFloat("price")+rs.getString("desp"));
            }
        } else {
            System.out.println("商品信息添加失败!");
        }

    } catch (SQLException throwables) {
        throwables.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } finally {
        DbUtils.closeConnection(null, pstmt, conn);
    }
}

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

1
hycheol
h 感谢老师!第一个问题我已经知道怎么处理了,但是第二个问题,我按老师这样写,他还是成功录入了一条记录,然后返回了全部数据,不知道是为什么
h020-08-26
共1条回复

好帮手慕小尤

2020-08-26

同学你好,如果同学想当输入错误时,就结束添加。则同学可以在catch中添加return,跳出次方法。如下所示:

System.out.print("请输入商品价格:");
    float price = 0;
    try {
        price = in.nextFloat();
    } catch (java.util.InputMismatchException e) {
        System.out.println("数据错误,默认添加0");
        in.next();
        return;
    }

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

1

0 学习 · 16556 问题

查看课程