Я попытался открыть базу данных 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,
Вы не можете открыть базу данных SQLite для записи, если она хранится в папке Assets. Как правило, при запуске приложение проверяет, есть ли у него база данных SQLite в собственной папке /data/data/database. Если нет, он копирует базу данных из папки Assets в папку /data/data/database, а затем открывает эту копию для записи.
Изменения, внесенные в базу данных в папке /data/data/database, сохранятся, даже если приложение будет обновлено. Но оно будет удалено, если пользователь удалит приложение. Затем приложению придется снова сделать копию базы данных.
Вам нужно добавить код в свое приложение, которое, прежде чем выполнять какой-либо код для чтения или записи в базу данных, вызывает метод, чтобы увидеть, существует ли база данных в папке /data/data/database, и если да, откройте ее. Если его нет, то скопируйте базу данных из папки Assets в папку /data/data/database и откройте ее оттуда.
Возможно, проблема была в конфигурации. Проблема была решена с тем же кодом. Спасибо за помощь.
Я пытаюсь использовать базу данных только для операции записи. Итак, скопируйте ли приведенный выше код Recipe.db из каталога активов в /data/data/database, чтобы я мог выполнить операцию чтения в базе данных Recipe? Я удалил базы данных из папки /data/data/database и запустил приложение, но проблема осталась.