Android,处理SQLiteConstraintException

Android,处理SQLiteConstraintException,android,sqlite,exception,handle,constraints,Android,Sqlite,Exception,Handle,Constraints,我在Android中有这样一种方法: 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("

我在Android中有这样一种方法:

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

}
title值是唯一的,因此当我插入重复值时,会抛出约束错误,到目前为止,这是正确的。 一切正常。
但是我无法使catch代码正常工作。

尝试使用。否则,如果发生错误,insert只返回-1。

当您执行从条目类add boolean添加数据库中的值以控制数据时 例:

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

如果传递的值没有冲突或错误,则此处的数据库将尝试添加值。如果出现错误,布尔值将保持为true。布尔值将为false并返回它。您可以将任何消息作为ex toast(存在冲突)

抱歉,但上述答案在android 4.4.2上对我不起作用。 最小sdk级别11,最大sdk级别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();
这将正确捕获约束,并且您可以在catch块内进行处理


RR.

如果在发生错误时仍然抛出异常,那么它将一文不值
/*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();