2014-10-01 12 views
2

有三個過濾器Class,Section和Date。現在有七個可能性:在Java中處理多個過濾器-MySql

1-用戶輸入類

2-)用戶輸入部分

3-)用戶輸入日期

4-)用戶輸入的日期和類

等等......

我寫了下面的代碼來處理java中的這些可能性:

if(mySection.equals("0") && myClass.equals("0") && (FDate.trim().compareTo("")==0 || TDate.trim().compareTo("")==0 )) 
     { 
     out.println("Note: Please provide valid filteration attributes. Atleast one filter is required."); 
     return; 
     } 



     if(!mySection.equals("0") && myClass.equals("0") && (FDate.trim().compareTo("")==0 || TDate.trim().compareTo("")==0 )) 
     { 
      Query = "select st.rollno, concat(st.firstname,' ',st.midname,' ',st.lastname), st.level, st.section, st.rfidtag, sc.schoolname, sa.time, date_format(sa.time,'%T') from AAV.studentattendence sa, AAV.Students st, AAV.Schools sc where sa.studentindexptr=st.indexptr and sc.indexptr=st.schoolindexptr and st.section='"+mySection+"'"; 
     } 

     if(!mySection.equals("0") && !myClass.equals("0") && (FDate.trim().compareTo("")==0 || TDate.trim().compareTo("")==0 )) 
     { 
      Query = "select st.rollno, concat(st.firstname,' ',st.midname,' ',st.lastname), st.level, st.section, st.rfidtag, sc.schoolname, sa.time, date_format(sa.time,'%T') from AAV.studentattendence sa, AAV.Students st, AAV.Schools sc where sa.studentindexptr=st.indexptr and sc.indexptr=st.schoolindexptr and st.section='"+mySection+"' and st.level='"+myClass+"' "; 
     } 


     if(mySection.equals("0") && !myClass.equals("0") && (FDate.trim().compareTo("")==0 || TDate.trim().compareTo("")==0 )) 
     { 
      Query = "select st.rollno, concat(st.firstname,' ',st.midname,' ',st.lastname), st.level, st.section, st.rfidtag, sc.schoolname, sa.time, date_format(sa.time,'%T') from AAV.studentattendence sa, AAV.Students st, AAV.Schools sc where sa.studentindexptr=st.indexptr and sc.indexptr=st.schoolindexptr and st.level='"+myClass+"' "; 
     } 


     if(mySection.equals("0") && myClass.equals("0") && (!(FDate.trim().compareTo("")==0) && !(TDate.trim().compareTo("")==0) )) 
     { 
      Query = "select st.rollno, concat(st.firstname,' ',st.midname,' ',st.lastname), st.level, st.section, st.rfidtag, sc.schoolname, sa.time, date_format(sa.time,'%T') from AAV.studentattendence sa, AAV.Students st, AAV.Schools sc where sa.studentindexptr=st.indexptr and sc.indexptr=st.schoolindexptr and date_format(time,'%Y-%m-%d %T') between '"+FromDate+"' and '"+ToDate+"'"; 
     } 


     if(mySection.equals("0") && !myClass.equals("0") && (!(FDate.trim().compareTo("")==0) && !(TDate.trim().compareTo("")==0) )) 
     { 
      Query = "select st.rollno, concat(st.firstname,' ',st.midname,' ',st.lastname), st.level, st.section, st.rfidtag, sc.schoolname, sa.time, date_format(sa.time,'%T') from AAV.studentattendence sa, AAV.Students st, AAV.Schools sc where sa.studentindexptr=st.indexptr and sc.indexptr=st.schoolindexptr and date_format(time,'%Y-%m-%d %T') between '"+FromDate+"' and '"+ToDate+"' and st.level='"+myClass+"'"; 
     } 


     if(!mySection.equals("0") && myClass.equals("0") && (!(FDate.trim().compareTo("")==0) && !(TDate.trim().compareTo("")==0) )) 
     { 
      Query = "select st.rollno, concat(st.firstname,' ',st.midname,' ',st.lastname), st.level, st.section, st.rfidtag, sc.schoolname, sa.time, date_format(sa.time,'%T') from AAV.studentattendence sa, AAV.Students st, AAV.Schools sc where sa.studentindexptr=st.indexptr and sc.indexptr=st.schoolindexptr and date_format(time,'%Y-%m-%d %T') between '"+FromDate+"' and '"+ToDate+"' st.section='"+mySection+"'"; 
     } 


     if(!mySection.equals("0") && !myClass.equals("0") && (!(FDate.trim().compareTo("")==0) && !(TDate.trim().compareTo("")==0) )) 
     { 
      Query = "select st.rollno, concat(st.firstname,' ',st.midname,' ',st.lastname), st.level, st.section, st.rfidtag, sc.schoolname, sa.time, date_format(sa.time,'%T') from AAV.studentattendence sa, AAV.Students st, AAV.Schools sc where sa.studentindexptr=st.indexptr and sc.indexptr=st.schoolindexptr and date_format(time,'%Y-%m-%d %T') between '"+FromDate+"' and '"+ToDate+"' and st.section='"+mySection+"' and st.level='"+myClass+"'"; 
     } 

下面是問題,我添加另一個過濾器的這一分鐘,這些可能性急劇增加,因此更多的查詢和處理。 爲了通過JAVA或MYSQL有效地處理這個問題,必須有一種方法。

這種情況下的通用sql語句?

JAVA中的庫處理多個輸入查詢?

東西或其他...

有什麼可以做可能來處理這種情況與爲更少的代碼儘可能(考慮過濾器可能會添加上)?

回答

2

解決了之後,給了我一些想法,當我到達一個解決方案。下面是解決這一問題的通用單查詢:

if(mySection.equals("0") && myClass.equals("0") && (FDate.trim().compareTo("")==0 || TDate.trim().compareTo("")==0 )) 
     { 
     out.println("Note: Please provide valid filteration attributes. Atleast one filter is required."); 
     return; 
     } 


     Query = "select st.rollno, concat(st.firstname,' ',st.midname,' ',st.lastname), st.level, st.section, st.rfidtag, sc.schoolname, sa.time, date_format(sa.time,'%T') from AAV.studentattendence sa, AAV.Students st, AAV.Schools sc where sa.studentindexptr=st.indexptr and sc.indexptr=st.schoolindexptr and ('0'='"+mySection+"' or st.section='"+mySection+"') and ('0'='"+myClass+"' or st.level='"+myClass+"') and ( (' 00:00:00'='"+FromDate+"' and ' 23:59:59'='"+ToDate+"') or (date_format(time,'%Y-%m-%d %T') between '"+FromDate+"' and '"+ToDate+"') )"; 


executeQuery(Query); 

當作爲一種表達,解析爲真正的默認值即在我的情況下處理「0」,查詢變得通用的,我們可以添加儘可能多的過濾條款按要求。