在上半周中,将flag的基本模型搭建出来,接下来要做的就是将dao层的类写出来,在写的过程中确实发现了很多问题所在,又对原有的模型进行了进一步的改进,虽然代码量不多,但是思考的过程却是十分耗神,想了很多,才把其中的逻辑搞清楚。Flag是为了创建flag的时候使用的,而flagbrief主要是为了在列表中获取来使用的,flagdetail主要是在查看具体的flag的时候使用的,本想把他们放在一块,但是逻辑太过复杂,以后的修改都成了很大的问题。不如把他们分开,虽然有一些代码的重复,但是辨识度高。
下图则是flagdao的主要架构。
下面贴出的就是我的代码,可以看出,一个方法废了很大的功夫才把他写完,毕竟他的逻辑很是复杂,关键的部分更是修改了好几次。做完这一部分,感觉都轻松了很多。
public List<FlagDetail> selectSelfFlag(int id,long time){
Connection conn=ConnectionPool.getConnection();
PreparedStatement ptmt1=null;
PreparedStatement ptmt2=null;
PreparedStatement ptmt3=null;
ResultSet rs1=null;
ResultSet rs2=null;
ResultSet rs3=null;
Vector<Flag> fg=new Vector<Flag>();
Vector<Supervise> sv=new Vector<Supervise>();
Vector<FlagDetail> fd=new Vector<FlagDetail>();
Vector<Member> members=new Vector<Member>();
//Vactor<>
String sql1="select fid,uid,content,award,achieve,isTeam,startTime,endTime,createTime,nickname from fg_flag natural join fg_user where uid = ? and createTime < ? order by startTime Desc limit 15 ";
String sql2="select fid,uid,agree ,photo,achieve,evaluate,time,nickname from fg_supervise natural join fg_user where fid in (select t.fid from (select * from fg_flag where uid = ? and createTime < ? order by startTime Desc limit 15) as t) and agree=2 ";
String sql3="select uid,fid,nickname from fg_member natural join fg_user where fid in (select t.fid from (select * from fg_flag where uid = ? and createTime < ? order by startTime Desc limit 15) as t)";
try {
conn.setAutoCommit(false);
ptmt1=conn.prepareStatement(sql1);
ptmt1.setInt(1, id);
ptmt1.setLong(2, time);
//System.out.println(ptmt1.toString());
rs1=ptmt1.executeQuery();
ptmt2=conn.prepareStatement(sql2);
ptmt2.setInt(1, id);
ptmt2.setLong(2, time);
rs2=ptmt2.executeQuery();
ptmt3=conn.prepareStatement(sql3);
ptmt3.setInt(1, id);
ptmt3.setLong(2, time);
rs3=ptmt3.executeQuery();
conn.commit();
while (rs1.next()) {
Flag tempFlag=new Flag();
tempFlag.setAchieve(rs1.getInt("achieve"));
try {
tempFlag.setAward(new String (rs1.getBytes("award"),"utf-8") + " ");
} catch (Exception e) {
// TODO: handle exception
tempFlag.setAward("");
}
try {
tempFlag.setContent(new String (rs1.getBytes("content"),"utf-8") + " ");
} catch (Exception e) {
// TODO: handle exception
tempFlag.setContent("");
}
tempFlag.setStartTime(rs1.getLong("startTime"));
tempFlag.setEndTime(rs1.getLong("endTime"));
tempFlag.setFid(rs1.getInt("fid"));
tempFlag.setIsTeam(rs1.getBoolean("isTeam"));
tempFlag.setUid(rs1.getInt("uid"));
tempFlag.setCreateTime(rs1.getLong("createTime"));
try {
//System.out.println(new String (rs1.getBytes("nickname"),"utf-8") + " ");
tempFlag.setNickname(new String (rs1.getBytes("nickname"),"utf-8") + " ");
} catch (Exception e) {
// TODO: handle exception
tempFlag.setNickname("");
}
fg.add(tempFlag);
}
while (rs2.next()) {
Supervise tempSupervise=new Supervise();
tempSupervise.setPhoto(rs2.getInt("photo"));
tempSupervise.setAchieve(rs2.getInt("achieve"));
try {
tempSupervise.setEvaluate(new String (rs2.getBytes("evaluate"),"utf-8") + " ");
} catch (Exception e) {
// TODO: handle exception
tempSupervise.setEvaluate("");
}
tempSupervise.setFid(rs2.getInt("fid"));
tempSupervise.setAgree(rs2.getInt("agree"));
tempSupervise.setTime(rs2.getLong("time"));
tempSupervise.setUid(rs2.getInt("uid"));
try {
tempSupervise.setNickname(new String (rs2.getBytes("nickname"),"utf-8") + " ");
} catch (Exception e) {
// TODO: handle exception
tempSupervise.setNickname("");
}
sv.add(tempSupervise);
}
while(rs3.next()){
Member tempMember=new Member();
tempMember.setFid(rs3.getInt("fid"));
tempMember.setUid(rs3.getInt("uid"));
try {
tempMember.setNickname(new String (rs3.getBytes("nickname"),"utf-8") + " ");
} catch (Exception e) {
// TODO: handle exception
tempMember.setNickname("");
}
members.add(tempMember);
}
for(int i=0;i<fg.size();i++)
{
Vector<UserBrief> memr=new Vector<UserBrief>();
FlagDetail tempDetail=new FlagDetail();
Vector<SuperviseBrief> spb=new Vector<SuperviseBrief>();
tempDetail.setFlag(fg.get(i));
int x=fg.get(i).getFid();
for (int j = 0; j < sv.size(); j++) {
if(sv.get(j).getFid()==x){
SuperviseBrief tempBrief=new SuperviseBrief();
Supervise tempSupervise=sv.get(j);
tempBrief.setAchieve(tempSupervise.getAchieve());
tempBrief.setEvaluate(tempSupervise.getEvaluate());
tempBrief.setAgree(tempSupervise.getAgree());
tempBrief.setUid(tempSupervise.getUid());
tempBrief.setNickname(tempSupervise.getNickname());
tempBrief.setPhoto(tempSupervise.getPhoto());
spb.add(tempBrief);
sv.remove(j);
j--;
}
}
for(int j=0;j<members.size();j++){
if(members.get(j).getFid()==x){
UserBrief ub=new UserBrief();
ub.setNickname(members.get(j).getNickname());
ub.setUid(members.get(j).getUid());
memr.add(ub);
members.remove(j);
j--;
}
}
tempDetail.setFriendsJudge(spb);
tempDetail.setMember(memr);
fd.add(tempDetail);
}
rs1.close();
rs2.close();
ptmt1.close();
ptmt2.close();
conn.close();
return fd;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}
finally {
try {
if(rs1!=null){
rs1.close();
}
if(rs2!=null){
rs2.close();
}
if (ptmt1 != null) {
ptmt1.close();
}
if (ptmt2 != null) {
ptmt2.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}