Android SQLite更新查询优化

Android SQLite更新查询优化,android,performance,android-sqlite,Android,Performance,Android Sqlite,我的部分功能需要在每一行中更新一个值(只有在用户选择某个设置时才会很少发生) 问题是,查询需要几分钟才能执行(最多),而且只有269条测试记录。有什么方法可以优化它吗 String allRecords = "SELECT id, weight FROM Workout_Entry"; Cursor cursor = db.rawQuery(allRecords, null); int rows = cursor.getCount(); int id;

我的部分功能需要在每一行中更新一个值(只有在用户选择某个设置时才会很少发生)

问题是,查询需要几分钟才能执行(最多),而且只有269条测试记录。有什么方法可以优化它吗

    String allRecords = "SELECT id, weight FROM Workout_Entry";

    Cursor cursor = db.rawQuery(allRecords, null);

    int rows = cursor.getCount();

    int id;
    double weight;

    try
    {
        if (cursor.moveToFirst())
        {
            do
            {
                for (int i = 0; i < rows; i++)
                {
                    id = cursor.getInt(0);
                    weight = cursor.getInt(1) / 2.2;

                    String strFilter = "id = " + id;
                    ContentValues args = new ContentValues();
                    args.put("weight", weight);

                    db.update("Workout_Entry", args, strFilter, null);

                }

            } while (cursor.moveToNext());
        }
    } finally
    {
        cursor.close();
    }

    (db).close();
String allRecords=“从训练项目中选择id、体重”;
Cursor=db.rawQuery(allRecords,null);
int rows=cursor.getCount();
int-id;
双倍重量;
尝试
{
if(cursor.moveToFirst())
{
做
{
对于(int i=0;i

谢谢

只需将工作推送到数据库引擎,而不是一次提取一行数据并每次启动一个新的更新查询。将代码替换为以下内容:

db.execSQL("UPDATE Workout_Entry SET weight=weight/2.2");

此外,由于这似乎是一种度量/帝国单位转换,考虑将数据保持在一种格式的数据库中,并转换/格式化为适当的单元用于显示目的。

< P>只需将工作推到数据库引擎,而不是每次将数据拖出一行,每次启动一个新的更新查询。将代码替换为以下内容:

db.execSQL("UPDATE Workout_Entry SET weight=weight/2.2");

此外,由于这似乎是一种度量/帝国单位转换,考虑将数据保持在一种格式的数据库中,并转换/格式化为适当的单元用于显示目的。

< P>只需将工作推到数据库引擎,而不是每次将数据拖出一行,每次启动一个新的更新查询。将代码替换为以下内容:

db.execSQL("UPDATE Workout_Entry SET weight=weight/2.2");

此外,由于这似乎是一种度量/帝国单位转换,考虑将数据保持在一种格式的数据库中,并转换/格式化为适当的单元用于显示目的。

< P>只需将工作推到数据库引擎,而不是每次将数据拖出一行,每次启动一个新的更新查询。将代码替换为以下内容:

db.execSQL("UPDATE Workout_Entry SET weight=weight/2.2");

此外,由于这似乎是某种度量/帝国单位转换,考虑将数据保持在一种格式的数据库中,并转换/格式化为适当的单元用于显示目的。

您应该学会使用事务-您可以看到在这方面使用的例子。


还显示了不使用事务的影响。

您应该学会使用事务-您可以在此示例中看到如何使用事务的示例


还显示了不使用事务的影响。

您应该学会使用事务-您可以在此示例中看到如何使用事务的示例


还显示了不使用事务的影响。

您应该学会使用事务-您可以在此示例中看到如何使用事务的示例


还显示了不使用事务的影响。

好的,我已经意识到我的错误。我对每条记录都有一个
do-while
循环,其中有一个
for循环
,循环了
x
多次,其中
x
是现有记录的数量

所以它经历了
O(n)²
次而不是
O(n)


感谢那些回复的人!我发现你的两条评论都很有用

好吧,我已经意识到我的错误了。我对每条记录都有一个
do-while
循环,其中有一个
for循环
,循环了
x
多次,其中
x
是现有记录的数量

所以它经历了
O(n)²
次而不是
O(n)


感谢那些回复的人!我发现你的两条评论都很有用

好吧,我已经意识到我的错误了。我对每条记录都有一个
do-while
循环,其中有一个
for循环
,循环了
x
多次,其中
x
是现有记录的数量

所以它经历了
O(n)²
次而不是
O(n)


感谢那些回复的人!我发现你的两条评论都很有用

好吧,我已经意识到我的错误了。我对每条记录都有一个
do-while
循环,其中有一个
for循环
,循环了
x
多次,其中
x
是现有记录的数量

所以它经历了
O(n)²
次而不是
O(n)


感谢那些回复的人!我发现你的两条评论都很有用

事实上,我同意这是针对特定问题的更精确的解决方案。事实上,我同意这是针对特定问题的更精确的解决方案。事实上,我同意这是针对特定问题的更精确的解决方案