1

我第一次尝试实现 DBFlow,我想我可能只是不明白。我不是高级 Android 开发人员,但我创建了一些应用程序。过去,我只会创建一个扩展 SQLiteOpenHelper 的“数据库”对象,然后覆盖回调方法。

在 onCreate 中,一旦创建了所有表,我将使用硬编码的 SQL 字符串填充任何查找数据:db.execSQL(Interface.INSERT_SQL_STRING);. 因为我很懒,在onUpgrade()and中onDowngrade(),我只会 DROP 表并调用onCreate(db);.

我已经阅读了迁移文档,该文档不仅在语法上似乎已经过时,因为注释中的“database =”已更改为“databaseName =”,而且也没有提到从无数据库迁移到“初始”版本。我发现了一个声称迁移 0 可用于此目的的问题,但此时我无法让任何迁移工作。

任何帮助将不胜感激。该项目是@Github

4

2 回答 2

1

下面的答案是正确的,但我相信这个答案和问题很快就会与大多数第三方 ORM 一起被“弃用”。在大多数情况下, Google 的新Room Persistence Library ( Yigit's Talk ) 将是首选。尽管 DBFlow 肯定会在许多项目中继续使用(谢谢Andrew),但这里是一个很好的地方,可以将人们重新引导到最新的“最佳实践”,因为这个特定的问题是/适合那些刚接触 DBFlow 的人的。

初始化数据库的正确方法(类似于 SQLiteOpenHelper 的onCreate(db)回调是创建一个使用 扩展BaseMigrationMigration 对象,然后将以下内容添加到Application 类中(或您正在执行 DBFlow 初始化的任何地方):version=0onCreate()

FlowManager.init(new FlowConfig.Builder(this).build());
FlowManager.getDatabase(BracketsDatabase.NAME).getWritableDatabase();

在迁移类中,您覆盖migrate()然后可以使用事务管理器来初始化查找数据或其他初始数据库内容。

迁移类:

@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);

于 2016-06-14T18:52:46.350 回答
0

要在 DBFlow 中初始化数据,您所要做的就是为您的对象模型创建一个类,该类扩展BaseModel并使用@Table该类的注释。

然后创建该类的一些对象并调用.save()它们。

您可以查看库文档中的示例。

于 2016-03-14T19:38:46.630 回答