Android Room库,如何加载预填充的SQLite二进制文件?

时间:2019-03-22 08:52:00

标签: sqlite android-room

我有 SQLite 数据库,它的大小较小(〜4 Mb ),但是包含〜50.000行。 该数据库仅被查询,无需数据操作。

房间持久性库用于管理数据检索

已经工作了多年的是以下内容

@Database(entities = {all_my_entities},version = my_version)
public abstract class IbDatabase extends RoomDatabase {

private static MyDatabase instance = null;

    public static synchronized MyDatabase getInstance(Context context){

    if(isFirstTime()) {
        try {

            context.openOrCreateDatabase("dbname",0, null);
            File dbPath = context.getDatabasePath("dbname");

            InputStream myInput = context.getAssets().open("dbassetname");
            OutputStream myOutput = new FileOutputStream(dbPath);

           // ... read and write ...    
           // ... close the stream

            setIsFristTimeFalse();

        } catch (Exception e) {
            //...
        }
    }

    if(instance == null){
        try {

            instance = Room.databaseBuilder(context.getApplicationContext(),
                    MyDatabase.class, "dbname"  )
                    .allowMainThreadQueries()
                   // .addCallback(roomCallback)
                    .build();
        } catch (java.lang.IllegalStateException e){
            //...
        }
    }

    return instance;
}

现在,在装有Android 9的Pixel 2,3设备上(据我所知 仅适用于这些功能),此功能不再有效。执行查询时,会显示错误“找不到表”。

一个可行的解决方案是将所有SQL插入项放入onCreate回调中,但这需要大约10秒钟,而复制二进制文件需要<< 1 s

是否存在一种可靠的方式来复制二进制文件,或者至少减少到初始加载时间

感谢您的帮助

0 个答案:

没有答案