2011-05-18 18 views
8

के बीच SQLite अंतर मेरे पास एक एंड्रॉइड ऐप है, और अब तक मेरा पूरा परीक्षण मेरे फ्रायओ फोन पर रहा है। मैंने एम्यूलेटर में 1.6 और 2.1 के खिलाफ परीक्षण शुरू कर दिया है, और यह स्टार्टअप पर दुर्घटनाग्रस्त हो गया है। यह मेरे विचारों में से एक में कॉलम नहीं ढूंढ सकता है।एंड्रॉइड 2.1 और 2.2

05-17 23:31:31.446: ERROR/AndroidRuntime(198): Caused by: 
android.database.sqlite.SQLiteException: no such column: 
categoryTable.currentBal: , while compiling: 
SELECT SUM(categoryTable.currentBal) FROM catDisplayTable 
WHERE masterCategoryName != "__Hidden__" 

देखने के स्कीमा इस प्रकार है:

CREATE VIEW catDisplayTable AS SELECT categoryTable._id, categoryTable.name, 
categoryTable.currentBal, categoryTable.sequence, categoryTable.note, 
masterCategoryTable.name AS masterCategoryName FROM categoryTable 
LEFT OUTER JOIN masterCategoryTable 
ON categoryTable.masterCategoryId = masterCategoryTable._id; 
adb shell साथ

विभिन्न एमुलेटर उदाहरणों से कनेक्ट कर रहा है, मैं पुष्टि की है कि (1) सही स्कीमा सभी मामलों में जगह में है, और (2) 1.6 और 2.1 में, SQLite सिर्फ इस दृश्य में कॉलम पता लगाने में असमर्थ है, के रूप में भी

SELECT categoryTable.name FROM catDisplayTable; 

या

के रूप में सरल कुछ के साथ
SELECT name FROM catDisplayTable; 

यह 2.2 पर ठीक काम करता है।

इसलिए मेरा अनुमान है कि एंड्रॉइड 2.1 और 2.2 के बीच SQLite में कुछ बदल गया है। This answer मददगार रूप से SQLite संस्करण देता है जो प्रत्येक एंड्रॉइड एपीआई स्तर के साथ भेज दिए गए थे। यह कहता है कि SQLite को 2.1 और 2.2 के बीच 3.5.9 से 3.6.22 तक अपडेट किया गया था। the SQLite release history पर देखकर, मुझे कुछ भी विशेष रूप से स्पष्ट नहीं दिख रहा है जो अंतर को समझा सकता है।

क्या कोई भी वास्तव में क्या बदल सकता है इसकी पहचान कर सकता है, और सुझाव दे सकता है कि मैं इसके आसपास कैसे काम कर सकता हूं, इसलिए मेरा कोड प्री-फ़्रायओ डिवाइस पर काम करता है?

+0

मैं है मैं बस यह सुनिश्चित करने की कोशिश कर रहा हूं कि आपने स्पष्ट रूप से छोड़ा नहीं है। क्या आपने कोशिश करने से पहले एमुलेटर/डिवाइस पर "साफ डेटा" किया था? हो सकता है कि आपको पुराना देव संस्करण मिल गया हो और इस दृश्य में उस एमुलेटर/डिवाइस पर कॉलम नहीं है? – katit

+0

@ katit हां, पूरी तरह से साफ करें। मैंने विशेष रूप से इसका परीक्षण करने के लिए नए खाली एवीडी बनाए। –

उत्तर

2

के लिए विफल हो जाएगा मैं अपने अनुप्रयोग में ठीक उसी समस्या है। आम संप्रदाय यह है कि मैं दृश्यों का भी उपयोग करता हूं और विदेशी कुंजी रखता हूं।

मैंने एम्यूलेटर से अपना डेटाबेस डाउनलोड किया है। मुझे एंड्रॉइड ओएस 2.1 के बाहर क्वेरी चलाने में कोई समस्या नहीं है।

mp2526 के उत्तर को जाने के लिए दिया गया लेकिन "कॉलमक्स एएस कॉलमक्स" से पूछताछ करने से कोई फर्क नहीं पड़ता। मैं इस मुद्दे को अलग करने की कोशिश करूंगा।

+0

यदि मैं एक ही प्रश्न को स्टैंडअलोन के रूप में चलाता हूं तो यह ठीक काम करता है। शायद यह पहले से ही स्पष्ट था, लेकिन _a उच्च स्तर पर यह दृश्य और एंड्रॉइड 2.1 का संयोजन है जो अच्छी तरह से खेलता नहीं है। – Magnus

+0

मैं सहमत हूं, मैंने अंततः दृश्यों से बचने के लिए अपने प्रश्नों का पुनर्निर्माण करके अपनी समस्या का समाधान किया। –

+0

हाँ, इस तरह मैंने इसे अंत में भी हल किया। मुझे लगता है कि यह एक बड़ा सौदा नहीं है लेकिन डेटाबेस में विचारों को प्रबंधित करना आसान लगता है। मैंने त्रुटि के मूल मंच कार्यान्वयन में त्रुटि का पता लगाया। मेरे लिए यह तय करना पर्याप्त था कि जावा में किसी प्रकार का जादू एपीआई कॉल करने के लायक नहीं था। – Magnus

7

DISTINCT का उपयोग करते समय मैंने SQLite के साथ किसी समस्या में भाग लिया है, जो शायद आप उसी समस्या को SUM के साथ चला रहे हैं।

DISTINCT का उपयोग करते समय पहले ओएस संस्करणों पर, मुझे कॉलम नामों को उपनाम करना था या तर्क ठीक उसी त्रुटि में विफल होगा (मुझे बिल्कुल याद नहीं है कि त्रुटि क्या थी), लेकिन मुझे लगता है कि वे इसे बाद के ओएस संस्करणों में तय किया गया। सभी OS संस्करण के लिए

उदाहरण

SELECT DISTINCT _id AS _id, test AS test FROM table 

काम करता है, जबकि

SELECT DISTINCT _id, test FROM table 

पहले OSes

+0

मेरे पास एक ऐसा एप्लिकेशन है जो v2.1 और ऊपर का समर्थन करता है। मैंने उस एप्लिकेशन को एक दृश्य जोड़ा था जो शामिल प्रश्नों के संघों का संयोजन था। दृश्य v2.2 और ऊपर में ठीक काम किया, लेकिन v2.1 में नहीं। प्रत्येक उप-प्रश्नों में, मैंने प्रत्येक कॉलम को उपनाम दिया, और इसने दृश्य को v2.1 में काम करने की अनुमति दी। सलाह के लिए धन्यवाद .... यह बहुत अच्छा काम किया! –

0

बस एक ही समस्या में भाग गया। जब कॉलम एएस कॉलम नोटेशन का उपयोग करके मैंने घोषणा को फिर से देखा तो यह काम करता है।

0

समस्या यह है कि एंड्रॉइड 2।1 रिटर्न स्तंभों उनकी तालिका नाम के साथ है, तो

SELECT id FROM table 

की तरह एक प्रश्न के रूप में पहले ही बताया, नाम table.id

समाधान के साथ एक स्तंभ वापस आ जाएगी, लिखने के लिए

SELECT id as id FROM table 
+0

आपके कथन पर्याप्त स्पष्ट नहीं हैं और एक उत्तर नहीं होने लगते हैं। कृपया उत्तर पोस्ट करने के लिए केवल SO उत्तरों का उपयोग करें, अन्यथा मौजूदा लोगों पर टिप्पणी करें। कृपया 'सहायता' मेनू के तहत हमारे 'टूर' पर भी नज़र डालें। – Alexey

+0

जैसा कि आपने कहा था, समाधान पहले से ही प्रदान किया गया है, कोई नया उत्तर देने की आवश्यकता नहीं है। – djv

+0

#rvighne - धन्यवाद दोस्त – user3866289

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