2011-11-07 9 views
10

संभाल मैं एंड्रॉयड में इस विधि मिल गया है:एंड्रॉयड, SQLiteConstraintException

public void insertarTitulo(String _id, String title, String url){ 
    ContentValues cv = new ContentValues(); 

    cv.put("_id", _id); 
    cv.put("title", title); 
    cv.put("URL", url); 

try{ 
     getWritableDatabase().insert("book", "book", cv); 
}catch(SQLiteConstraintException e){ 

     Log.e(MyActivity.LOGTAG, "This code doesn't show"); 


} 
    close(); 

} 

शीर्षक इसलिए जब मैं डालने डुप्लिकेट मूल्य मुझे बाधा त्रुटि फेंकता है, अब तक यह सही है मूल्य अद्वितीय है। सबकुछ अपेक्षित के रूप में काम करता है। लेकिन मैं पकड़ कोड काम नहीं कर सकता।

उत्तर

23

insertOrThrow का उपयोग करने का प्रयास करें। अन्यथा, किसी त्रुटि की स्थिति में केवल -1 लौटें।

+0

वह था। टीएक्स – butelo

+0

कुछ भी लायक नहीं है कि यह अभी भी –

+0

phew त्रुटि के मामले में अपवाद फेंकता है .. धन्यवाद .. –

1

जब आप प्रवेश वर्ग से डेटाबेस में मान जोड़ने के लिए डेटा पूर्व नियंत्रित करने के लिए बूलियन जोड़ने निष्पादित करें:

boolean DBAccepted = DBhelper.addData(blabla); 

if(DBAccepted ==false) 
{ 
Toast.maketext (this,"There is a conflict",Toast.LengthLong).show(); 
} 
DBhelper कक्षा में

:

public boolean addData(String blablabla){ 
    DBAccepted =true; 
ContentValues cv = new ContentValues(); 
    cv.put(key_value, blablabla); 
    Databes.insertOrThrow(TABLE_SCORES, null, cv); 
    } catch (SQLiteConstraintException e) { 
       // TODO Auto-generated catch block 
        System.out.println(e); 
        DBAccepted =false; 
      } 
     return DBAccepted ; 
    } 

डेटाबेस यहां होगा मूल्यों को जोड़ने का प्रयास करें यदि मूल्य बिना किसी संघर्ष के त्रुटि से गुजरते हैं या बुलियन त्रुटि गलत होती है तो अगर बुलियन गलत हो जाएगा और इसे वापस कर देगा और आप किसी टोस्ट को टोस्ट (एक संघर्ष है) के रूप में किसी भी संदेश को टोस्ट कर सकते हैं

0

क्षमा करें, लेकिन ऊपर वर्णित उत्तरों एंड्रॉइड 4.4.2 पर मेरे लिए काम नहीं करते हैं। मिनट एसडीके स्तर 11, अधिकतम 21

क्या मेरे लिए काम किया निम्नलिखित था:

/*FIRST INSERT A VALUE*/ 
database = //get a writable database instance 
String MESSAGES_TABLE = "messages"; 
ContentValues cv= new ContentValues(); 
cv.put("unique_id_column","unique_id"); 
database.insert(MESSAGES_TABLE,null,cv); 
database.close(); 



/*NOW LETS TRY TO INSERT ANOTHER RECORD, WITH THE SAME VALUE, WHERE UNIQUE_ID_COLUMN 
IS THE UNIQUE COLUMN DEFINED WHILE CREATING THE TABLE.*/ 
database == //get a writable database instance 
try{    
    long new_row_id = database.insertWithOnConflict(MESSAGES_TABLE, null,cv,SQLiteDatabase.CONFLICT_FAIL); 
    Log.d(SS_DATABASE_TAG,"the new row id is ---> " + String.valueOf(new_row_id));   
    } 
catch(SQLiteConstraintException e) 
    { 
    Log.d(SS_DATABASE_TAG,"caught the contraint."); 
    } 
database.close(); 

इस सही ढंग से बाधा पकड़ता है, और आप पकड़ ब्लॉक के अंदर अपना निपटने कर सकते हैं।

आरआर।