我想阻止在SQLite中插入重复的行,因为我使用了一个唯一的属性:
@Override
public void onCreate(SQLiteDatabase db) {
String CREATETABLE = "CREATE TABLE contacts ( " +
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"name TEXT, "+
"profil TEXT, "+
"phone TEXT UNIQUE ,"+
"blocked TEXT, "+
"show TEXT , "+
"objectid TEXT )";
db.execSQL(CREATETABLE);
}
但是当我用同一部手机插入一行时,我的错误出现在Log:
中E/SQLiteLog: (2067) abort at 17 in [INSERT INTO contacts(phone,name,blocked,objectid,show,profil) VALUES (?,?,?,?,?,?)]: UNIQUE constraint failed: contacts.phone
那是不是很好,有什么方法可以阻止它吗?
public void addcontact(contacts contact){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", contact.getName());
values.put("phone", contact.getNumero());
values.put("profil", contact.getProfil());
values.put("show", contact.getShow());
values.put("blocked", contact.getBlocked());
values.put("objectid", contact.getObjectid());
try {
db.insertOrThrow("contacts",
null,
values);
} catch(SQLiteException e) {
Log.d("My App", "caught");
}
//db.close();
}
答案 0 :(得分:2)
如果您只想防止错误,并且如果唯一值已经存在则无效,则使用...
...并使用DateBean
作为CONFILCT_IGNORE
参数。
如果您确实想要更新已存在的行,则可以使用与conflictAlgorithm
相同的方法。