检查Integer是否为空

时间:2016-07-17 16:10:36

标签: java jdbc

我想检查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();
    }
}       

无效。

有人可以帮助我吗?

2 个答案:

答案 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来管理ConnectionPreparedStatement