2011-11-08 8 views
19

मैं निम्नलिखितमैं एंड्रॉइड में स्क्लाइट टेबल से कॉलम कैसे हटा सकता हूं?

openDB.execSQL("ALTER TABLE favs" + " DROP COLUMN favsCount"); 

LogCat का उपयोग करके किसी स्तंभ को हटाने की कोशिश की देता है निम्न संदेश:

11-07 21: 18: 29.238: त्रुटि/डाटाबेस (13,952): विफल 1 (के पास "DROP": वाक्यविन्यास त्रुटि) 0x34e550 पर 'वैकल्पिक तालिका favs ड्रॉप COLUMN favsCount' तैयार करते समय।

एंड्रॉइड के लिए एसक्लाइट में फ़ील्ड को मिटाना संभव नहीं है?

उत्तर

42

क्षमा करें, SQLite doesn't support DROP COLUMN:

(11) मैं कैसे SQLite में किसी मौजूदा तालिका से कॉलम जोड़ने या नष्ट कर सकता हूं।

SQLite ने सीमित तालिका समर्थन सीमित किया है जिसका उपयोग आप किसी तालिका के अंत में कॉलम जोड़ने या तालिका का नाम बदलने के लिए कर सकते हैं। [...]

उदाहरण के लिए, मान लें कि आपके पास कॉलम नाम "ए", "बी" और "सी" के साथ "टी 1" नाम की एक तालिका है और आप इस तालिका से कॉलम "सी" को मिटाना चाहते हैं। निम्न चरणों के उदाहरण देकर स्पष्ट करना यह कैसे किया जा सकता है:

BEGIN TRANSACTION; 
CREATE TEMPORARY TABLE t1_backup(a,b); 
INSERT INTO t1_backup SELECT a,b FROM t1; 
DROP TABLE t1; 
CREATE TABLE t1(a,b); 
INSERT INTO t1 SELECT a,b FROM t1_backup; 
DROP TABLE t1_backup; 
COMMIT; 

तो मूल रूप से, आप का उपयोग करने के लिए है "कॉपी, ड्रॉप तालिका, नई तालिका बनाने के लिए, वापस कॉपी" एक स्तंभ दूर करने के लिए तकनीक।

+0

देख सकते हैं "BEGIN ट्रांज़ेक्शन;" से सावधान रहें और "COMMIT;" क्योंकि वे डेटाबेस को अवरुद्ध कर सकते हैं, क्योंकि एक लेनदेन पहले से ही 'SQLiteOpenHelper.getWritableDatabase() 'में शुरू हो चुका है। – EmmanuelMess

+0

@muistooshort, EmmanuelMess की टिप्पणी कितनी मान्य है? – Suragch

+0

@Suragch 'SQLiteOpenHelper.getWritableDatabase()' के लिए प्रलेखन की जांच करें (मान लीजिए कि आप निश्चित रूप से उपयोग कर रहे हैं)। उदाहरण के लिए एसक्यूएल को SQLite प्रलेखन बीटीडब्ल्यू से उद्धृत किया गया है। –

4

एमयू के रूप में बहुत छोटा है कहता है कि स्क्लाइट कॉलम को हटाने के लिए एक तालिका को बदलने की अनुमति नहीं देता है। यहां आप alter syntax definition

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