Как проверить название дубликатов в базе данных Android?
Я хочу ввести имя и номер телефона из двух редактируемых текстов. Я использую две кнопки, чтобы сохранить и показать их в эмуляторе, используя представление списка. После ввода имени и после нажатия кнопки "Сохранить", как проверить, введено ли уже то же имя. Я новичок в Android объяснение будет действительно полезным.
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE "+tbname+"("+Key_id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+Key_name+" TEXT,"+Key_mobile+" TEXT)");
}
public void n(String aa, String bb) {
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put(Key_name, aa);
cv.put(Key_mobile, bb);
db.insert(tbname, Key_name, cv);
db.close();
}
public Cursor cr()
{
SQLiteDatabase db=getReadableDatabase();
String [] colms=new String[]{Key_id+" as _id",Key_name,Key_mobile};
Cursor cur=db.query(tbname, colms, null, null, null, null, null);
cur.moveToFirst();
return cur;
}
2 ответа
Я бы начал с изменения определения вашей таблицы, добавив ограничения NOT NULL и UNIQUE.
db.execSQL("CREATE TABLE "+tbname+"("+Key_id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+Key_name+" TEXT NOT NULL UNIQUE,"+Key_mobile+" TEXT)");
Затем у вас есть выбор методов для вставки. Ты можешь использовать:
insertOrThrow
вернет идентификатор вашей новой записи или -1 в случае ошибки (а ошибка ограничения, связанная с отсутствием уникального имени, будет ошибкой).
insertWithOnConflict
вернет идентификатор новой записи ИЛИ первичный ключ существующей строки, если входной параметр "конфликта-алгоритма" = CONFLICT_IGNORE ИЛИ -1, если возникнет какая-либо ошибка.
Лично я бы использовал insertWithOnConflict
с установленным флагом CONFLICT_IGNORE. Таким образом, вы можете вернуть идентификатор строки для дубликата записи (а также не допустить ввода дубликата).
Положил UNIQUE
в вашем определении поля таблицы затем используйте insertOrThrow
, Если вы вставите то же самое, insertOrThrow
вызовет исключение, вы можете его перехватить.