我的数据库表由许多行组成,其中唯一键是我使用唯一标识符的 ID。因此不存在重复的项目。
我正在使用 replace()
方法将项目添加到数据库中,以便如果更新任何列,则会将其替换为新值。但问题是,假设我的数据库的第一行已更新,那么它将成为具有更新值的最后一行。而且我不知道哪一列将被更新,因为数据来自服务器..
如果我使用 insert()
方法代替 replace()
来添加项目,那么项目将不会更新。我应该怎么做才能使我的行也被更新已替换且更新后项目顺序不应更改。
代码-
String CREATE_VIDEO_TABLE = "create table "
+ TABLE_VIDEO + "(" + KEY_ID + " text not null unique, "
+ KEY_CAPTION + " text not null, "
+ KEY_LOCATION + " text not null, "
+ KEY_NOSHARES +
" text not null);";
public void addVideoData(Video videoSql) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_ID, videoSql.getId());
values.put(KEY_CAPTION, videoSql.getCaption());
values.put(KEY_LOCATION, videoSql.getLocation());
values.put(KEY_NOSHARES, videoSql.getNoOfShares());
try {
db.replace(TABLE_VIDEO, null, values);
}catch(Exception e){}
db.close();
}
最佳答案
如果您以正确的方式创建了 updateRow 方法,那么它不会在最后添加更新的行,而是会替换它,并且也不会更改 id
。
要更新数据库,您的方法应该是这样的,
public void updateRow(int id ,String name, String address, String date){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_ID, id);
values.put(COLUMN_NAME, name);
values.put(COLUMN_ADDRESS, address);
values.put(COLUMN_DATE, date);
db.update(TABLE_NAME, values, COLUMN_ID+ " = " +id, null);
db.close();
}
编辑:
在您的情况下,您不需要使用 replace()
方法,请使用 update()
方法。这不会将更新的行放在最后,并且还会保持 id
相同。
改变
try {
db.replace(TABLE_VIDEO, null, values);
}catch(Exception e){}
至
db.update(TABLE_VIDEO, values, KEY_ID+ " = " +videoSql.getId(), null);
如果您使用相同的方法(您发布的相关方法)来插入数据和更新数据,它总是将您的行放在最后,您需要创建另一种方法来在数据库中插入数据。应该如下。
public void insertData(Video videoSql){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_CAPTION, videoSql.getCaption());
values.put(KEY_LOCATION, videoSql.getLocation());
values.put(KEY_NOSHARES, videoSql.getNoOfShares());
.
.
.
.
.
db.insert(TABLE_VIDEO, null, values);
db.close();
}
关于java - Sqlite 数据库更新行成为数据库的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28970504/