Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓系统-简单/高效地维护;“累计金额”;对于SQLite列_Android_Sqlite_Android Contentprovider_Cumulative Sum - Fatal编程技术网

Android 安卓系统-简单/高效地维护;“累计金额”;对于SQLite列

Android 安卓系统-简单/高效地维护;“累计金额”;对于SQLite列,android,sqlite,android-contentprovider,cumulative-sum,Android,Sqlite,Android Contentprovider,Cumulative Sum,在SQLite中维护特定数据列的“累积和”的最佳方法是什么?我在网上找到了几个例子,但我不能100%确定如何将这些方法集成到我的ContentProvider中 在以前的应用程序中,我尝试自己维护累积数据,每次向表中插入新数据时都会更新数据。例如,在下面的示例代码中,每次我添加一个值为score的新记录时,我都会根据其在前一行中的值手动更新cumulative_score的值 _id score cumulative_score 1 100 100 2 50

在SQLite中维护特定数据列的“累积和”的最佳方法是什么?我在网上找到了几个例子,但我不能100%确定如何将这些方法集成到我的
ContentProvider

在以前的应用程序中,我尝试自己维护累积数据,每次向表中插入新数据时都会更新数据。例如,在下面的示例代码中,每次我添加一个值为
score
的新记录时,我都会根据其在前一行中的值手动更新
cumulative_score
的值

_id   score   cumulative_score
1     100     100
2     50      150
3     25      175
4     25      200
5     10      210
然而,这远远不够理想,在处理包含许多列的表时会变得非常混乱。是否有一种方法可以在每次我在表中插入/更新记录时自动更新累积数据?如何将其集成到我的
ContentProvider
实现中


我知道一定有办法做到这一点。。。我只是不知道怎么做。谢谢

最简单的方法可能是使用SQLite触发器。这是我所知道的最接近的 从“自动化”到“自动化”。只要有一个插入触发器,它接受上一个 累计总和,添加当前分数并将其存储在新行的累计值中 总和类似这样的内容(假设您订购的列是
\u id
):

确保触发器和原始插入件位于同一位置 交易对于
score
列的任意更新,您必须 必须实现一个递归触发器,以某种方式找到下一个最高的id(可能通过按最小id选择) 在id大于当前id的行集合中),并更新其 累计金额

如果您反对使用触发器,您可以在
insert
update
方法中的ContentProvider手动更新 你几乎被安卓上的SQLite锁定了,我看不出有什么理由不这么做 使用触发器


我假设你想把它作为一个优化,否则你只需计算需求总和(<代码> O(n)<代码> VS <代码> O(1)< /COD>,所以你必须考虑到“代码< N>代码>有多大,你需要多少次和?”p> 最简单的方法可能是使用SQLite触发器。这是我所知道的最接近的 从“自动化”到“自动化”。只要有一个插入触发器,它接受上一个 累计总和,添加当前分数并将其存储在新行的累计值中 总和类似这样的内容(假设您订购的列是
\u id
):

确保触发器和原始插入件位于同一位置 交易对于
score
列的任意更新,您必须 必须实现一个递归触发器,以某种方式找到下一个最高的id(可能通过按最小id选择) 在id大于当前id的行集合中),并更新其 累计金额

如果您反对使用触发器,您可以在
insert
update
方法中的ContentProvider手动更新 你几乎被安卓上的SQLite锁定了,我看不出有什么理由不这么做 使用触发器

我假设你想把它作为一个优化,否则你只需计算需求总和(<代码> O(n)<代码> VS <代码> O(1)< /COD>,所以你必须考虑到“代码< N>代码>有多大,你需要多少次和?”p>
CREATE TRIGGER calc_cumulative_score AFTER INSERT ON tablename FOR EACH ROW
BEGIN
    UPDATE tablename SET cumulative_score =
        (SELECT cumulative_score
         FROM tablename
         WHERE _id = (SELECT MAX(_id) FROM tablename))
        + new.score
    WHERE _id = new._id;
END