तैयार किया हुआ सेट


86

Java ReadyedStatement एक संभावना को शून्य मान सेट करने की संभावना प्रदान करता है। यह संभावना है:

prepStmt.setNull(parameterIndex, Types.VARCHAR);

क्या इस का शब्दार्थ एक विशिष्ट पैरामीटर का उपयोग करते समय वैसा ही होता है जैसे अशक्त पैरामीटर के साथ?

prepStmt.setString(null);

?

जवाबों:


73

यह मार्गदर्शिका कहती है:

6.1.5 JDBC NULL को एक पैरामीटर के रूप में भेजना

सेटनल विधि एक प्रोग्रामर को एक JDBC NULL (एक जेनेरिक SQL NULL) मान को डेटाबेस में IN पैरामीटर के रूप में भेजने की अनुमति देती है। ध्यान दें, हालांकि, एक को अभी भी जेडडीबीसी प्रकार के पैरामीटर को निर्दिष्ट करना होगा।

एक JDBC NULL को डेटाबेस में भी भेजा जाएगा जब Java null वैल्यू को एक setXXX विधि में पास किया जाता है (यदि यह जावा ऑब्जेक्ट्स को तर्क के रूप में लेता है)। विधि सेटऑब्जेक्ट, हालांकि, केवल JDBC प्रकार निर्दिष्ट होने पर शून्य मान ले सकता है।

तो हाँ वे समकक्ष हैं।


2
+1: दिलचस्प है। मैंने मान लिया कि सेटएक्सएक्सएक्स ने नल के साथ कैसे काम किया, लेकिन मैंने वास्तव में कभी भी इसका परीक्षण नहीं किया या इसके लिए डॉक्स नहीं पढ़ा।
पॉवरलॉर्ड

2
मुझे नहीं लगता कि myPreparedStatement.setInteger (myIntegerObject) जैसा कुछ है (हालांकि मैं देख रहा हूं कि सटीक विधि नाम मौजूद नहीं है) यदि मैं एक संभावित अशक्त पूर्णांक का उपयोग करना चाहता हूं? अन्यथा मैं एक। If / if स्टेटमेंट, कॉलिंग .setInt () वन वे एंड .setNull () दूसरा तरीका इस्तेमाल करने जा रहा हूं, जो थोड़ा थकाऊ लगता है।

@ardave, हां, यही मेरा अंतिम पैराग्राफ है
djna

1
मुझे इसका पुराना पता है लेकिन यह लिंक टूट गया है।
Moob


76

लेकिन इसके लिए बाहर देखो ...।

Long nullLong = null;

preparedStatement.setLong( nullLong );

-थो अशक्त सूचक अपवाद-

क्योंकि प्रोटोटाइप है

setLong( long )   

नहीं

setLong( Long )

अच्छा है कि तुम एह को पकड़ लो।


यह वास्तव में उदाहरण है जो मुझे यहां लाया है।
sf_jeff

13

अंत में मैंने एक छोटा परीक्षण किया और जब मैं प्रोग्रामिंग कर रहा था तो मेरे दिमाग में यह आया, कि सेटनुल (..) विधि के बिना जावा प्राइमेटिव्स के लिए अशक्त मान सेट करने का कोई तरीका नहीं होगा। वस्तुओं के लिए दोनों तरह से

setNull(..)

तथा

set<ClassName>(.., null)) 

उसी तरह व्यवहार करें।


9

आप उपयोग करने पर भी विचार कर सकते हैं preparedStatement.setObject(index,value,type);


3
preparedStatement.setNull(index, java.sql.Types.NULL);

किसी भी प्रकार के लिए काम करना चाहिए। हालाँकि कुछ मामलों में सर्वर-साइड पर विफलता होती है, जैसे: SQL के लिए:

COALESCE(?, CURRENT_TIMESTAMP)

Oracle 18XEगलत प्रकार के साथ विफल रहता है: अपेक्षित DATE, मिला STRING- यह पूरी तरह से वैध विफलता है;

निचला रेखा: यदि आप कॉल करते हैं तो प्रकार जानना अच्छा है .setNull()

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.