Sqlite数据库更新的行成为数据库的最后一行

时间:2015-03-10 17:41:22

标签: java android database sqlite

我的数据库表由许多行组成,其中唯一键是我使用唯一标识符的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();
        }

2 个答案:

答案 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子句传递,并且必须工作