Я пытаюсь использовать предварительно заполненную базу данных SQLite
для моего собственного приложения. Я использую Expo и функцию downloadAsync()
для загрузки моей БД из папки с активами. Это работает, как и ожидалось, на IOS, так как я могу загрузить БД и получить данные.
На Android, однако я просто не могу заставить это работать. Файл db находится во внутреннем хранилище моего эмулятора, но каждый раз, когда я пытаюсь получить данные, возникает ошибка, поскольку «такой таблицы нет».
Я предполагаю, что SQLite неправильно выполняет поиск для моей базы данных, но вместо этого создает новую, где мои таблицы явно отсутствуют.
Я пытаюсь уже более 7 часов, поэтому я ценю любую помощь.
Структура папок :
App.js
-assets
--db
---db.db
-src
--connection
---connectionClass
Приложение. js
const App = () => {
const [dbLoaded, setDbLoaded] = useState(false);
if(!dbLoaded){
downloadDB().then((value) => setDbLoaded(value));
return <></>
} else {
return (
<Navigation/>
);
}
};
ConnectionClass. js
export const downloadDB = async () => {
await FileSystem.deleteAsync(`${FileSystem.documentDirectory}SQLite`, {idempotent : true});
await FileSystem.makeDirectoryAsync(`${FileSystem.documentDirectory}SQLite`, {intermediates: true });
return await FileSystem.downloadAsync(
Asset.fromModule(require('../../assets/db/WaKanji.db')).uri,
`${FileSystem.documentDirectory}SQLite/WaKanji.db`
).then(({status}) => {
if(status === 200){
return true
}
return false
}).catch(error => {
console.log('Err\n' + error);
return false;
});
};