Вопрос по android, database, sqlite – Android проверяет повторяющиеся значения перед вставкой данных в базу данных

0
    String new_recorded_lastname="a lastname";
    ////record to database......
    Cursor cursor = db.rawQuery("SELECT lastname FROM people; ",null);

     if (cursor != null){
  while(cursor.moveToNext()){

    String recorded_lastname=cursor.getString(cursor.getColumnIndex("lastname"));
    if(!(recorded_lastname.equals(new_recorded_lastname))){ 
    //add new_recorded_lastname to database
    break;
    }
    }
    }

Я хочу иметь фамилию только один раз в моей базе данных. Несмотря на то, что я проверяю с помощью & quot; if (! (Records_lastname.equals (new_recorded_lastname))) & quot; этот код строки, он добавляет одни и те же записи снова и снова. Как я могу контролировать фамилию, чтобы добавить только один раз?

// Очень хорошо работает с первой записью, но начиная со второй записи, снова и снова добавляет фамилию ....

да, я могу изменить базу данных, так что если я так сделаю, все будет хорошо? if (! (records_lastname.equals (new_recorded_lastname))) {try {// добавить new_recorded_lastname в базу данных} catch (исключение e) {///} break; } Co Koder
Есть ли возможность изменить поле базы данных и установить его вunique так что база данных сделает всю магию за вас? nuala

Ваш Ответ

1   ответ
3

Мне кажется, что вы проверяете каждую запись в базе данных, и как только вы найдете запись, которая не содержит заданную фамилию, вы добавляете запись в базу данных. Вы должны накапливать результаты проверок, примерно так:

boolean lastnamePresent = false;
while(cursor.moveToNext()){
    String recorded_lastname=cursor.getString(cursor.getColumnIndex("lastname"));
    if(recorded_lastname.equals(new_recorded_lastname)){ 
        lastnamePresent = true;
        break;
    }
}

if(!lastnamePresent)
    // add new_record_lastname to database

Хотя было бы лучше, если бы вы использовали инструменты SQLite для обработки такого рода вещей. Как установка столбца вUNIQUE.

Посмотрите наinsert а такжеinsertOrThrow документация. Первый вернется-1 последнее является надлежащим исключением, если что-то происходит (например, нарушениеunique сдерживать.). Я предпочел бы последний, потому что в общем случае не имеет значения, сравниваете ли вы его с-1 или поймать исключение.developer.android.com/reference/android/database/sqlite/…
Если вы используетеUNIQUE тогда вы получите ошибку при попыткеINSERT дублированная фамилия. Как вести себя с такой ошибкой, зависит от логики вашего приложения.
если я использую UNIQUE, мне нужно проверить, как вы объясните, снова? Co Koder
& Quot; если (!) LastnamePresent & Quot; должно быть, если (фамилия присутствует), я прав? Co Koder
да так, как я могу это исправить? Co Koder

Похожие вопросы