【问题标题】:I can't save records with no duplicates in SQLite我无法在 SQLite 中保存没有重复的记录
【发布时间】:2019-07-10 11:49:20
【问题描述】:

我正在尝试在 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);
}

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

【问题讨论】:

  • @B001ᛦ,不,是这样的:cityName = "New-York", cityTemp = "20.4" -> 城市的每一行
  • 如果您在首次创建表后添加了 UNIQUE 属性,请从设备中卸载应用程序,以便删除数据库并重新运行以重新创建数据库和具有该属性的表。
  • 您最近是否添加了 UNIQUE 子句?如果是,您是否删除了数据库(删除应用程序的数据或卸载应用程序然后重新运行应用程序)?
  • @Alexander 很好。我添加了一个解释原因的答案。

标签: android sqlite


【解决方案1】:

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

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

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

如果您需要保留现有数据,那就有点复杂了。

【讨论】:

    【解决方案2】:

    您必须跟踪元素是否已插入。插入新元素后,ID(模型变量)将为 -1。如果元素是插入器,则 ID 将加一。这样,您可以更新有条目的表,并在需要时插入新条目。

    if (I.getId() == -1) { //models ID which would be incremented 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())});
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 2018-05-02
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多