2010-08-05 10 views
9

जब मैं निम्नलिखित को चलाने के लिए कोशिश कर रहा हूँ:SQLite में, त्रुटि कोड सम्मिलित करने में असमर्थ: 19

Error inserting unit = 0;
SqliteConstraintException: error code 19 constraint failed.

क्या समस्या नहीं होनी चाहिए:

ContentValues cv = new ContentValues(); 
    cv.put(table_LocalSettings_Unit, input); 
    mDb.insert(table_LocalSettings, "", cv); 

मैं निम्न त्रुटि मिल गया? तालिका एसक्यूएल कोड है:

"create table if not exists " + table_LocalSettings + "(" + table_LocalSettings_ID 
    + " INTEGER PRIMARY KEY NOT NULL , " + table_LocalSettings_MapType 
    + " INTEGER NOT NULL , " + table_LocalSettings_Visib + " BIT NOT NULL , " 
    + table_LocalSettings_Unit + " INTEGER DEFAULT 0 NOT NULL , " 
    + table_LocalSettings_SpeedUnit + " INTEGER NOT NULL , " 
    + table_LocalSettings_Alert + " BIT NOT NULL ," + table_LocalSettings_UserID 
    + " INTEGER DEFAULT -1 , " + table_LocalSettings_Username + " VARCHAR , " 
    + table_LocalSettings_PowerSave + " VARCHAR , " + table_LocalSettings_PremiumUser 
    + " INTEGER NOT NULL DEFAULT 0);"; 

उत्तर

11

constraint failed

ध्वनि अपने प्राथमिक कुंजी पहले से ही मेज

+0

मैं पहला सवाल अद्यतन किया था। क्या आप मेरे एसक्यूएल पर कुछ गलत देखते हैं? ई कैन'टी ! – Karoly

+0

लगता है जैसे आप प्राथमिक कुंजी के लिए सामग्री मूल्यों को जोड़ नहीं रहे हैं। और यह विफल हो जाता है क्योंकि टेबल निर्माण में ऑटोइनक्रिकमेंट निर्देश गुम है, यह कुछ ऐसा होगा: '_id' पूर्णांक प्राथमिक कुंजी ऑटोमेशन नहीं ' – Pentium10

+0

इनपुट चर एक पूर्णांक – Karoly

4

में मौजूद है जैसे मैं एक ही समस्या थी और पेंटियम 10 का जवाब मुझे सही दिशा में नेतृत्व किया। बेलो कोड को सत्यापित करने के बाद गलत था, फिर इसे ठीक करने के बाद मैंने एमुलेटर में उस ऐप से डेटा साफ़ कर दिया और उसने डीबी को फिर से बनाया और यह ठीक काम करता है।

 "create table if not exists " + DATABASE_TABLE + " (" + _ID + " integer primary key autoincrement," + 
    " ItemName text not null, ItemID text not null, Image text not null, ImageDate text not null);"; 

मुझे लगता है कि मेरी समस्याओं में से एक मेरे पास एक अतिरिक्त कॉलम था। मैंने पहले कॉलम में से एक को हटा दिया और इसे उपरोक्त रेखाओं से नहीं हटाया।

मुख्य बात ट्रिपल त्रुटियों और वर्तनी के लिए कोड की जांच करें और यदि एमुलेटर का उपयोग डेटा को साफ़ करता है।

2

आप यहां सभी SQLite त्रुटि कोडों की एक सूची देख सकते हैं http://www.sqlite.org/c3ref/c_abort.html। त्रुटि कोड 1 का मतलब है कि एक टेबल बाधा (न्यूल, अद्वितीय, आदि) ऑपरेशन के दौरान उल्लंघन किया गया था (INSERT, आदि)। अपने टेबल निर्माण तर्क को देखने से, आपके कई फ़ील्ड न्यूल पर सेट हैं, फिर भी आप केवल एक कॉलम डालने का प्रयास कर रहे हैं। यदि आप अपनी तालिका बनाते हैं जैसे मान शून्य नहीं हो सकते हैं, तो आपको INSERT के दौरान एक गैर-शून्य मान शामिल करना होगा, अन्यथा आपको त्रुटि कोड 1 दिखाई देगा। यदि आपकी आवश्यकता नहीं है तो आप अपनी डेटाबेस तालिका से बाधा को भी हटा सकते हैं ।

एक तरफ ध्यान दें के रूप में, वहाँ अन्य डालने तरीकों कि बाधा उल्लंघन से निपटने के लिए अनुमति देते हैं जैसे

db.insertWithOnConflict(..., ..., ..., INTEGER); 

जहां पूर्णांक SQLiteDatabase कक्षा में स्थिर संघर्ष समाधान चर में से एक है (लेकिन मैं नहीं कर रहे हैं लगता है कि उनमें से कोई भी पूर्ण उल्लंघन की अनुमति नहीं देता है)। आप यहां SQLite संघर्ष समाधान विकल्पों के बारे में अधिक पढ़ सकते हैं: http://www.sqlite.org/conflict.html

2

आप तालिका से not null हटा सकते हैं और यह ठीक काम करेगा।
सही: इस तरह

String callTable = "CREATE TABLE IF NOT EXISTS '%s'" + "(userid VARCHAR, callwith VARCHAR, calltype VARCHAR, callstart time, callend time, callmedia VARCHAR" + ");" 

गलत:

String callTable = "CREATE TABLE IF NOT EXISTS '%s'" + "(userid VARCHAR not Null , callwith VARCHAR not null, calltype VARCHAR, callstart time, callend time, callmedia VARCHAR" + ");" 
+0

'' 'के साथ कुछ भी गलत नहीं है नल का इस्तेमाल किया जा रहा है। यह बताता है कि एक मूल्य को शून्य होने की अनुमति नहीं है। – Hobbyist

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