我第一次尝试实现DBFlow,我想我可能不会得到它。我不是高级Android开发人员,但我创建了一些应用程序。在过去,我只想创建一个数据库"扩展SQLiteOpenHelper的对象,然后覆盖回调方法。
在onCreate中,一旦创建了所有表,我将使用硬编码的SQL字符串填充任何查找数据:db.execSQL(Interface.INSERT_SQL_STRING);
。因为我懒惰,在onUpgrade()
和onDowngrade()
中,我只会删除表并调用onCreate(db);
。
我已经阅读了迁移文档,这些文档不仅在语法上过时了,因为" database ="已更改为" databaseName ="在注释中,但也没有提到从无数据库迁移到版本"初始"。我发现issue声称迁移0可用于此目的,但此时我无法进行任何迁移。
非常感谢任何帮助。该项目是@ Github。
答案 0 :(得分:1)
下面的答案是正确的,但我相信这个答案和问题将很快与大多数第三方的ORM一起“弃用”。在大多数情况下,Google会选择新的Room Persistence Library(Yigit's Talk)。虽然DBFlow肯定会在许多项目中继续(感谢Andrew),但这里是一个重新引导人们使用最新“最佳实践”的好地方,因为这个特定的问题是针对那些刚接触DBFlow的人。
初始化数据库的正确方法(类似于SQLiteOpenHelper的onCreate(db)
回调是创建Migration object,BaseMigration扩展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中的示例。