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

标签 java android database sqlite

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

相关文章:

启用 TLSv1.3 的 Java 11 和 12 SSL 套接字因 handshake_failure 错误而失败

java - 执行各种字符串操作的有效方法

android - 如何获取所有者/sim 号码和网络模式

Android Jetpack 撰写文档

mysql - 您如何为 MySQL 和 Postgres 编写不区分大小写的查询?

java - Vaadin anchor - 捕获默认点击事件

java - 在 Java Web 应用程序中的单独线程中上传文件

java - 在 PreferenceActivity 中使用 getSupportFragmentManager

database - Unity3D 在 Windows Phone 8 (WP8) Build 中使用数据库的问题

sql - 在 VBA SQL WHERE 子句中使用变量时遇到问题