【发布时间】:2018-12-12 13:22:39
【问题描述】:
在代码中,我从 Room.databaseBuilder 获得了一个实例,添加了一个回调,最后我构建了数据库。 打完电话后
this.mMovieDatabase =
this.mMovieDBPersistentBuilder.fallbackToDestructiveMigration().build();
我希望回调中的日志会被调用,但这并没有发生。当调用 insertTuplePersistentDB() 时,回调中的日志被调用。
我的问题:
1-为什么没有调用回调
this.mMovieDatabase =
this.mMovieDBPersistentBuilder.fallbackToDestructiveMigration().build();
这行代码什么时候执行的??
2-回调中提供的db对象的作用是什么,以及如何使用它们?它包含类似的方法
.update()
.delete()
.execSql()
code_1:
public void buildPersistentDB() {
Log.v(TAG_LOG, "->buildPersistentDB");
this.mMovieDBPersistentBuilder = Room
.databaseBuilder(getApplicationContext(),
MovieDatabase.class, ActMain.DATA_BASE_NAME);
this.mMovieDBPersistentBuilder.addCallback(new
RoomDatabase.Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
Log.w(TAG_LOG + "->onCreate", " buildPersistentDB->DB is
created, all tables has been created");
Log.w(TAG_LOG + "->onCreate", " buildPersistentDB->DB
db.getPath(): " + db.getPath());
Log.w(TAG_LOG + "->onCreate", " buildPersistentDB->DB
db.toString(): " + db.toString());
Log.w(TAG_LOG + "->onCreate", " buildPersistentDB->DB
db.isOpen(): " + db.isOpen());
Log.w(TAG_LOG + "->onCreate", " buildPersistentDB->DB
db.isReadOnly(): " + db.isReadOnly());
}
@Override
public void onOpen(@NonNull SupportSQLiteDatabase db) {
super.onOpen(db);
Log.w(TAG_LOG + "->onOpen", "
buildPersistentDB->onCreate\n");
Log.w(TAG_LOG + "->onOpen", " buildPersistentDB->DB has been
opened");
}
});
this.mMovieDatabase =
this.mMovieDBPersistentBuilder.fallbackToDestructiveMigration().build();
}
private void insertTuplePersistentDB(int recordNum) {
Log.v(TAG_LOG, "->insertTuplePersistentDB is called. recodNum: " +
recordNum);
Movie movie = new Movie();
for (int i = 1; i <= recordNum; i++) {
movie.setMovieId(String.valueOf(i));
movie.setMovieName("Movie_episode_" + String.valueOf(i));
mMovieDatabase.dao().insertOnlySingleMovie(movie);
}
}
【问题讨论】:
标签: android android-sqlite android-room