问答详情
源自:2-9 JDBC实战---搭建视图层(下)

为什么新增女神的时候,会在isdel的字段位置报null

新增女神,除了id,user_name两个字段,其他的字段默认为null,但是新增女神的时候,只输入姓名,性别,年龄,邮箱,手机号,新增报错,create_user和update_user我也没有输入,也没有报错偏偏在isdel报错。

我给isdel的字段赋值后,新增成功了,也没有报错,请各位同学帮忙看下。

欢迎来到女神禁区:
下面是女神禁区的功能列表:
[MAIN/M]:主菜单
[QUERY/Q]:查看女神的全部信息
[GET/G]:查看某位女神的详细信息
[ADD/A]:添加女神信息
[UPDATE/U]:更新女神信息
[DELETE/D]:删除女神
[SEARCH/S]:查询女神信息(根据姓名,手机号来查询)
[EXIT/E]:退出女神禁区
[BREAK/B]:退出当前功能,返回主菜单
A
请说出女神的[姓名]
xioa
请输出女神的[性别]
1
请输出女神的[年龄]
21
请输出女神的[生日],格式为yyyy-MM-dd
1995-4-9
请输入女神的[邮箱]
123@qq.com
请输出女神的[手机号]
123123123
请输入女神的[是否删除]
2
新增女神成功


数据库的表创建语句

CREATE TABLE `imooc_goddess` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(30) NOT NULL,
  `sex` int(11) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `email` varchar(30) DEFAULT NULL,
  `mobile` varchar(11) DEFAULT NULL,
  `create_user` varchar(30) DEFAULT NULL,
  `create_date` date DEFAULT NULL,
  `update_user` varchar(30) DEFAULT NULL,
  `update_date` date DEFAULT NULL,
  `isdel` int(11) DEFAULT NULL,-----------这里默认为null啊
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

   // 新增女神
    public void addGoddess(Goddess g) throws Exception {
        Connection conn = DBUtil.getConnection();
        String sql = ""+
                "insert into imooc_goddess"+
                "(user_name,sex,age,birthday,email,mobile,create_user,"+
                "create_date,update_user,update_date,isdel) values"+
                "(?,?,?,?,?,?,?,current_date(),?,current_date(),?)";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        
        pstmt.setString(1, g.getUser_name());
        pstmt.setInt(2, g.getSex());
        pstmt.setInt(3, g.getAge());
        pstmt.setDate(4, new Date(g.getBirthday().getTime()));
        pstmt.setString(5, g.getEmail());
        pstmt.setString(6, g.getMobile());
        pstmt.setString(7, g.getCreate_user());
        pstmt.setString(8, g.getUpdate_user());
        pstmt.setInt(9, g.getIsdel());----------------这个位置报错null
        pstmt.execute();
    }

这是后边我加上了 给isdel赋值

else if (OPERATION_ADD.equals(in) || OPERATION_ADD.substring(0, 1).equals(in)
                    || OPERATION_ADD.equals(previous)) {
                previous = OPERATION_ADD;
                // 根据step的值来执行新增女神的第几步操作
                if (1 == step) {
                    System.out.println("请说出女神的[姓名]");
                } else if (2 == step) {
                    goddess.setUser_name(in);
                    System.out.println("请输出女神的[性别]");
                } else if (3 == step) {
                    goddess.setSex(Integer.valueOf(in));
                    System.out.println("请输出女神的[年龄]");
                } else if (4 == step) {
                    goddess.setAge(Integer.valueOf(in));
                    System.out.println("请输出女神的[生日],格式为yyyy-MM-dd");
                } else if (5 == step) {
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    try {
                        Date birthday = sdf.parse(in);
                        goddess.setBirthday(birthday);
                        System.out.println("请输入女神的[邮箱]");
                    } catch (ParseException e) {
                        e.printStackTrace();
                        System.out.println("您输入的格式有误,请重新输入");
                        step = 3;// 需要减一次,下面会自增1
                    }
                } else if (6 == step) {
                    goddess.setEmail(in);
                    System.out.println("请输出女神的[手机号]");
                } else if (7 == step) {
                    goddess.setMobile(in);
                    System.out.println("请输入女神的[是否删除]");
                } else if (8 == step) {
                    goddess.setIsdel(Integer.valueOf(in));
                    try {
                        action.add(goddess);
                        System.out.println("新增女神成功");
                    } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("新增女神失败");
                    }
                }
            }
            if (OPERATION_ADD.equals(previous)) {
                step++;
            }

提问者:qq_浩然_9 2019-02-24 14:29

个回答

  • 我爱孙佳怡
    2019-06-08 14:08:20

    dao里调用了goddess的创建人更新人还有isdel,但是你在view里没有给它赋值啊,导致的空指针,要想解决,在Goddess.java里给这些属性赋值为null就行了,或者在view里添加通过scanner为这3个属性赋值。这个和数据库的语句没关系的,因为你的dao里的add方法里的那些?不会自动赋值的。