错误处理String to Integer并在数据库中插入空值

时间:2010-10-18 17:24:07

标签: java hibernate

我是Java新手,我正在JSF和Hibernate中创建一个应用程序。

我的表单有几个输入字段,但只有一个字段是Integer,Age。其余的将是字符串。 Age不是必填字段,因此用户可以输入或不输入,但是如果字段留空,我的应用程序应该在数据库中插入null或空字符串。我已经完成了错误处理,如果用户手动输入数字以外的字符,但我想允许用户输入任何内容并且仍然能够提交,所以我允许空字符串。这就是我的问题所在。我在我的数据库上调用Insert语句的createUser方法需要一个Int,所以我想我可以使用NULL,这可以工作,但是当我将该字段设置为null时,我得到一个空指针excpetion。我的代码快照如下。

我遗漏了所有其他代码,只是通过传递Age来插入新用户来简化它。

//inside UserManager.java file
public void createUser(ActionEvent event) {

  String age = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("createAge");

  try {
     //check to make sure that it is not empty
     Integer ageInt = null; 
     if(!age.equals("") ) {
         ageInt = new Integer(age).intValue();
     }

     userDao.createUser(ageInt);
  }
  catch(Exception e) {
      e.fillInStackTrace();
  }
}

//inside UserDao.java file
public void createUser(Integer age) { 
    Session sess = getSessionFactory().openSession();

    try {
        Query.insertUser = session.createSQLQuery("CALL inser_user(:age)");
        insertUser.setInteger("age", age);
        insertUser.executeUpdate();
    }
    catch(HibernateException e) {
         throw new HibernateException(e);
    } finally {
         session.close();
    }
}

3 个答案:

答案 0 :(得分:2)

因为这里的代码试图使用null

来设置setInteger
insertUser.setInteger("age", age);

我建议传递“0”表示没有提供年龄?这样你就可以在db中保存一个值并知道它实际上有意义

if ( age == null ) {
   insertUser.setParameter("age", null);
} else {
   insertUser.setInteger("age", age);
}

答案 1 :(得分:0)

如果该字段为null,请使用setNull()方法而不是setInteger()。

答案 2 :(得分:0)

您可以使用Aaron的解决方案,但请使用:

insertUser.setParameter("age", null);