使用 DBFlow 在查找 table 中初始化数据的正确方法是什么?
What is the correct way to initialize data in a lookup table using DBFlow?
我是第一次尝试实现 DBFlow,我想我可能只是不明白。我不是高级 Android 开发人员,但我创建了一些应用程序。过去,我只会创建一个扩展 SQLiteOpenHelper 的 "database" 对象,然后覆盖回调方法。
在 onCreate 中,一旦创建了所有表,我将使用硬编码 SQL 字符串填充任何查找数据:db.execSQL(Interface.INSERT_SQL_STRING);
。因为我很懒,在 onUpgrade()
和 onDowngrade()
中,我会直接删除表并调用 onCreate(db);
.
我已经通读了迁移文档,它不仅在语法上似乎已经过时,因为 "database =" 已在注释中更改为 "databaseName =",而且也没有提到从没有数据库迁移到版本 "initial"。我发现一个 issue 声称迁移 0 可用于此目的,但此时我无法使任何迁移工作。
如有任何帮助,我们将不胜感激。项目是@Github.
要在 DBFlow 中初始化数据,您所要做的就是为扩展 BaseModel
的对象模型创建一个 class,并为 class 使用 @Table
注释.
然后创建 class 的一些对象并对其调用 .save()
。
您可以查看 the library's documentation 中的示例。
下面的答案是正确的,但我相信这个答案和问题很快就会 "deprecated" 与大多数第三方 ORM 一起。 Google 的新 Room Persistence Library (Yigit's Talk) will be preferred in most cases. Although DBFlow will certainly carry on (Thank You Andrew) 在许多项目中,这里是将人们重定向到最新 "best practice" 的好地方,因为这个特定问题 was/is 适合那些刚接触DBFlow.
初始化数据库的正确方法(类似于 SQLiteOpenHelper 的 onCreate(db)
回调是使用 version=0
创建一个 Migration object that extends BaseMigration,然后将以下内容添加到 onCreate()
在应用程序中 class(或任何您进行 DBFlow 初始化的地方):
FlowManager.init(new FlowConfig.Builder(this).build());
FlowManager.getDatabase(BracketsDatabase.NAME).getWritableDatabase();
在迁移 Class 中,您覆盖 migrate()
,然后您可以使用事务管理器来初始化查找数据或其他初始数据库内容。
迁移Class:
@Migration(version = 0, database = BracketsDatabase.class)
public class DatabaseInit extends BaseMigration {
private static final String TAG = "classTag";
@Override
public void migrate(DatabaseWrapper database) {
Log.d(TAG, "Init Data...");
populateMethodOne();
populateMethodTwo();
populateMethodThree();
Log.d(TAG, "Data Initialized");
}
要填充数据,请使用您的模型创建记录并使用事务管理器通过 FlowManager.getDatabase(AppDatabase.class).getTransactionManager()
.getSaveQueue().addAll(models);
保存模型
我是第一次尝试实现 DBFlow,我想我可能只是不明白。我不是高级 Android 开发人员,但我创建了一些应用程序。过去,我只会创建一个扩展 SQLiteOpenHelper 的 "database" 对象,然后覆盖回调方法。
在 onCreate 中,一旦创建了所有表,我将使用硬编码 SQL 字符串填充任何查找数据:db.execSQL(Interface.INSERT_SQL_STRING);
。因为我很懒,在 onUpgrade()
和 onDowngrade()
中,我会直接删除表并调用 onCreate(db);
.
我已经通读了迁移文档,它不仅在语法上似乎已经过时,因为 "database =" 已在注释中更改为 "databaseName =",而且也没有提到从没有数据库迁移到版本 "initial"。我发现一个 issue 声称迁移 0 可用于此目的,但此时我无法使任何迁移工作。
如有任何帮助,我们将不胜感激。项目是@Github.
要在 DBFlow 中初始化数据,您所要做的就是为扩展 BaseModel
的对象模型创建一个 class,并为 class 使用 @Table
注释.
然后创建 class 的一些对象并对其调用 .save()
。
您可以查看 the library's documentation 中的示例。
下面的答案是正确的,但我相信这个答案和问题很快就会 "deprecated" 与大多数第三方 ORM 一起。 Google 的新 Room Persistence Library (Yigit's Talk) will be preferred in most cases. Although DBFlow will certainly carry on (Thank You Andrew) 在许多项目中,这里是将人们重定向到最新 "best practice" 的好地方,因为这个特定问题 was/is 适合那些刚接触DBFlow.
初始化数据库的正确方法(类似于 SQLiteOpenHelper 的 onCreate(db)
回调是使用 version=0
创建一个 Migration object that extends BaseMigration,然后将以下内容添加到 onCreate()
在应用程序中 class(或任何您进行 DBFlow 初始化的地方):
FlowManager.init(new FlowConfig.Builder(this).build());
FlowManager.getDatabase(BracketsDatabase.NAME).getWritableDatabase();
在迁移 Class 中,您覆盖 migrate()
,然后您可以使用事务管理器来初始化查找数据或其他初始数据库内容。
迁移Class:
@Migration(version = 0, database = BracketsDatabase.class)
public class DatabaseInit extends BaseMigration {
private static final String TAG = "classTag";
@Override
public void migrate(DatabaseWrapper database) {
Log.d(TAG, "Init Data...");
populateMethodOne();
populateMethodTwo();
populateMethodThree();
Log.d(TAG, "Data Initialized");
}
要填充数据,请使用您的模型创建记录并使用事务管理器通过 FlowManager.getDatabase(AppDatabase.class).getTransactionManager()
.getSaveQueue().addAll(models);