2012-12-27 8 views
9

मुझे पैरामीटर के सेट के आधार पर गतिशील रूप से एक JOOQ SELECT क्वेरी बनाने की आवश्यकता है। मैं नहीं जानता कि इसे गतिशील रूप से कैसे जोड़ना है। कृपयागतिशील रूप से JOOQ क्वेरी बनाना

अग्रिम धन्यवाद में सहायता करें।

+2

क्या आप थोड़ा और स्पष्ट हो सकते हैं? जैसे क्या आप एक उदाहरण क्वेरी प्रदान कर सकते हैं जिसे आप बनाना चाहते हैं? आपने क्या प्रयास किया है, आप कहाँ विफल रहे? –

+0

वास्तव में मुझे चयन क्वेरी बनाने की आवश्यकता है; जिसमें मुझे पारित पैरामीटर के आधार पर जहां खंड को अद्यतन करने की आवश्यकता है। यूआई की तरह मैं कुछ फिल्टर पास कर रहा हूं और गतिशील रूप से मेरी WHERE स्थिति में जोड़ना चाहता हूं। – user1900723

उत्तर

25

jOOQ में प्रश्न बनाने के लिए दो प्रकार के एपीआई हैं।

  • डीएसएल एपीआई जो आपके जावा कोड में इनलाइन एसक्यूएल स्टेटमेंट बनाने की अनुमति देता है, उदा।

    create.select(T.A, T.B).from(T).where(T.X.eq(3).and(T.Y.eq(5))); 
    
  • "मॉडल" एपीआई कि वृद्धिशील एसक्यूएल के निर्माण के लिए अनुमति देता है।

    https://www.jooq.org/doc/latest/manual/sql-building/sql-statements/dsl-and-non-dsl/

    : किसी भी समय, आप एक डीएसएल क्वेरी वस्तु

कि आप क्या करना मैनुअल यहाँ में दी गई है चाहता हूँ का एक उदाहरण पर getQuery() विधि के माध्यम से "मॉडल" एपीआई का उपयोग कर सकते

DSLContext create = DSL.using(configuration); 
SelectQuery query = create.selectQuery(); 
query.addFrom(AUTHOR); 

// Join books only under certain circumstances 
if (join) 
    query.addJoin(BOOK, BOOK.AUTHOR_ID.equal(AUTHOR.ID)); 

Result<?> result = query.fetch(); 

या, optinally जोड़ने की स्थिति/विधेय:

उदाहरण के लिए, वैकल्पिक रूप से एक में शामिल होने जोड़ने

012,
query.addConditions(BOOK.TITLE.like("%Java%")); 
query.addConditions(BOOK.LANGUAGE_CD.eq("en")); 

अद्यतन: अपनी टिप्पणी को देखते हुए, कि आप जो खोज रहे हैं:

// Retrieve search strings from your user input (just an example) 
String titleSearchString = userInput.get("TITLE"); 
String languageSearchString = userInput.get("LANGUAGE"); 
boolean lookingForTitles = titleSearchString != null; 
boolean lookingForLanguages = languageSearchString != null; 

// Add only those conditions that the user actually provided: 
if (lookingForTitles) 
    query.addConditions(BOOK.TITLE.like("%" + titleSearchString + "%")); 
else if (lookingForLanguages) 
    query.addConditions(BOOK.LANGUAGE_CD.eq(languageSearchString)); 

ध्यान दें, आप भी Field.compare(Comparator, Object) तरीकों का उपयोग कर सकते हैं:

// Initialise your dynamic arguments 
Field<String> field = BOOK.TITLE; 
Comparator comparator = Comparator.LIKE; 
String value = "%" + titleSearchString + "%"; 

// Pass them to the field.compare() method 
query.addConditions(field.compare(comparator, value)); 

अधिक जानकारी के लिए, org.jooq.SelectQuery पर विचार करें Javadoc

+0

लेकिन मेरे पास एक और सवाल है। क्या मैं क्वेरी में जावा चर का उपयोग कर सकता हूं (विशेष रूप से addConditions भाग में), ताकि मैं रन वे समय पर उन चर के मान डाल सकूं। उदाहरण के लिए। आम नाम। – user1900723

+0

@ user1900723: आपको उन तत्वों को जावा में चर के रूप में निर्दिष्ट करने से क्या रोकता है? –

+0

मुझे आपको परिदृश्य समझाएं। असल में मेरे पास कुछ कॉलम हैं जिन्हें मुझे टेबल में खोजना है। उदाहरण के लिए: नाम, आईडी, दिनांक। और मुझे उनके अनुसार डेटा लाने की ज़रूरत है, जिसमें एक अन्य पैरामीटर है जिसमें इक्वाल टू वैल्यू, ऑपरर्स की तरह उपयोग करने की आवश्यकता है (ENDS के साथ (ऑपरेटर की तरह उपयोग करने की आवश्यकता है) शामिल हैं। मुझे यह सब गतिशील रूप से करने की ज़रूरत है। इसलिए, चर का उपयोग करने की आवश्यकता है ताकि मैं फ्लाई पर मूल्य डाल सकूं। अगर आपको और स्पष्टीकरण की आवश्यकता है तो कृपया मुझे बताएं। मैं यहाँ फंस गया हूँ। – user1900723