我第一次将 GreenDAO 用于 Android 项目,想知道如何为初次使用的用户播种数据库?比如说我有一个表,想要代表用户插入 5 行。
此外,我可能会在未来的更新中添加新表并将数据种子添加到这些表中,但仍然希望将五行插入到第一个表中,即使用户正在安装更新版本的方案。
我最初的想法是用我的方法来做App.onCreate()
,然后设置一个标志,SharedPreferences
表明种子是否已经制作,但它让我很烦恼,我找不到更实用的方法。
任何帮助表示赞赏,谢谢!
我第一次将 GreenDAO 用于 Android 项目,想知道如何为初次使用的用户播种数据库?比如说我有一个表,想要代表用户插入 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();
}
在种子方法中,您可以编写任何您想插入的内容。例如,假设我有一个“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 代码。