本人用servlet+jsp写的用户信息模块儿,在测试更新数据时出现NullPointerException,更新的数据中含有Birthday字段,源码如下:
public void updateCustomer(Customer customer) throws IdIsNullException {
// TODO Auto-generated method stub
if(customer.getId()==null || customer.getId().trim().equals(""))
throw new IdIsNullException() ;
try{
conn = JdbcUtil.getConn() ;
String sql = "update customer set name=?,gender=?,birthday=?,cellphone=?,email=?,hobby=?,type=?,description=? where id=?" ;
stmt = conn.prepareStatement(sql) ;
stmt.setString(1, customer.getName());
stmt.setString(2, customer.getGender());
stmt.setDate(3, new java.sql.Date(customer.getBirthday().getTime()));
stmt.setString(4, customer.getCellphone());
stmt.setString(5, customer.getEmail());
stmt.setString(6, customer.getHobby());
stmt.setString(7, customer.getType());
stmt.setString(8, customer.getDescription());
stmt.setString(9 , customer.getId()) ;
stmt.executeUpdate() ;
}catch(Exception e) {
throw new DaoException(e) ;
}finally {
JdbcUtil.release(rs, stmt, conn);
}
}
测试代码如下:
@Test
public void testUpdateCustomer() throws IdIsNullException {
c = new CustomerDaoImpl() ;
System.out.println(c);
Customer customer = new Customer() ;
System.out.println(customer);
customer.setId("0478");
customer.setDescription("内蒙巴彦淖尔市");
c.updateCustomer(customer);
}
本测试代码修改了Id为“0478”的记录的Description字段,进行Junit测试时出现NullPointerException异常。后来发现,需要重新填写Birthday字段才可以修改成功。
解决办法:
@Test
public void testUpdateCustomer() throws IdIsNullException {
c = new CustomerDaoImpl() ;
System.out.println(c);
Customer customer = new Customer() ;
System.out.println(customer);
customer.setId("0478");
customer.setBirthday(new Date()) ;
customer.setDescription("内蒙巴彦淖尔市");
c.updateCustomer(customer);
}
将Birthday字段重新填写,就可以更新成功了。这里设置当前时间,用户也可以根据自己的需要来设置,这里就不在演示。