在前天的课上,听了这么一个词:万能查询.刚开始还不知道怎么一回事,知道老师把几个毫无头绪,以为要写很多个方法的程序实现的时候,我真是傻眼了...唉,总结一下,以后这一点真的很重要呢...包括全局统筹包括代码的清晰健壮,是我见过的最好的解决方法了...这样,我对于 SQL 语句的理解更进了一步..更觉得 SQL 语句的拼接真是一件很神奇的事情!....
以下是一个 dao 中其中一个方法,重点是这个 sql 语句的用法,只用这一个方法,就能以不变应万变,真是让我们这些刚开始项目实践的人看的佩服至极,本来以为有好多种可能,无比繁琐的事情在这个 sql 语句一些出来,一切就变得简单明了了.你看,这个 sql 语句是用来修改相关用户的相关信息的,由于修改的项数并不确定,因此用以前只传一个值得方法显然是不可取的.可是,用下面的句子就不一样了,sql语句会根据调用它的对象传过来的值的多少来决定 sql 语句的长度,随机应变,灵活自如...这样的事情何乐而不为呢?
public boolean update(Connection con, UserDTO udto){
boolean flag = false;
String sql = "UPDATE users SET ";
int f = 0;
if(udto.getClassname() != null){
if(f > 0) sql += ",";
sql += "classname = '" + udto.getClassname() + "'";
f++;
}
if(udto.getDescript() != null){
if(f > 0) sql += ",";
sql += "descript = " + udto.getDescript()+ "'";
f++;
}
if(udto.getEmail() != null){
if(f > 0) sql += ",";
sql += "email = '" + udto.getEmail()+ "'";
f++;
}
if(udto.getGender() != null){
if(f > 0) sql += ",";
sql += "gender = " + udto.getGender();
f++;
}
if(udto.getHead() != null){
if(f > 0) sql += ",";
sql += "head = '" + udto.getHead()+ "'";
f++;
}
if(udto.getLastlogintime() != null){
if(f > 0) sql += ",";
sql += "lastlogintime = '" + udto.getLastlogintime()+ "'";
f++;
}
if(udto.getLevel() != null){
if(f > 0) sql += ",";
sql += "level = " + udto.getLevel();
f++;
}
if(udto.getNickname() != null){
if(f > 0) sql += ",";
sql += "nickname = '" + udto.getNickname()+ "'";
f++;
}
if(udto.getPassword() != null){
if(f > 0) sql += ",";
sql += "password = '" + udto.getPassword()+ "'";
f++;
}
if(udto.getPersonality() != null){
if(f > 0) sql += ",";
sql += "personality = '" + udto.getPersonality()+ "'";
f++;
}
if(udto.getScore() != null){
if(f > 0) sql += ",";
sql += "score = " + udto.getScore();
f++;
}
if(udto.getStatus() != null){
if(f > 0) sql += ",";
sql += "status = " + udto.getStatus();
f++;
}
if(udto.getUsername() != null){
if(f > 0) sql += ",";
sql += "username = '" + udto.getUsername()+ "'";
f++;
}
if(udto.getRemark1() != null){
if(f > 0) sql += ",";
sql += "remark1 = '" + udto.getRemark1()+ "'";
f++;
}
if(udto.getRemark2() != null){
if(f > 0) sql += ",";
sql += "remark2 = '" + udto.getRemark2()+ "'";
f++;
}
if(udto.getRemark3() != null){
if(f > 0) sql += ",";
sql += "remark3 = " + udto.getRemark3();
f++;
}
sql += " WHERE id=" + udto.getId();
当然,这个随传值内容而变的 sql 语句,写起来还真得注意方法..首先,这个方法里面封装的是一个数据库连接对象和一个 userDTO 容器,这个容器里面就可以封装相关的信息来完成对数据库德操作.当然这个容器里面的内容就可以有很多种可能喽!
这样以来,就能快速而准确地完成一个 dao,这对于完成高质量的底层程序而言,无疑是一个很好的方法.