怎么就我遇到这种问题! ?

来源:2-9 JDBC实战---搭建视图层(下)

wshyzx

2016-09-16 01:59

			}else if(OPERATION_UPDATE.equals(in.toUpperCase())
					|| OPERATION_UPDATE.substring(0,1).equals(in.toUpperCase())
					|| OPERATION_UPDATE.equals(previous)){
				previous=OPERATION_UPDATE;
				//更新
				if(1==step){
					System.out.println("请输入要更新的女生的【编号/ID】");
				}else if(2==step){
					try {
						if(action.get(Integer.valueOf(in))==null){
							System.out.println("ID无效,请重新输入。。。");
							step=1;
						}
					} catch (NumberFormatException e) {
						e.printStackTrace();
					} catch (SQLException e) {
						e.printStackTrace();
					}
					goddess.setId(Integer.valueOf(in));
					System.out.println("【姓名】,如果不更新该字段,则输入null,下同");
				}else if(3==step){
					if(!in.equals("null")){
						goddess.setUser_name(in);
					}
					System.out.println("【性别】 (0:男 , 1:女)");
				}else if(4==step){
					if(!in.equals("null")){
					goddess.setSex(Integer.valueOf(in));
					}
					System.out.println("【年龄】");
				}else if(5==step){
					if(!in.equals("null")){
					goddess.setAge(Integer.valueOf(in));
					}
					System.out.println("【生日】,格式如:yyyy-MM-dd");
				}else if(6==step){
					if(!in.equals("null")){
						SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
						Date birthday=null;
						try {
							birthday = sf.parse(in);
							goddess.setBirthday(birthday);
							
						} catch (ParseException e) {
							e.printStackTrace();
							System.out.println("您输入的格式有误,请重新输入");
							step=5;
						}
					}
					System.out.println("【邮箱】");
				}else if(7==step){
					if(!in.equals("null")){
						goddess.setEmail(in);
					}
					System.out.println("【手机号】");
				}else if(8==step){
					if(!in.equals("null")){
						goddess.setMobile(in);
					}
					
					try {
						action.edit(goddess);
						System.out.println("女生信息更新成功!");
						previous=null;
					} catch (Exception e) {
						e.printStackTrace();
						System.out.println("女生信息更新失败!\n"+"请重新输入。。。");
						step=0;
					}
				}
				if(OPERATION_UPDATE.equals(previous)){
					step++;
				}
								
			}

http://img.mukewang.com/57dadf360001231206670615.jpg

如图,2个问题。谁能助我,感激不尽!

我还疑惑的是,在原始的updateGoddess()方法中,只有9个参数,代码如下:

	public void updateGoddess(Goddess g) throws SQLException{
		Connection conn=DBUtil.getConnection();
		String sql="update imooc_goddess set user_name=?,sex=?,age=?,birthday=?,email=?,mobile=?,"
				+ "update_user=?,update_date=current_date(),isdel=? "
				+ "where id=?";
		PreparedStatement ptmt=conn.prepareStatement(sql);
		
		ptmt.setString(1, g.getUser_name());
		ptmt.setInt(2, g.getSex());
		ptmt.setInt(3, g.getAge());
		ptmt.setDate(4, new Date(g.getBirthday().getTime()));
		ptmt.setString(5, g.getEmail());
		ptmt.setString(6, g.getMobile());
		ptmt.setString(7, g.getUpdate_user());
		ptmt.setInt(8, g.getIsdel());
		ptmt.setInt(9, g.getId());
		ptmt.execute();
	}

而我在View中的update模块里,不论是按视频里写ID加姓名、年龄、生日这4个参数,还是对照updateGoddess()写9个,或是写完全部12个参数,都报空指针异常。这是为什么?

写回答 关注

5回答

  • wshyzx
    2016-11-09 10:28:13

    原来是逻辑出错了!我们仿写前几个模块比如add,但此处是update,应该先传入id,根据id取出该条记录,然后对此记录进行修改。

    第19行改为 goddess = (Goddess)action.get(Integer.valueOf(in));

    一切ok!

    空指针就是说 我们连要修改的对象都没有取到啊,谈何修改

    hellow...

    那为什么在GoddessAction测试例中没有遇到这样的问题呢?

    2017-01-20 00:43:42

    共 1 条回复 >

  • 慕慕5984477
    2016-11-08 17:47:38

    我也遇到这种问题,我觉得是视频里面有问题,虽然不知道为什么能够作用。

    当时主要要ptmt.setInt(int position,int x) 这里的x是个int类型,

    但是我们在定义的sex是个Integer是个对象,然后在View里面并没有给它和isdel赋值,导致传递到ptmt.setInt(int position,int x)中变成ptmt.setInt(int position,NULL),所以就出现问题了。

    解决方案是在View里面给g.sex会g.isdel直接赋值或者在类Goddess添加构造器赋值即可。

    至于为何视频里面可以有结果,我不知道。

    wshyzx

    解决了,看我自己的回复,希望能帮到你!

    2016-11-09 10:29:17

    共 1 条回复 >

  • Mua清流
    2016-10-17 19:58:56

    我直接把 源代码 考了一份贴上去 就好了

    共 1 条回复 >

  • Mua清流
    2016-10-17 19:17:42

    我跟你一样的问题,性别字段空指针异常,补上了也不行!!

    wshyzx

    解决了,看我自己的回复,希望能帮到你!

    2016-11-09 10:29:53

    共 2 条回复 >

  • 慕祈
    2016-09-16 12:57:42

    调用增加女神的方法没有给定性别,创建人等信息,所以出错

    wshyzx

    在上面的方法中我补上了所有的12条字段,结果还是没有任何变化

    2016-09-16 14:35:55

    共 1 条回复 >

JDBC之 “ 对岸的女孩看过来”

一起领略JDBC的奥秘,为进一步学习集成框架打下良好的基础

99327 学习 · 856 问题

查看课程

相似问题