public void updateGoddess(Goddess goddess) throws SQLException{
Connection conn = DBUtil.getConnection();
StringBuilder sql=new StringBuilder();
sql.append("update femalegod set ");
//这个comFlag标记用来确定是否要在拼接语句时加逗号
boolean comFlag=false;
//如果本属性非空,后面的属性拼接时必然要加逗号,所以comFlag赋值为true
if (goddess.getUserName()!=null){
sql.append("username=?");
comFlag=true;
}
//如果本属性非空,且comFlag为false,说明本属性为set关键字后第一个设置,则前面无需加逗号,
//同时由于本属性非空,说明后面如果有要拼接的属性,必须有逗号,所以设置comFlag为true
if (goddess.getAge()!=null){
if (comFlag)
sql.append(",age=?");//comFlag为真,说明前面已有待更新的属性,因此要在最前面加逗号
else{
sql.append("age=?");//comFlag为假,前面还没有待更新属性,本属性为第一个待更新的,无需在前面加逗号
comFlag=true; //如果后面还有属性要更新,那个属性前需要加逗号,因此在这里设置comFlag为true
}
}
if (goddess.getBirthday()!=null){
if (comFlag)
sql.append(",birthday=?");
else{
sql.append("birthday=?");
comFlag=true;
}
}
if (goddess.getEmail()!=null){
if (comFlag)
sql.append(",email=?");
else{
sql.append("email=?");
comFlag=true;
}
}
if (goddess.getMobile()!=null){
if (comFlag)
sql.append(",mobile=? ");
}
sql.append(" where id=?");
System.out.println(sql.toString());
PreparedStatement ps=conn.prepareStatement(sql.toString());
//i为参数索引值
int i=0;
//为前面的sql语句里的?号取对应的属性值,如果属性为空,则不需要更新,跳过,否则,提取属性值
if(goddess.getUserName()!=null)
ps.setString(++i, goddess.getUserName());
if(goddess.getAge()!=null)
ps.setInt(++i, goddess.getAge());
if(goddess.getBirthday()!=null)
ps.setDate(++i, new Date(goddess.getBirthday().getTime()));
if(goddess.getEmail()!=null)
ps.setString(++i, goddess.getEmail());
if(goddess.getMobile()!=null)
ps.setString(++i, goddess.getMobile());
ps.setInt(++i, goddess.getID());
ps.execute();
ps.close();
}