2010-07-29 19 views
10

मैं अपने MySQL सर्वर पर कुछ इस तरह अमल करने के लिए करना चाहते हैं:क्या मैं जेडीबीसी तैयार क्वेरी में एकाधिक कथन का उपयोग कर सकता हूं?

SET @id=(SELECT id FROM lookupTable WHERE field=?); 
(SELECT * FROM table2 WHERE [email protected]) 
UNION 
(SELECT * FROM table3 WHERE [email protected]) 
UNION 
(SELECT * FROM table4 WHERE [email protected]); 

इस कंसोल से ठीक काम करता है, लेकिन मेरे जावा PreparedStatement से नहीं। यह ';' पर एक वाक्यविन्यास त्रुटि के साथ अपवाद फेंकता है बयान अलग करना। मुझे चर पसंद है क्योंकि मुझे लुकअप क्लॉज दोहराना नहीं है, लेकिन यदि आवश्यक हो तो मैं इसे फिर से लिख सकता हूं। समकक्ष जॉइन यूनियन क्लॉज के साथ भी थोड़ा अजीब है।

धन्यवाद,

यहोशू

+0

@ddimitrov कहते हैं, यह सीधे संभव प्रतीत नहीं होता है। मैंने 'PreparedStatement.addBatch() 'कोशिश नहीं की। एक संग्रहीत प्रक्रिया शायद इसके लिए भी काम करेगी। –

+0

यदि आप अन्य विक्रेताओं में रुचि रखते हैं, तो CUBRID डेटाबेस इस सुविधा का समर्थन करता है। इस मंच पोस्ट http://www.cubrid.org/forum/534638 देखें। – Eye

उत्तर

5

जेडीबीसी ने कभी भी सीमित प्रश्नों को पार्सिंग का समर्थन नहीं किया है। प्रत्येक आमंत्रण डेटाबेस के लिए एक यात्रा है। शायद आप प्रत्येक अलग क्वेरी के लिए PreparedStatement.addBatch() को करने के लिए क्या कर रहे हैं, फिर दो परिणामों को निष्पादित और पुनर्प्राप्त कर सकते हैं?

2

सिर्फ दो अलग-अलग क्वेरी (एक कनेक्शन के अंदर) के रूप में इस चल आप एक ही परिणाम देना चाहिए।

+0

मैं नेटवर्क समय से दो बार बचने की उम्मीद कर रहा था, लेकिन यह यहां अपरिहार्य लगता है। एसक्यूएल इंजेक्शन से बचने के लिए शायद यह एक सुरक्षा सुविधा है। –

+1

@ जोशुआ, आप सर्वर पर क्वेरी बैच कर सकते हैं और एकाधिक नेटवर्क ट्रिप से बच सकते हैं। – ddimitrov

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