2011-11-09 17 views
8

मैं डेटाबेस में एक शून्य मान स्टोर करने के लिए कोशिश कर रहा हूँ, लेकिन हर मैं मूल्य मैं 0.एक डेटाबेस

मिल लोड मैं बस की तरह "intVal integer"

यह वह जगह है क्षेत्र घोषित में पूर्णांक मान के रूप में अशक्त डालने कैसे मैं इसे पुनः प्राप्त?

Integer x; 

x = cursor.getInt(cursor.getColumnIndexOrThrow(MyDBAdapter.KEY_X)); 

कि विश्वसनीय है या यह अपरिभाषित है

तो मुझे लगता है एक एक अपरिभाषित integervalue के रूप में रिक्त नहीं बचा सकता है

बहुत धन्यवाद

उत्तर

15

the getInt() documentation से:

एक पूर्णांक के रूप में अनुरोध स्तंभ का मान देता है। परिणाम और क्या यह विधि कॉलम मान शून्य होने पर अपवाद फेंकता है, कॉलम प्रकार एक अभिन्न प्रकार नहीं है, या पूर्णांक मान सीमा के बाहर है [Integer.MIN_VALUE, Integer.MAX_VALUE] कार्यान्वयन-परिभाषित है।

तो, यह एक कार्यान्वयन विवरण है जिस पर आपको भरोसा नहीं करना चाहिए।

आप अभी भी जो प्रभाव चाहते हैं उसे प्राप्त कर सकते हैं, हालांकि: आप मूल्य को पढ़ने से पहले बस शून्य जांच करते हैं।

int index = cursor.getColumnIndexOrThrow(MyDBAdapter.KEY_X); 
Integer x = null; 
if (!cursor.isNull(index) 
    x = cursor.getInt(index); 

// now x is either null or contains a valid value 
+0

बहुत बहुत धन्यवाद ... – user387184

0

SQLite गतिशील रूप से टाइप किया गया है। चूंकि आपने टाइप इंटीजर के कॉलम को परिभाषित किया है और इसे एक मान नहीं मिला है, यह संकेत के आधार पर 0 लौटाया गया है।

स्तंभ

+2

क्या होता है यदि आप जानना चाहते हैं कि संग्रहीत फ़ील्ड खाली है या नहीं तो शून्य? आप यहां अंतर कैसे बताते हैं? – Stoff81

0

राजदीप दुआ उल्लेख किया है, SQLite एक गतिशील टाइपिंग का उपयोग करता है के प्रकार के रूप में स्ट्रिंग का उपयोग करें। यहां बताया गया है documentation कहते है:

अधिकांश SQL डेटाबेस इंजन (हर SQL डेटाबेस SQLite के अलावा अन्य इंजन, जहाँ तक हम जानते हैं के रूप में) स्थिर, कठोर टाइपिंग उपयोग करता है। स्थिर टाइपिंग के साथ, मान का डेटाटाइप उसके कंटेनर द्वारा निर्धारित किया जाता है - विशेष कॉलम जिसमें मान संग्रहीत किया जाता है।

SQLite एक अधिक सामान्य गतिशील प्रकार प्रणाली का उपयोग करता है। SQLite में, किसी मान का डेटाटाइप मूल्य के साथ जुड़ा हुआ है, न कि कंटेनर के साथ।

Android दस्तावेज़ का कहना है कि getInt() का परिणाम जब स्तंभ मान null कार्यान्वयन परिभाषित किया गया है है। मेरे लिए, यह 0 भी देता है।

तो मैं getString() बजाय प्रयोग किया, हालांकि इस पद्धति का परिणाम भी कार्यान्वयन परिभाषित किया गया है, मेरे लिए, यह रिटर्न null जब स्तंभ मान null है, या एक स्ट्रिंग अन्यथा संख्या वाले।

तो कोड इस तरह दिखता है:

Strint strVal = cursor.getInt(cursor.getColumnIndexOrThrow(MyDBAdapter.KEY_X)); 

if(strVal != null){ 
    int intVal = Integer.parseInt(strVal); 
} 
संबंधित मुद्दे