2015-07-28 113 views
0

我有一个表格,其中我将更改用户值。 但我没有指定值密码字段。 例如我改变了一些值并提交,但没有更改密码字段。Java jdbc。如果变量为null,如何不更改数据库中的记录?

<form action="/User" method="get"> 
    <input type="hidden" name="id" value="${param.id}" /> 
    <input type="hidden" name="command" value="editUser"/> 
    Full name: <input type="text" name="fullName" value="${param.fullName}"/><br/> 
    Password: <input type="text" name="password"><br/> 
         name="role"/><br/> 
    <input type="submit" value="Add"/> 
</form> 

所以servlet接收密码变量中的空值并传递UserDao中的值。 我需要,如果密码更改它必须在数据库中更改, 否则不会更改。

public void updateUser(User user){ 
      Connection connection = dataSource.getConnection(); 
      PreparedStatement preparedStatement = connection.prepareStatement("update \"User\" set id_role = ?, fullname = ?, password = ? WHERE id = ?"); 
      preparedStatement.setInt(1, user.getIdRole()); 
      preparedStatement.setString(2, user.getFullName()); 
      preparedStatement.setString(3, user.getPassword()!=null ? user.getPassword() : "old password"); 
      preparedStatement.setInt(4, user.getId()); 
      preparedStatement.executeUpdate(); 
    } 
+0

你必须使用两个查询。带密码更新和不带。 – Jens

回答

0

像下面这样动态构建您的sql并传递值动态索引。

public void updateUser(User user){ 
    Connection connection = dataSource.getConnection(); 

    StringBuilder sql = new StringBuilder(); 
    sql.append("update \"User\" set id_role = ?, fullname = ? "); 

    if (user.getPassword()!=null) 
     sql.append("password = ? "); 

    sql.append("WHERE id = ?""); 

    PreparedStatement preparedStatement = connection.prepareStatement("update \"User\" set id_role = ?, fullname = ?, password = ? WHERE id = ?"); 

    // declare index variable to get the dynamic index 
    int index=1; 
    preparedStatement.setInt(index++, user.getIdRole()); 
    preparedStatement.setString(index++, user.getFullName()); 

    if (user.getPassword()!=null) 
     preparedStatement.setString(index++, user.getPassword()); 

    preparedStatement.setInt(index++, user.getId()); 
    preparedStatement.executeUpdate(); 
} 

在上面的代码中,我们将在用户更改密码值时更新密码,否则密码值不会更新。

试试看吧:)

0

您可以preparedStatment

0

是做像下面通过动态查询建筑

StringBuilder queryBuilder = new StringBuilder("update \"User\" set "); 
    if(user.getIdRole()!=null){ 
     queryBuilder.append("id_role = ?,"); 
    } 
    if(user.getFullName()!=null){ 
     queryBuilder.append(" fullname = ?,"); 
    } 
    if(user.getPassword()!=null){ 
     queryBuilder.append("password = ?"); 
    } 

相同,正如延斯爵士在Servlet的支票说,如果密码是null或不是,并基于updateUserWithPass(用户用户)或updateUserWithoutPass(用户用户)。

部分代码

if(request.getParameter("password")!=null){ 
//Code for updateUserWithPass(User user); 
}else{ 
//Code for updateUserWithoutPass(User user); 
} 
相关问题