SQlite db恢复到默认值 - android

时间:2014-08-11 08:14:11

标签: android sqlite default

我创建了一个游戏,用户可以在其中学习英语单词及其含义。每个单词都有它的翻译,知识水平,这个词有多少次出现以及其他... 所有这些数据都保存在数据库中。 这就是我想让用户选择删除游戏的所有数据(只有时间,知识杠杆和其他stuf,而不是单词和翻译)。

我尝试遍历db中的所有行并设置值(大部分为0)。 问题是大约有6000个单词,所有单词大约需要20秒。

有更快捷的方式,我可以吗?

我做的是:

public void resetData() {

    Cursor c = ourDatabase.query(DATABASE_TABLE, null, null, null, null, null, null);
    ContentValues cvUpdate = new ContentValues();
    cvUpdate.put(KEY_TURNS, 0);
    cvUpdate.put(KEY_KNOWN, 1);
    cvUpdate.put(KEY_KNOWLEDGE, 0);
    cvUpdate.put(KEY_SHOWN, 0);
    cvUpdate.put(KEY_CURRECTANSWER, 0);
    cvUpdate.put(KEY_WRONGANSWER, 0);

    int i = 0;
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
        i++;
        StaticData.mw.wordList.get(i).resetWord();
        ourDatabase.update(DATABASE_TABLE, cvUpdate, KEY_ROWID + "=" + i, null);
        StaticData.dialog.setProgress(i);

    }    

}

1 个答案:

答案 0 :(得分:1)

如果不使用explicit transactions,则每个SQL命令都会获得自己的自动事务,这是占用运行时间的事务开销。

执行许多命令时,应将它们包装到单个事务中:

db.beginTransaction();
try {
    for (...)
        ...
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}

但是,如果要更新具有相同值的所有行,则可以使用单个命令执行此操作:

ourDatabase.update(DATABASE_TABLE, cvUpdate, null, null);