在Android上播种GreenDao数据库



我第一次在Android项目中使用GreenDAO,并且想知道如何为第一次使用的用户播种数据库?例如,我有一个表,想要代表用户插入5行。

同样,我可能会在未来的更新中添加新表并将数据种子到这些表中,但仍然希望将五行插入到第一个表中,即使用户正在安装新版本的方案。

我最初的想法是在我的App.onCreate()方法中做到这一点,然后在SharedPreferences中设置一个标志,无论种子是否已经制作,但它让我感到困惑,我找不到一个更实用的方法。

任何帮助感激,谢谢!

我遇到了同样的问题,搜索了网页和GreenDAO的文档,但没有找到任何可靠的

所以我写了一段代码在应用程序的第一次运行中运行。为此,我需要检查这是否是我的应用程序第一次启动。为了做到这一点,我推荐这个答案。您可以在这里看到答案的代码:

public static void checkFirstRun(Context context) {
    final String PREFS_NAME = "TickTockPrefs";
    final String PREF_VERSION_CODE_KEY = "version_code";
    final int DOESNT_EXIST = -1;
    // Get current version code
    int currentVersionCode = 0;
    try {
        currentVersionCode = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;
    } catch (android.content.pm.PackageManager.NameNotFoundException e) {
        // handle exception
        e.printStackTrace();
        return;
    }
    // Get saved version code
    SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
    int savedVersionCode = prefs.getInt(PREF_VERSION_CODE_KEY, DOESNT_EXIST);
    // Check for first run or upgrade
    if (currentVersionCode == savedVersionCode) {
        // This is just a normal run
        return;
    } else if (savedVersionCode == DOESNT_EXIST) {
        // TODO This is a new install (or the user cleared the shared preferences)
        seed(context);
    } else if (currentVersionCode > savedVersionCode) {
        // TODO This is an upgrade
    }
    // Update the shared preferences with the current version code
    prefs.edit().putInt(PREF_VERSION_CODE_KEY, currentVersionCode).apply();
}

在seed方法中,你可以写任何你想要插入的内容。例如,我有一个"Person"实体,我想用数据预填充它:

public static void seed(Context context) {
    DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "your-db", null);
    SQLiteDatabase db = helper.getWritableDatabase();
    DaoMaster daoMaster = new DaoMaster(db);
    DaoSession daoSession = daoMaster.newSession();
    Person person = new Person();
    person.setName("Jason");
    person.setFamily("Bourne");
    PersonDao personDao = daoSession.getPersonDao();
    personDao.insert(person);
}

注意,如果你想插入一个实体列表,请使用insertInTx()方法而不是insert()。你可以在这里看到不同之处。

我知道这是不同于ORM种子方法,但似乎没有其他的选择,除了你自己操作greenDAO代码。

相关内容

  • 没有找到相关文章

最新更新