2012-09-12 2 views
0

문제점 : 비즈니스 사용자가 데이터 필터를 지정한대로 표시 할 데이터 만 결정하는 관리자가 보고서 템플릿을 만듭니다. 보다 간단한 SQL 용어에서, u 리는 관리 사용자에 의해 지정되고, Business User는 WHERE 절을 지정합니다.jrxml 템플릿에 지정된 SQL 조작 방법

Jasper를 사용하면 $ P {city}와 같은 SQL 쿼리에서 매개 변수를 지정할 수 있습니다. 나는 link에 명시된 방법을 사용하여 쿼리를 동적으로 검색하려고했습니다.

가능한 해결 방법은

  1. 사용 할 WHERE JRXML에서 절 매개 변수 및 보고서 작성하면서이를 대체 할 수있는 -이 나에게 SQL 구문 분석을 절약 할 수 있지만이 복잡성을 관리 사용자를 안내하고 싶지 않아요. 파싱은 큰 문제가 아닙니다.
  2. 내 사용자 정의 jdbc 쿼리 실행 프로그램 및 팩토리를 사용하십시오. jasper가 SQL 쿼리를 실행하기 전에 확장 포인트 만 허용하도록 생성되었습니다. 나는 바닐라 재스퍼 JDBC 데이터 소스에 전적으로 의존 할 것이지만 실행 전에 쿼리를 수정할 것입니다. JRAbstractQueryExecuter는 질의를 단순화하고 질의를 시작하기 전에 재스퍼 관련 토큰을 대체합니다. 이것은 매우 더러워 져서 구현 관련 사항을 강요합니다.
  3. 그것이 내 응용 프로그램 코드베이스에 JRAbstractQueryExecuter에서 수행 될 때, 같은 교체를 수행 SQL 쿼리를 구문 분석을 수정하고 link

에 지정된대로 당신이이 일을 더 나은 방법을 제안 주실 래요 다시 설정 ? 나는 이것이 분명히 더 깨끗한 방법으로 행해질 수 있다고 느낀다. 당신의 도움이

+0

WHERE 절을 동적으로 만드는 방법을 찾으십니까? – Lisa

+0

너트 쉘에서 예. – GauravJ

답변

1

당신이 원하는 결정 WHERE 절과 그 조항의 내용을 유지하기 위해 매개 변수를 사용하여 입력 컨트롤을 만들 수 있습니다에 대한

감사합니다. 기본값 식은 것 같은 뭔가 : 당신의 제약 열이 조항은, 당신이 사용할 수있는 $에서 동일

WHERE 
     .... = ..... 
     AND .... = .... 
     AND .... = .... 
     $P!{theParameter} 

경우 절 당신이 그것을 좋아 참조합니다 당신의 그런

$P{theParameter} == "value_1" ? 
    (" AND CONDITION_1 IN ('A', 'B', 'C') AND CONDITION_2 = 'Yes' " 
    ) : " AND CONDITION_3 = 'Other' AND CONDITION_4 = 'No' " 

피! 글자 그대로 매개 변수 값을 가져 와서 쿼리에서 참조하십시오.

WHERE 
     .... = ..... 
     AND .... = .... 
     AND .... = .... 
     AND thisValue = $P!{theParameter} 
+0

마지막 예에서 매개 변수가 하나의 변수 만 제한한다고 가정합니다 (예 : ) thisValue = $ P! {theParameter} :: AND thisValue = 'sampleInput' – Lisa