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 +"))");
}
以及存储在 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);
}
我希望没有重复,但它们是
解决方案
您的问题是由于onCreate方法的运行方式造成的。
它只会在数据库的生命周期内自动运行一次。因此,对创建 SQL 所做的任何架构更改都不会自动应用。
开发时,典型的解决方法是删除数据库或使用 onUpgrade 方法,如果它删除表并重新创建它们(通常通过调用 onCreate)。可以通过删除/清除应用程序数据、卸载应用程序或通过设备资源管理器来删除数据库。
如果您需要保留现有数据,那么它会稍微复杂一些。
推荐阅读
- r - R tictoc 内部函数
- winapi - 我能否以编程方式检查远程计算机以查看是否有人已通过远程桌面连接到这台计算机?
- c++ - 我应该在这里使用 dynamic_cast 吗?
- python-3.x - Python使用avro存储库反序列化kafka消息
- dns - 域后缀上的 DNS 记录而不是子域
- javascript - javascript for 循环不适用于我的按钮 addEventListener 点击事件
- python - 打印扫描过程后如何在图像中找到相同的特征点?
- node.js - mssql中过程的迁移
- php - Symfony - 从控制器返回命令类的 json 输出
- java - 如何使用 JSOUP 抓取此图像