Я не могу сохранить записи без дубликатов в SQLite - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь сохранить записи без дубликатов в SQLite, но даже UNIQUE () не помогает.

Здесь я создаю базу данных и хочу, чтобы cityName был уникальным:

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    sqLiteDatabase.execSQL("create table " + tableName + "(" + KEY_ID + "integer primary key autoincrement,"
    + cityName + " text," + cityTemp + " text, " + " UNIQUE(" + cityName +"))");
}

И функция, которая хранит в БД:

public void saveWeather(Response<CurrentWeather> response) {
    contentValues = new ContentValues();
    database = dbHelper.getWritableDatabase();
    contentValues.put(DBHelper.cityName, response.body().getCityName());
    contentValues.put(DBHelper.cityTemp, 
    response.body().getForecastMain().getTemp());
    database.insert(DBHelper.tableName, null, contentValues);
}

Я не ожидаю дубликатов, но они

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Проблема возникла из-за того, что работает метод onCreate .

Он запускается автоматически только один раз за время существования базы данных.Таким образом, любые изменения схемы, сделанные в SQL для создания, не будут применены автоматически.

При разработке типичным обходным решением является удаление базы данных или использование метода onUpgrade, если он удаляет таблицы и воссоздаетих (как правило, вызывая onCreate).Базу данных можно удалить, удалив / очистив данные приложений, удалив приложение или с помощью обозревателя устройств.

Если вам необходимо сохранить существующие данные, это немного сложнее.

1 голос
/ 10 июля 2019

Вы должны будете отслеживать, если элемент был вставлен. После вставки нового элемента ID (переменная модели) будет -1. если элемент был вставлен, идентификатор будет увеличиваться на единицу. Таким образом, вы обновите таблицу, в которой есть запись, и вставите новую запись, если вам нужно.

if (I.getId() == -1) { //models ID which would be increamented by one once the element is inserted
            database.insert(DBHelper.tableName, null, contentValues);
        } else {  // otherwise, update
            database.update(DBHelper.tableName, contentValues
                   DBHelper.tableName.KEY_ID + " = ?", new String[]{String.valueOf(I.getId())});
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...