- 26
- 2月
昨天被老师叫去给一个系统擦屁股,看到了一段实在是让我很无语的程序。不批一下难解我心头之不爽。
其实就是一个非常简单的功能:从数据库中读出一段时间内的流水,起始时间:(ayear, amonth, aday),结束时间:(byear, bmonth, bday)——变量的命名已经反映了这段程序的质量。
因为要从两张表里读数据,此仁兄居然写出了如此“高技术含量”的代码,大体如下:
for(int i=ayear;i< =byear;i++) { if(i-ayear>0) { amonth=1; } for(int j=amonth;j< =12;j++) { if((i-byear==0)&&j>bmonth) break; for(day=1;day< =31;day++) { sql="select * from lxd where jzrq ='"+String.valueOf(i)+"-"+String.valueOf(j)+"-"+String.valueOf(day)+"' and qymc='"+qymc+"' and qyzh='"+qyzh+"' and xhflag is null"; // 略去中间输出用代码 sql="select * from dwls where sj = '"+String.valueOf(i)+"-"+String.valueOf(j)+"-"+String.valueOf(day)+"' and dwmc='"+qymc+"' and qyzh='"+qyzh+"' and del is null "+order; // 略去中间输出用代码 } } }
真不知此仁兄的数据库原理一课是怎么学的,为了把两张表的数据凑在一起居然写出了这么一陀代码。试问有哪本讲SQL的书中会不教联合查询。上面这陀东西不就是实现了这么点功能吗?
select * from lxd inner join dwls on lxd.jzrq=dwls.sj where lxd.jzrq between A and B
一个是查N天的数据生成2*N条SQL语句,另一个则不管查多少天一条搞定。
早就听说过一个说法,一个好的程序员和一个差的程序员写出来的代码效率会有上千倍的差距。此话果然不假。