में सूची पारित करने के लिए मैं (उदाहरण के लिए 1, 2, 3
,) मूल्यों की है, और मैं एक SQL क्वेरी को उस सूची में पास करना चाहते हैं:कैसे एसक्यूएल क्वेरी
"select name from tbl where id in" + list
मैं यह कैसे प्राप्त कर सकते हैं?
में सूची पारित करने के लिए मैं (उदाहरण के लिए 1, 2, 3
,) मूल्यों की है, और मैं एक SQL क्वेरी को उस सूची में पास करना चाहते हैं:कैसे एसक्यूएल क्वेरी
"select name from tbl where id in" + list
मैं यह कैसे प्राप्त कर सकते हैं?
SQL सिंटैक्स है:
select name from tbl where id in (1,2,3)
तुम सब अल्पविराम का निर्माण करना है आइटम की सूची अलग कर दिया और स्ट्रिंग में डालें।
ओह और अनिवार्य एसक्यूएल स्ट्रिंग बिल्डिंग चेतावनी: नहीं!
सूची को अल्पविराम से अलग सूची के रूप में पास करें और एक अस्थायी तालिका चर में विभाजित करने के लिए एक स्प्लिट फ़ंक्शन का उपयोग करें।
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
)
यह इस बात पर निर्भर करता है कि आप अपने एसक्यूएल का निर्माण कैसे कर रहे हैं।
... 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
वह ऑब्जेक्ट का नाम है जिसे आपने उस तालिका में मैप किया था जिसे आप क्वेरी करना चाहते हैं।
त्रुटि प्राप्त करना "विधि creteateQuery()" – n92
@vinay का कोई हस्ताक्षर नहीं, – hvgotcodes
स्ट्रिंग 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();
}
आप एसक्यूएल बयान करने के लिए सीधे अपनी सूची डाल करने के लिए है
उदाहरण:
String sql="select name from tbl where id in ("+StringUtils.join(list, ',')+")";
Statement st=connection.createStatement();
st.execute(sql);
जावा 8 के साथ आप 'स्ट्रिंग.जॉइन (",", सूची)' का उपयोग कर सकते हैं, हालांकि यह समाधान स्ट्रिंग पैरामीटर के लिए उपयुक्त नहीं है। – Pino
मैं एक टिप्पणी है कि आप HQL का उपयोग कर रहे करने के लिए अपने उत्तर में देखते हैं। अगर ऐसी बात है, हाइबरनेट लोगों के लिए यह एक आसान बनाने के लिए, क्वेरी में, बस निर्दिष्ट करें:
where id in (:ids)
और फिर अपनी सूची गुजर setParameterList("ids", list)
का उपयोग करें। हाइबरनेट आपके लिए सभी विस्तार करेगा!
मैंने फार्मौर द्वारा प्रदान किए गए समाधान की कोशिश की। इसका सरल, कुशल & काम करता है। मैंने इसे अपनी जरूरत के हिसाब से थोड़ा सा संशोधित किया ... & ने डीबगिंग की भी कोशिश की ताकि यह सुनिश्चित किया जा सके कि मैं जिस तरह से स्वरूपित हूं।
सार्वजनिक स्थिर स्ट्रिंग 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
क्या आप अपने एसक्यूएल निर्माण करने के लिए उपयोग कर रहे हैं? – hvgotcodes
एचक्यूएल execQuery() – n92