使用DBFlow在查找表中初始化数据的正确方法是什么?

时间:2016-03-14 19:08:07

标签: android dbflow

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

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

我已经阅读了迁移文档,这些文档不仅在语法上过时了,因为" database ="已更改为" databaseName ="在注释中,但也没有提到从无数据库迁移到版本"初始"。我发现issue声称迁移0可用于此目的,但此时我无法进行任何迁移。

非常感谢任何帮助。该项目是@ Github

2 个答案:

答案 0 :(得分:1)

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

初始化数据库的正确方法(类似于SQLiteOpenHelper的onCreate(db)回调是创建Migration objectBaseMigration扩展version=0,然后添加以下内容Application类中的onCreate()(或者在您进行DBFlow初始化的任何地方):

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

保存模型

答案 1 :(得分:0)

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

然后创建该类的一些对象并在其上调用.save()

您可以查看the library's documentation中的示例。