我在应用程序中有一个显示数字的下拉字段。
当用户没有从下拉列表中选择任何值时,我希望将数据库插入为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。
答案 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
。