【问题标题】:Content Provider - Updating All Rows and Columns内容提供者 - 更新所有行和列
【发布时间】:2018-10-11 03:43:47
【问题描述】:

我有一个名为 cv 的 ContentValues[] 数组,它进入我的 SQLite 数据库。为了保持简单,我的数据库有这 3 列(每行的自动增量 ID、日期和湿度。)数据库有 3 行。这是添加到单行的数据示例。

ContentValues cv = new ContentValues();
        cv.put(WeatherContract.WeatherData.COLUMN_DAY_OF_WEEK, day);
        cv.put(WeatherContract.WeatherData.COLUMN_HUMIDITY, humidity);

这个循环 3 次,每个 ContentValue 都被放入我的 ContentValue 数组中,然后批量插入到我的数据库中。

我有一个作业,它每五分钟从服务器获取新数据。所以我需要这些新数据来替换旧数据并且在语法上遇到问题。我得到了包含新数据的 ContentValues[] jsonResults 的点,然后有点困惑。如何更新表中的所有行?是否需要循环遍历 contentResolvers 更新方法:

for (int i =0; i<jsonResults.length;i++){
            context.getContentResolver().update(weatherQueryUri,jsonResults[i],null,null);
        }

如果是这样,我在 where 和 selectionArgs 子句中放置什么而不是 null?还是我让它保持为空?

通过 ContentProvider 后,这是我实际插入的数据库方法:

  public void updateRow(ContentValues weatherValue,String where, String selection){
        mDb.update(WeatherContract.WeatherData.TABLE_NAME,weatherValue,null,null);
}

谢谢!

【问题讨论】:

    标签: android sqlite android-contentprovider


    【解决方案1】:

    好吧,我不太确定我的解决方案是否有效,但您可以试一试。 为了用新数据替换旧数据,我首先对 ContentResolver 对象执行 delete() 然后 bulkInsert() 。这样你就不必循环通过 jsonResults。

      if (jsonResults != null && jsonResults.length != 0) {
                    /* Get a ContentResolver object to help delete and insert data */
                    ContentResolver contentResolver = context.getContentResolver();
    
                    /* Delete old data */
                    contentResolver.delete(weatherQueryUri,null,null);
    
                    /* Insert our new data into contentResolver */
                    contentResolver.bulkInsert(weatherQueryUri, jsonResults);
                }
    

    【讨论】:

    • 我想过这样做,但 bulkInsert 会导致 ID 发生变化,我需要它们保持不变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多