2014-10-01 3 views
2

클래스, 섹션 및 날짜의 세 가지 필터가 있습니다. 이제 칠 가능성이 있습니다 :Java의 다중 필터 처리 -MySql

1 사용자 입력 클래스 사용자 입력 날짜

3)

2) 사용자 입력 섹션

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

해결 된 후 몇 가지 생각을 해본 결과 해결책을 찾았습니다. 다음은이 문제를 해결 일반적인 단일 쿼리는 다음과 같습니다

기본 값, 즉 true로 해결하는 식으로 처리 '0'내 경우
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); 

쿼리는 일반적인되고 우리는 많은 필터 절을 추가 할 수 있습니다 필요에 따라.