2011-11-07 17 views
10

Mam tej metody w Androidzie:Android, uchwyt 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(); 

} 

tytuł wartość jest wyjątkowy więc kiedy wstawić duplikat wartość wyrzuca mi błąd ograniczenie, tak daleko, że jest poprawne. Wszystko działa zgodnie z oczekiwaniami. , ale nie mogę sprawić, aby kod catch działał.

Odpowiedz

23

Spróbuj użyć insertOrThrow. W przeciwnym razie wstaw po prostu zwraca -1 w przypadku błędu.

+0

to było to. tx – butelo

+0

nic nie warte, że nadal zgłasza wyjątek w przypadku błędu –

+0

uff ... dzięki .. –

1

Po wykonaniu dodać wartości w bazie danych z klasy entry dodać wartość logiczną aby kontrolować dane Ex:

boolean DBAccepted = DBhelper.addData(blabla); 

if(DBAccepted ==false) 
{ 
Toast.maketext (this,"There is a conflict",Toast.LengthLong).show(); 
} 

w klasie 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 ; 
    } 

Baza Tutaj spróbuj dodać wartości, jeśli wartości zostały przekazane bez konfliktu lub błędu, wartość boolowska pozostanie prawdziwa, jeśli błąd logiczny będzie fałszywy i zwróci go i możesz wznieść toast za wiadomość (ex-toast)

0

Przepraszamy, ale powyższe odpowiedzi nie działają dla mnie na Androida 4.4.2. min SDK poziom 11, max 21.

Co pracował dla mnie był następujący:

/*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(); 

to poprawnie łapie ograniczenia i można wykonać manipulację wewnątrz bloku catch.

RR.