我无法在SQLite中保存没有重复的记录

时间:2019-07-10 11:49:20

标签: android sqlite

我正在尝试在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 个答案:

答案 0 :(得分:1)

您必须跟踪是否已插入元素。插入新元素后,ID(模型的变量)将为-1。如果元素已插入,则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())});
        }

答案 1 :(得分:1)

您的问题归因于 onCreate 方法的运行方式。

它在数据库的生存期内仅自动运行一次。因此,对创建SQL所做的任何架构更改都不会自动应用。

开发典型的解决方法是删除数据库或使用onUpgrade方法(如果它删除了表并重新创建表)(通常通过调用onCreate)。可以通过删除/清除应用程序数据,卸载应用程序或通过设备资源管理器来删除数据库。

如果您需要保留现有数据,则要复杂一些。