#android #react-native #sqlite
Вопрос:
Я предварительно определил базу данных sqlite с помощью браузера БД для SQLite. Я поместил файл бд в путь root/android/app/src/main/assets/www/mysqlite.db
, к сожалению, я не могу подключиться. Ниже приведены мои версии.
Samsung Galaxy Android 11,
"react-native-sqlite-storage": "^6.0.1",
"react": "17.0.2",
"react-native": "0.65.1",
"@react-navigation/native": "^6.0.4",
Мой сценарий(я делаю его упрощенным):
import SQLite from 'react-native-sqlite-storage';
SQLite.DEBUG(true);
SQLite.enablePromise(false);
export const AppSignIn = (props) => {
const OpenDB = () => {
return new Promise((resolve, reject) => {
global.db = SQLite.openDatabase(
{
name: 'mysqlite.db',
createFromLocation: '~mysqlite.db',
},
() => {
console.log("Connection success!");
},
error => {
console.log(error);
reject();
});
resolve();
});
}
const ReadDB = () => {
return new Promise((resolve) => {
global.db.transaction(function (tx) {
tx.executeSql(
// The rest of the trx
);
resolve();
});
});
}
async function ConnectDB() {
return new Promise(async (resolve, reject) => {
await OpenDB()
.then(async () => {
await ReadDB()
.then(() => {
console.log('YEAY FINALLY');
resolve();
})
})
.catch((error) => {
console.log(error);
reject();
});
});
}
React.useEffect(() => {
(async () => {
await ConnectDB()
.then()
.catch();
})();
}, []);
}
В журнале записывается:
LOG OPEN database: mysqlite.db
LOG SQLite.open({"name":"mysqlite.db","createFromLocation":"~mysqlite.db","dblocation":"nosync","assetFilename":"~mysqlite.db"})
LOG new transaction is waiting for open operation
LOG Phone connected? true, Server connected? true
LOG OPEN database: mysqlite.db failed, aborting any pending transactions
LOG [Error: Could not open database]
Я пробовал несколько способов, но не могу подключиться к нему.
- Перейдите непосредственно из папки www в папку «Ресурсы». Удалите приложение на телефоне и запустите его снова.
- Удалять
SQLite.enablePromise(false);
- react-собственная ссылка react-собственная-sqlite-хранилище
- компакт-диск android amp;amp; ./gradlew чистый
- Выполните шаг для вызова opendatabase
Ответ №1:
Попробуйте переместить свой файл для Android из root/android/app/src/main/assets/www/mysqlite.db
-> root/android/app/src/main/assets/mysqlite.db
Комментарии:
1. Уже сделано на основе моего поста о том, что я попробовал на #1
Ответ №2:
Я наконец — то смог запустить его на Samsung Galaxy с Android 11. Я попробовал Redmi6 с Android 9, и он может работать.
Я удалил react-native.config.js которые содержат SQLite
module.exports = {
dependencies: {
"react-native-sqlite-storage": {
platforms: {
android: {
sourceDir: "../node_modules/react-native-sqlite-storage/platforms/android-native",
packageImportPath: "import io.liteglue.SQLitePluginPackage;",
packageInstance: "new SQLitePluginPackage()"
}
}
}
}
};
Я также удаляю модуль импорта import io.liteglue.SQLitePluginPackage;
MainApplication.java
, и база данных, наконец, открывается.
Я не уверен, что этот путь является абсолютным. Я надеюсь, что это было временно, так как это было на пути из учебника.