当前位置: 首页 > 知识库问答 >
问题:

内容提供商-更新所有行和列

任昊苍
2023-03-14

我有一个名为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数组中,然后再批量插入到我的数据库中。

我有一个每五分钟从服务器获取新数据的作业。所以我需要这个新数据来替换旧数据,并且在语法方面遇到了问题。我已经到了使用新数据的ContentValue[]json结果的地步,然后有点困惑。如何更新表中的所有行?我需要循环通过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);
}

非常感谢。

共有1个答案

樊运乾
2023-03-14

嗯,我不确定我的解决方案是否有效,但你可以试一试。为了用新数据替换旧数据,我首先对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);
            }
 类似资料:
  • 最近几天,我一直在学习新的Android架构组件。跟进一些博文后,留档

  • 我正在开发一款应用程序,它(至少)有两种不同的软件包名称,因此就Android系统而言,实际上有两种不同的应用程序。该应用程序使用Facebook共享,因此我在清单中声明了提供商: 这是根据Facebook的指示完成的:https://developers.facebook.com/docs/sharing/android 这适用于一个应用程序,但尝试在同一设备上安装第二个应用程序失败,错误INS

  • 我与Wildfly上部署的webapp中的一些静态文件(主要是图像)发生了冲突。有时应用程序需要更新其中的一些文件,然后在文件系统中替换这些文件。 这显然是缓存的问题,因为如果我删除以前请求的文件之一并再次请求它,我将得到和StackTrace!

  • 我是Kubernetes的新手,他们的概念我不太清楚:云提供商。 我已经使用RKE(Rancher引擎)安装了我的库伯内特斯集群。 我的集群设置在rancher2的顶部。 我的节点是托管OVH服务器的虚拟机。 我设法让运行中的应用程序具有L7入口和ClusterIP服务,但每次我尝试使用L4负载平衡器时,负载平衡器都处于挂起状态。根据https://github.com/rancher/ranch

  • 寻找如何使用Javalambda函数,以便消费者可以处理供应商提供的所有对象,并在循环和检查时摆脱显式

  • 我无法访问静态内容(angular app),甚至无法访问简单的索引。来自spring boot的html文件。我一直收到404错误。Spring没有为我提供这些静态文件。自从升级到Spring Boot 2.2.4后,我就遇到了这个问题。我必须升级以应对Zip64问题。 我的application.properties里有这样一句话: 我也有自己的staticResourceConfigurat