2009-12-22 13 views
12

से रिटर्न वैल्यू प्राप्त करना मैं माइक्रोसॉफ्ट एसक्यूएल सर्वर जेडीबीसी ड्राइवर 2.0 का उपयोग कर जावा के माध्यम से SQL सर्वर (2005) से कनेक्ट कर रहा हूं।जेडीबीसी एमएसएसक्यूएल

मैं संग्रहीत प्रक्रिया से वापसी मूल्य कैसे प्राप्त करूं? मैं कुछ ऐसा कर रहा हूं:

Connection connection = dataSource.getConnection() 
CallableStatement proc = connection.prepareCall("{ call dbo.mySproc() }"); 
proc.execute(); 

क्या मुझे execute() का उपयोग करना चाहिए? क्वेरी को निष्पादित करें()? executeUpdate()? इनमें से कोई भी डिफ़ॉल्ट रूप से वापसी मूल्य वापस नहीं प्रतीत होता है लेकिन मुझे सच में यकीन नहीं है कि इसे कैसे प्राप्त किया जाए।

संपादित करें 1: स्पष्ट होने के लिए, मुझे पता है कि संग्रहित प्रक्रियाओं को कैसे कॉल करें। यह प्रश्न विशेष रूप से रिटर्न VALUE कैसे प्राप्त करें (परिणाम सेट के विपरीत) के बारे में है। रिटर्न वैल्यू एक पूर्णांक होता है जो आम तौर पर उत्पन्न होता है जब आप किसी परिणाम सेट के साथ कोई क्वेरी निष्पादित करते हैं या यदि आप विशेष रूप से 0 SQLजैसे किसी SQL को अपने SQL में बताते हैं।

संपादित करें 2: executeUpdate() एक int देता है लेकिन यह int रिटर्न वैल्यू के समान नहीं है। साथ ही, एक आउट पैरामीटर रिटर्न वैल्यू के समान नहीं है।

+0

निम्नलिखित लिंक देखें [http://www.exampledepot.com/egs/java.sql/CallProcedure.html ](http://www.exampledepot.com/egs/java.sql/CallProcedure.html) [ http://www.jguru.com/faq/view.jsp?EID=30731 ](http://www.jguru.com/faq/view.jsp?EID=30731) – Umesh

+0

मैं विशेष रूप से प्राप्त करने के लिए देख रहा हूं रिटर्न वैल्यू, मैं स्पॉक्स को कॉल करने के बारे में सामान्य जानकारी नहीं ढूंढ रहा हूं। –

उत्तर

33

Bozho के 2 संशोधित जवाब करीब था लेकिन काफी नहीं। हालांकि मुझे जवाब के लिए नेतृत्व किया।

कोड उदाहरण मैं हमने शुरू ले रहा है के साथ अंत: कुंजी टुकड़े यहाँ

CallableStatement proc = connection.prepareCall("{ ? = call dbo.mySproc() }"); 
proc.registerOutParameter(1, Types.INTEGER); 
proc.execute(); 
int returnValue = proc.getInt(1); 

हैं "कहते हैं" prepareCall समारोह जो के लिए एक जगह सेट में के सामने "=?" वापसी मूल्य और registerOutputParameter। इसे एक इंटीजर के रूप में पंजीकृत किया जाना है, क्योंकि वापसी मूल्य हमेशा एक int (कम से कम SQL सर्वर में, शायद यह अन्य डीबी में भिन्न है)। इसलिए आपको इसे getInt का उपयोग करना होगा। मैंने इस विधि का परीक्षण किया और यह काम करता है।

+1

ऊपर, 'Type.INTEGER'' java.sql.Types.INTEGER' है। –

1
c.prepareCall("? = .."); 
cs.execute(); 
String returnedValue = cs.getString(1); 

(या उचित प्रकार की विधि। आप getObject उपयोग कर सकते हैं वैकल्पिक रूप से)

an old getting started tutorial

से CallableStatement में getXXX तरीकों बाहर पैरामीटर और/या की वापसी मूल्य से मूल्यों को पुनः प्राप्त एक संग्रहीत प्रक्रिया।

(Btw, लिंक है कि उमेश द्वारा प्रदान की गयी इस प्रकार की जानकारी नहीं थी।)

+0

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

+0

नहीं, यह कॉल करने योग्यता के संदर्भ में नहीं है (मेरे अपडेट किए गए उत्तर की जांच करें) – Bozho

+0

तैयार कॉल सिंटैक्स गलत है (कोई जेडीबीसी एस्केप सिंटैक्स नहीं है), आउट पैरामीटर को बाद में उपलब्ध होने के लिए पंजीकृत होना आवश्यक है, और लिंक मर चुका है। .. –

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