我的部分功能需要更新每一行中的值(当用户选择某个设置时,很少发生这种情况)。
麻烦的是,查询需要花费几分钟才能执行(充其量),并且只有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();
谢谢!
答案 0 :(得分:2)
只需将工作推送到数据库引擎,而不是一次将数据拉出一行并每次启动一个新的更新查询。用以下代码替换您的代码:
db.execSQL("UPDATE Workout_Entry SET weight=weight/2.2");
此外,由于这似乎是某种公制/英制单位转换,因此请考虑将数据保存在数据库中的一种格式中,并将/格式转换为适当的单位以供显示。
答案 1 :(得分:1)
您应该学会使用交易 - 您可以在此presentation of mine中看到如何使用交易的示例。
同时显示不使用交易的影响。
答案 2 :(得分:0)
好的,我意识到自己的错误。我为每条记录都有一个do while
循环,其中有for loop
循环x
多次,其中x
是现有记录的数量。
所以它经历了O(n)²
次,而不是O(n)
。
感谢那些回复的人!我发现你的两条评论都很有用。