Использование базы данных PrePopulated SQlite в Android

Я попытался открыть базу данных Sqlite, используя приложение react-native для Android, но не смог открыть его, используя предварительно заполненную базу данных, хранящуюся в каталоге активов проекта.

Я удалил местоположение и createfromLocation из базы данных кода openDataBase, созданной на устройстве Android, которое было бы пустым без схемы и данных. Я могу заполнить данные из кода, но это не имеет никакого смысла. Итак, в чем может быть ошибка, которую я совершаю. Я что-то здесь упускаю?

Код (файл App.js):

 const db = SQLite.openDatabase(
      {
        name: 'Recipe.db',
        location: 'default',
        createFromLocation: '~Recipe.db',
      }

Журнал:

 OPEN database: Recipe.db
05-20 09:22:23.620  5975  6009 I ReactNativeJS: new transaction is waiting for open operation
05-20 09:22:23.629  5975  6009 I ReactNativeJS: OPEN database: Recipe.db failed, aborting any pending transactions
05-20 09:22:23.632  5975  6009 I ReactNativeJS: { [Error: Could not open database]
05-20 09:22:23.632  5975  6009 I ReactNativeJS:   code: 0,
05-20 09:22:23.632  5975  6009 I ReactNativeJS:   line: 100047,
05-20 09:22:23.632  5975  6009 I ReactNativeJS:   column: 27,

2
0
479
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете открыть базу данных SQLite для записи, если она хранится в папке Assets. Как правило, при запуске приложение проверяет, есть ли у него база данных SQLite в собственной папке /data/data/database. Если нет, он копирует базу данных из папки Assets в папку /data/data/database, а затем открывает эту копию для записи.

Изменения, внесенные в базу данных в папке /data/data/database, сохранятся, даже если приложение будет обновлено. Но оно будет удалено, если пользователь удалит приложение. Затем приложению придется снова сделать копию базы данных.

Я пытаюсь использовать базу данных только для операции записи. Итак, скопируйте ли приведенный выше код Recipe.db из каталога активов в /data/data/database, чтобы я мог выполнить операцию чтения в базе данных Recipe? Я удалил базы данных из папки /data/data/database и запустил приложение, но проблема осталась.

SGC 20.05.2019 18:08

Вам нужно добавить код в свое приложение, которое, прежде чем выполнять какой-либо код для чтения или записи в базу данных, вызывает метод, чтобы увидеть, существует ли база данных в папке /data/data/database, и если да, откройте ее. Если его нет, то скопируйте базу данных из папки Assets в папку /data/data/database и откройте ее оттуда.

Michael Dougan 20.05.2019 18:19

Возможно, проблема была в конфигурации. Проблема была решена с тем же кодом. Спасибо за помощь.

SGC 21.05.2019 16:38

Другие вопросы по теме