我想检查Integer
值是否为空。
Integer
的值在表单中完成。这是我的代码。
这里引入了值:
<input name="varsta" placeHolder="Varsta:" type="text" data-constraints='@NotEmpty @Required @AlphaSpecial'> <br/><br/>
现在我想检查是否有数据被引入。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
Integer varsta = Integer.parseInt(request.getParameter("varsta"));
request.getSession().setAttribute("varsta", varsta);
try {
DBConnection connection = new DBConnection();
Connection con = connection.Connect();
PreparedStatement ps = con.prepareStatement(
"insert into user(Nume,Prenume,E_mail,Parola,Varsta,Sex,Greutate,Inaltime,Nivel_activitate,Calcul_calorii)" +
"values ('"+nume+"','"+prenume+"','"+email1+"','"+parola+"','"+varsta+"','"+sex+"','"+greutate+"','"+inaltime+"','"+activitate+"','"+calorii+"')"
);
if (varsta == null && "".equals(varsta)) {
String message = "Va rugam completati cu atentie TOATE campurile!";
request.setAttribute("message", message);
request.getRequestDispatcher("/inregistrare.jsp").forward(request, response);
} else {
int i = ps.executeUpdate();
if (i > 0) {
request.getRequestDispatcher("/preferinte.jsp").forward(request, response);
}
}
ps.close();
con.close();
} catch(Exception se) {
se.printStackTrace();
}
}
无效。
有人可以帮助我吗?
答案 0 :(得分:3)
如果你想检查你的字段是否为空,你可以使用它:
if (!request.getParameter("varsta").equals("")) {
System.out.println("not empty");
} else {
System.out.println("Empty");
}
但是如果你想得到这个价值,那么你应该对此表示赞赏:
try {
if (!request.getParameter("varsta").equals("")) {
System.out.println("not empty");
Integer varsta = new Integer(request.getParameter("varsta"));
} else {
System.out.println("Exmpty");
}
} catch (NumberFormatException e) {
System.out.println("Number is not correct");
}
如果request.getParameter("varsta") = "4558ez"
怎么办?这可能会产生问题。
答案 1 :(得分:3)
类Integer
只是原始int
类型之上的包装器。因此它可以是null
或存储有效的整数值。它没有明显的“空”定义。
如果您只是将Integer
与空String
进行比较,那么结果会得到false
。总是。请参阅Integer.equals(Object o)
实施:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
首先,您可以在解析行中的整数期间获得NumberFormatException
:
Integer varsta = Integer.parseInt(request.getParameter("varsta"));
你得到它,因为For input string: ""
看起来像NumberFormatExpection
消息。
在您的示例中,您应该检查"varsta"
属性值是否为数字(假设它是一个字符串),然后解析它,或按原样解析它并捕获NumberFormatException
Integer.parseInt()
抛出不正确的参数。
第一个解决方案:
Integer varsta = null;
String varstaStr = request.getParameter("varsta"); // read string 'varsta' field
if (varstaStr != null && varstaStr.matches("\\d+")) { // null-check and regex check to make sure the string contains only digits
varsta = Integer.parseInt(varstaStr);
}
第二个解决方案:
Integer varsta = null;
String varstaStr = request.getParameter("varsta"); // read string 'varsta' field
try {
varsta = Integer.parseInt(varsta);
} catch (NumberFormatException e) {
// handle error
}
在此之后,您还有另外一个问题:
if(varsta == null && "".equals(varsta)){
此处varsta
引用的类型为Integer
,因此"".equals(varsta)
将始终返回false
:
(varsta == null && "".equals(varsta)) = [assume varsta is null] =
((null) == null && "".equals(null)) = (true && false) = false
替换
if(varsta == null && "".equals(varsta)){
与
if(varsta == null){
这应该对你有帮助。
P.S。如果您使用版本7或更高版本的Java,请考虑使用try-with-resources来管理Connection
和PreparedStatement
。