如何使用onEpgrade()方法使用SQLiteAssetHelper升级我的数据库?

时间:2017-08-29 12:25:10

标签: android database sqlite

我正在使用SQLiteAssetHelper类构建一个带有预加载数据库问题的测验应用程序。我的应用程序在数据库中已经有300个问题测验正常工作。但我无法弄清楚如何升级数据库(向表中添加新的测验问题而不是更改结构或删除旧表中任何已保存的用户数据)。 我已经安装了SQLite比较,如GitHub中的SQLiteAssetHelper文档所述,但是它为我生成了一个空的SQL文件,我不知道为什么!所以我尝试了下面的代码并尝试插入两行仅用于测试数据库是否会将我的android从版本1升级到2但不幸的是,它没有帮助。我已经以这种形式到处查找,但与SQLiteAsseHelper类相关的信息非常少而且不够清晰。我这几天正在完成我的测验应用程序,我在想如果我无法更新应用程序那么它将毫无用处。请告诉我如何在不更改以前存在的行的情况下将新行插入旧数据库,因为我保存用户在表格中回答。

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

public class DatabaseOpenHelper extends SQLiteAssetHelper {

    private static final String DATABASE_NAME = "quizMe_1.db";
    private static final int DATABASE_VERSION = 2;

    public DatabaseOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }


@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2){
        insertValues(db,"من اكثر فريق عالمي فوزا بكأس العالم ؟","فرنسا","ألمانيا","أيطاليا","البرازيل","0","4","0");
        insertValues(db,"نبي سميت سورة من القران بأسمه ؟","عيسى","موسى","إبراهيم","نوح","0","3","0");
    }
}

private static void insertValues(SQLiteDatabase db, String question,String ans1, String ans2, String ans3, String ans4,
                                 String right, String userAsn, String field) {
    ContentValues questionValues = new ContentValues();
    questionValues.put("question", question);
    questionValues.put("answer_1", ans1);
    questionValues.put("answer_2", ans2);
    questionValues.put("answer_3", ans3);
    questionValues.put("answer_4", ans4);
    questionValues.put("right_answer", right);
    questionValues.put("user_answer", userAsn);
    questionValues.put("field", field);
    db.insert("quiz", null, questionValues);
}


}

1 个答案:

答案 0 :(得分:0)

我不确定我们是否可以更新资产文件夹中的数据库文件,但不知怎的,我希望我能给你一个调试解决方案的想法。在尝试以下解决方案之前,我们需要确保是否可以更新数据库文件中的值。对于该更新,按代码更新表中的值并对其进行测试。例如:在测验应用中更改问题1的答案,并通过运行应用程序检查值是否已更新。如果值已更新,那么我们可以插入新值,然后尝试下面的值,否则我们无法更新数据库文件中的值。

希望您知道只有在我们更新app.i.e.,从较低版本到最新版本时才会调用onUpgrade mehtod。我不确定你是如何测试你的代码,如果你已经通过以下方式测试忽略它,请尝试它。首先从Playstore下载并安装应用程序,然后为最新版本生成已签名的apk(确保数据库版本已更新)安装apk在onupgrade方法中放入一个toast并检查它是否已进入该条件。如果出现吐司,请检查您的插入代码,否则更改下面的条件并尝试

if(newVersion == 2)

希望这有用:)