Как проверить название дубликатов в базе данных Android?

Я хочу ввести имя и номер телефона из двух редактируемых текстов. Я использую две кнопки, чтобы сохранить и показать их в эмуляторе, используя вид списка. После ввода имени и при нажатии кнопки «Сохранить»how to check whether i have already entered the same name. Я новичок в 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. Таким образом, вы можете вернуть идентификатор строки для дубликата записи (а также не допустить ввода дубликата).

 zyonneo08 июл. 2012 г., 22:40
Есть ли альтернативный метод, кроме использования UNIQUE ... как сравнение
 08 июл. 2012 г., 23:27
Это то, что делает UNIQUE, сравнивает. Это примерно такой простой и минимальный код, какой вы могли бы пожелать. Вы можете сравнить его вне БД, но тогда это вдвое больше работы. Потяните курсор, сделайте сравнение, если он снова не обращается к БД, чтобы вставить данные. Заставьте БД работать на вас и используйте UNIQUE.

ПоложилUNIQUE в вашем определении поля таблицы затем используйтеinsertOrThrow, Если вы вставите то же самое,insertOrThrow вызовет исключение, вы можете его перехватить.

 zyonneo06 июл. 2012 г., 04:46
При вставке вы должны быть точными ... куда я должен вставить UNIQUE перед именем ключа db.execSQL (& quot; CREATE TABLE & quot; + tbname + & quot; (& quot; + Key_id + & quot; INTEGER PRIMARY KEY AUTOINCREMENT, UNIQUE & quot; + Key_name + & quot; TEXT & quot; + Key_mobile + & quot; TEXT) & quot;);

Ваш ответ на вопрос