我是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();
}
}
答案 0 :(得分:2)
因为这里的代码试图使用null
来设置setIntegerinsertUser.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);