正确初始化包装器Integer的方法

时间:2013-09-29 10:50:25

标签: java integer

我在应用程序中有一个显示数字的下拉字段。

当用户没有从下拉列表中选择任何值时,我希望将数据库插入为null。

如何将Integer包装器类初始化为null?

我试过

 Integer  days = new Integer(null);
        if (request.getParameter("days").equals("")) {
        } else {
            days  = 
                    Integer.parseInt(request.getParameter("days"));
        }

但是我收到以下错误,那么声明Integer变量的正确方法是什么?

NumberFormatException at test.doPost(Controller.java:23);

如何初始化Integer变量,以便在用户未选择任何值的情况下插入null。

6 个答案:

答案 0 :(得分:6)

您应该使用null初始化:

    Integer  days = null;
    if (request.getParameter("days") != null && !request.getParameter("days").isEmpty()) {
        days = Integer.parseInt(request.getParameter("days"));
    }

UPDATE:最好先验证一个整数:

    Integer  days = null;
    if(request.getParameter("days")!=null && request.getParameter("days").matches("^\\d+$"))
    {
        days = Integer.parseInt(request.getParameter("days"));
    }

更新2:能够在DB中插入null:

if (project.getDays() != null)
   callablestatement.setInt(2, project.getDays());
else 
   callablestatement.setNull(2, java.sql.Types.INTEGER);

答案 1 :(得分:1)

怎么样:

Integer days = null;
String param = request.getParameter("days");
if (param != null && !"".equals(param)) {
   days  = Integer.parseInt(request.getParameter("days"));
}

答案 2 :(得分:1)

如何将days对象设置为null,然后检查days对象是null还是为空:

Integer days = null;
if (request.getParameter("days") != null && !request.getParameter("days").isEmpty()) {
    // rest of code.

答案 3 :(得分:1)

您无法信任请求中days参数的值 如果某个客户端传递无效值怎么办? (非数字字符串)。
因此,当您尝试解析参数值时,应该捕获NumberFormatException

Integer days = null;
String parameterValue = request.getParameter("days");
if (parameterValue != null && !parameterValue.isEmpty()) {
  try {
    days = Integer.parseInt(parameterValue);
  } catch (NumberFormatException e) {
    // log or something
  }
}

答案 4 :(得分:1)

除了其他人所评论的声明。

您收到NumberFormatException因为request.getParameter("days")返回非整数值文本或null。当获取的字符串输入不是有效的整数值时,parseInt方法抛出NumberFormatException

答案 5 :(得分:1)

使用try / catch:

Integer days = null;
try {
    days = Integer.parseInt(request.getParameter("days"));
} catch (final NumberFormatException ex) {
    // ignore
}

或使用番石榴Ints

Integer days = null;
final String param = request.getParameter("days");
if (param != null) {
    days = Ints.tryParse(param);
}

这样,如果“days”无法解析,则可以避免使用NumberFormatException