我的数据库表由许多行组成,其中唯一键是我使用唯一标识符的id。所以没有重复的项目。
我正在使用replace()
方法将项目添加到数据库,以便在更新任何列时将其替换为新值。但问题是假设我的第一行数据库已更新,那么它将成为具有更新值的最后一行。我也不知道哪一行将被更新,因为数据来自服务器.. < / p>
如果我使用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();
}
答案 0 :(得分:2)
如果您已经正确地创建了updateRow方法,那么它不会在最后添加更新的行,但它会替换它而不会更改id
。
要更新Db,您的方法应该是,
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();
}
答案 1 :(得分:0)
您需要使用update(table_name,contentValues,where子句,绑定参数),将id作为where子句传递,并且必须工作