2011-11-07 3 views
10

を扱う:私は、重複した値が、これまでそれは正しいですが、私に制約エラーをスロー挿入するとアンドロイド、私はAndroidの中で、この方法を持っている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

それでした。 tx – butelo

+0

エラーの場合にはまだ例外がスローされます。 –

+0

phew .. thanks .. –

1

あなたがデータ EX制御するブール値を追加し、エントリクラスからデータベースに値を追加するために実行します。DBhelperクラスで

boolean DBAccepted = DBhelper.addData(blabla); 

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

:ここ

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

をデータベースにします値が競合またはエラーなしで渡された場合は値を追加してください。エラーの場合はブール値はtrueのままで、ブール値がfalseの場合は返され、メッセージはトーストとしてトーストできます(競合があります)。

0

申し訳ありませんが、上記の回答は私のためにアンドロイド4.4.2で動作しません。私のために働いた何21

最大 分SDKレベル11は、以下の通りであった:

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

が、これは正しく制約をキャッチし、あなたは、catchブロック内あなたの取扱いを行うことができます。

RR。

関連する問題