2012-08-08 18 views
12

मैं अपने आवेदन के लिए एक प्रश्न लिखने की कोशिश कर रहा हूं, लेकिन मुझे कुछ परेशानी हो रही है। उपयोगकर्ता का चयन करने के लिए कहां खंड और आदेश BY खंड गतिशील हैं क्योंकिपूछताछ के लिए पैरामीटर कैसे पास करें?

SELECT name, phone, email 
FROM company 
WHERE $P{clause} = $P{key} 
ORDER BY $P{order} 

: मैं अपने डेटाबेस के एक पैरामीटर एक क्षेत्र के रूप में पारित करने के लिए की जरूरत है की तरह।

$P{} का उपयोग करके यह काम नहीं किया। $P{} और $P!{}:

+0

@ एलेक्स आप कैसे जवाब के रूप में पोस्ट नहीं किया? दोनों टिप्पणियों को संयुक्त उपयोगकर्ता को जवाब देने लगता है, और अधिक जानने के लिए जानकारी का पालन करें। इससे ज्यादा बेहतर नहीं मिलता है। –

उत्तर

22

JasperReports में पैरामीटर संदर्भ देने के लिए दो वाक्य रचना भाव हैं।

  • $ P {paramName} सिंटेक्स ज्यादातर सेटिंग में जहां इनपुट मानों पैरामीटर के लिए उपयोग कर रहा है। प्रतिस्थापन एल्गोरिथ्म "स्मार्ट" है, इसके कार्यान्वयन का उपयोग करता java.sql.PreparedStatement: java.lang.String पैरामीटर के लिए इंजन के लिए $ P {parameterName} उद्धृत मूल्य के साथ, का स्थान ले लेगा java.lang.Integer - संख्यात्मक मूल्य के साथ और इसी तरह।

नमूना:

 
| Parameter name | Parameter type | Parameter value | 
|:---------------|-------------------|:---------------:| 
| eventName | java.lang.String | Olympic Games | 
| eventType | java.lang.Integer |  2   | 

मूल अभिव्यक्ति (बदलने के लिए):

SELECT startDate, endDate, rating FROM events WHERE name=$P{eventName} AND type=$P{eventType} 

परिणाम होगा:

SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND type=2 
  • $ पी! {ParamName} वाक्यविन्यास ज्यादातर "सरल" प्रतिस्थापन करने के लिए उपयोग कर रहा है।

नमूना:

 
| Parameter name | Parameter type | Parameter value | 
|:---------------|------------------:|:---------------:| 
| tableName | java.lang.String |  events  | 
| eventName | java.lang.String | Olympic Games | 
| channel  | java.lang.String |  'BBC'  | 
| type   | java.lang.String |  sport  | 

मूल अभिव्यक्ति (बदलने के लिए):

SELECT startDate, endDate, rating FROM $P!{tableName} WHERE name='$P!{eventName}' AND channel=$P!{channel} AND type=$P!{type} 

परिणाम होगा:

SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND channel='BBC' AND type=sport 

अधिक जानकारी के लिए आप इस Using report parameters पोस्ट को पढ़ सकते हैं और इस Query sample पर देख सकते हैं।


आपके मामले में सही अभिव्यक्ति इस तरह हो सकता है:

SELECT name, phone, email FROM company WHERE $P!{clause} = $P{key} ORDER BY $P!{order} 

जहां $ P {कुंजी} एक java.lang.String पैरामीटर

है

या इस तरह (यह $ पी पर निर्भर करता है! {खंड} मूल्य)

SELECT name, phone, email FROM company WHERE $P!{clause} = $P!{key} ORDER BY $P!{order} 

जहां $ P {कुंजी} है एक java.lang.String पैरामीटर

-1

यदि आप पैरामीटर द्वारा ऑर्डर करने के लिए यह कोशिश की जरूरत है:

SELECT name, phone, email ,(case when $P{order} = 'name' then name when $P{order} = 'phone' then phone else email end) as orderlist 
FROM company 
WHERE $P{clause} = $P{key} 
ORDER BY orderlist 
संबंधित मुद्दे