2011-08-17 10 views
6

में सूची पारित करने के लिए मैं (उदाहरण के लिए 1, 2, 3,) मूल्यों की है, और मैं एक SQL क्वेरी को उस सूची में पास करना चाहते हैं:कैसे एसक्यूएल क्वेरी

"select name from tbl where id in" + list 

मैं यह कैसे प्राप्त कर सकते हैं?

+0

क्या आप अपने एसक्यूएल निर्माण करने के लिए उपयोग कर रहे हैं? – hvgotcodes

+0

एचक्यूएल execQuery() – n92

उत्तर

0

SQL सिंटैक्स है:

select name from tbl where id in (1,2,3) 

तुम सब अल्पविराम का निर्माण करना है आइटम की सूची अलग कर दिया और स्ट्रिंग में डालें।

ओह और अनिवार्य एसक्यूएल स्ट्रिंग बिल्डिंग चेतावनी: नहीं!

0

सूची को अल्पविराम से अलग सूची के रूप में पास करें और एक अस्थायी तालिका चर में विभाजित करने के लिए एक स्प्लिट फ़ंक्शन का उपयोग करें।

CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(512)) 
RETURNS table 
AS 
RETURN (
    WITH Pieces(pn, start, stop) AS (
     SELECT 1, 1, CHARINDEX(@sep, @s) 
     UNION ALL 
     SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1) 
     FROM Pieces 
     WHERE stop > 0 
    ) 
    SELECT pn, 
     SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s 
    FROM Pieces 
) 
+3

सामरिक nukes के साथ शिकार खरगोशों के बारे में बात करें ... या माइक्रोसॉफ्ट के रिपोर्टिंग सर्वर का उपयोग, मूल रूप से एक ही बात। – Blindy

+0

मुझे लगता है कि मैंने इस सवाल को गलत समझा था कि "मैं इस सूची को संग्रहीत प्रक्रिया में कैसे पास करूं"। मेरी गलती। – RKeast

0

यह इस बात पर निर्भर करता है कि आप अपने एसक्यूएल का निर्माण कैसे कर रहे हैं।

... where id in (1,2,3)...

अपनी टिप्पणी में जब से तुम हाइबरनेट HQL निर्दिष्ट करते हैं, की तरह कुछ - - आप इसे अपने आप को निर्माण कर रहे हैं (बुरा विचार) आप कर क्या करना तरह एसक्यूएल देखो की जरूरत है

Query query = session.createSQLQuery("from User where id in :ids "); 
query.setParameter("ids", idsList); 
List list = query.list(); 

मिलना चाहिए आपने शुरु किया। नोट User वह ऑब्जेक्ट का नाम है जिसे आपने उस तालिका में मैप किया था जिसे आप क्वेरी करना चाहते हैं।

+0

त्रुटि प्राप्त करना "विधि creteateQuery()" – n92

+0

@vinay का कोई हस्ताक्षर नहीं, – hvgotcodes

-1

स्ट्रिंग sqlQuery = "tbl से नाम चुनें जहां आईडी" + sqlFormatedList (सूची);

private String sqlFormatedList(List<Integer> list){ 
StringBuilder sb = new StringBuilder(); 
sb.append("("); 
for (Integer i : list){ 
    sb.append(i+","); 
} 
sb.deleteCharAt(sb.length() -1); 
sb.append(")"); 
return sb.toString(); 
} 
+0

संपादित करके असफल कोड और स्टैकट्रैक पोस्ट करें, अब मुझे [1,2,3] (123) के रूप में मिल रहा है, तो कॉमा कैसे करें अलग स्ट्रिंग, मैं आईडी के साथ तुलना कर रहा हूं, आईडी पूर्णांक है लेकिन "एसबी" स्ट्रिंग है, तो इसे कैसे बनाएं – n92

+0

क्षमा करें मैं इसे आपके लिए 1min, ठीक कर दूंगा। – Farmor

5

आप एसक्यूएल बयान करने के लिए सीधे अपनी सूची डाल करने के लिए है

उदाहरण:

String sql="select name from tbl where id in ("+StringUtils.join(list, ',')+")"; 
Statement st=connection.createStatement(); 
st.execute(sql); 
+0

जावा 8 के साथ आप 'स्ट्रिंग.जॉइन (",", सूची)' का उपयोग कर सकते हैं, हालांकि यह समाधान स्ट्रिंग पैरामीटर के लिए उपयुक्त नहीं है। – Pino

3

मैं एक टिप्पणी है कि आप HQL का उपयोग कर रहे करने के लिए अपने उत्तर में देखते हैं। अगर ऐसी बात है, हाइबरनेट लोगों के लिए यह एक आसान बनाने के लिए, क्वेरी में, बस निर्दिष्ट करें:

where id in (:ids) 

और फिर अपनी सूची गुजर setParameterList("ids", list) का उपयोग करें। हाइबरनेट आपके लिए सभी विस्तार करेगा!

0

मैंने फार्मौर द्वारा प्रदान किए गए समाधान की कोशिश की। इसका सरल, कुशल & काम करता है। मैंने इसे अपनी जरूरत के हिसाब से थोड़ा सा संशोधित किया ... & ने डीबगिंग की भी कोशिश की ताकि यह सुनिश्चित किया जा सके कि मैं जिस तरह से स्वरूपित हूं।

सार्वजनिक स्थिर स्ट्रिंग sqlFormatedList (सूची कोडसूची) {स्ट्रिंगबिल्डर एसबी = नया स्ट्रिंगबिल्डर(); sb.append ("(");

संक्षिप्त में
 for (String str : codeList){ 
    sb.append("'"+str+"',"); 
    } 
    sb.deleteCharAt(sb.length() -1); 
    sb.append(")"); 
return sb.toString(); 
} 

विश्लेषण: इनपुट पैरामीटर: [एबीसी, एमएनपी, XYZ]; के रूप में जावा प्रारूप की स्ट्रिंग्स की सूची

आउटपुट: ('एबीसी' , 'एमएनपी', 'एक्सवाईजेड'); एसक्यूएल क्वेरी में इस्तेमाल होने वाली स्ट्रिंग के रूप में।

sqlFormattedString = ('एबीसी', 'एमएनपी', 'एक्सवाईजेड');

यह उपरोक्त ओ/पी स्ट्रिंग इस क्वेरी में जाता है। * tableName से tn के रूप में चुनें जहां sqlFormattedString में tn.code;

पुनश्च: पैरामीटर सूची में codeList java.util.List

संबंधित मुद्दे