Библиотека Android Room, как загрузить предварительно заполненный двоичный файл SQLite? - PullRequest
0 голосов
/ 22 марта 2019

У меня есть SQLite база данных, небольшого размера ( ~ 4 МБ ), но содержащая ~ 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;
}

Теперь, на устройствах Pixel 2,3 с Android 9 (и, насколько мне известно, только на тех), это не работаетбольше .Когда запрос выполняется, он выдает ошибку «таблица не найдена».

Рабочим решением является помещение всех вставок SQL в обратный вызов onCreate, но это занимает ~ 10 секунд, а копирование двоичного файла занимает <<1 с </p>

Есть ли надежный способ скопировать двоичный файл или хотя бы сократить время начальной загрузки ?

Спасибо за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...