Android SQLite更新查询优化
我的部分功能需要在每一行中更新一个值(只有在用户选择某个设置时才会很少发生) 问题是,查询需要几分钟才能执行(最多),而且只有269条测试记录。有什么方法可以优化它吗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;
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)
感谢那些回复的人!我发现你的两条评论都很有用 事实上,我同意这是针对特定问题的更精确的解决方案。事实上,我同意这是针对特定问题的更精确的解决方案。事实上,我同意这是针对特定问题的更精确的解决方案