首页 > 解决方案 > 我无法在 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 +"))");
}

以及存储在 DB 中的函数:

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);
}

我希望没有重复,但它们是

标签: androidsqlite

解决方案


您的问题是由于onCreate方法的运行方式造成的。

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

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

如果您需要保留现有数据,那么它会稍微复杂一些。


推荐阅读