【发布时间】:2017-08-29 12:25:09
【问题描述】:
我正在使用 SQLiteAssetHelper 类构建一个带有预加载数据库问题的测验应用程序。我的应用程序运行良好,数据库中已有 300 个问题测验。但我不知道如何升级数据库(向表中添加新的测验问题,而不是更改结构或删除旧表中保存的任何用户数据)。 我已经按照 GitHub 中 SQLiteAssetHelper 的文档中的描述安装了 SQLite compare,但它为我生成了一个空的 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);
}
}
【问题讨论】:
-
不完全是一个答案,但我想你会知道检查这个准备类似的查询并使用它来升级stackoverflow.com/questions/13041062/…
-
除了“没有帮助”之外,具体的问题是什么?请注意,如果您安装一个全新的应用程序,它只会安装提供的数据库并且不会调用
onUpgrade()。捆绑的数据库必须已经是最新版本。 -
如果我将应用程序安装给新用户,那很好,因为应用程序也会预加载新数据库。但是如果用户已经安装了版本 1 并且他的数据库包含并保存了他对测验问题的正确和错误答案怎么办。在那个 senario 应用程序版本 2 中应该只将新的测验问题添加到他的数据库中,而不是删除、更改或添加任何东西。
-
您的
insertValues()呼叫看起来不错。他们不工作吗? -
代码似乎没有被调用。 onUpgrade() 方法看起来还没有被调用。在 SqliteOpenHeplper 类中,您在 onCreate() 方法中调用 onUpgrade,但在这里我有这个扩展 SQLiteOpenHelper 类的 SqliteAssetHelper 类