Не удалось подключиться к SQLite в React-Native

#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]
 

Я пробовал несколько способов, но не могу подключиться к нему.

  1. Перейдите непосредственно из папки www в папку «Ресурсы». Удалите приложение на телефоне и запустите его снова.
  2. Удалять SQLite.enablePromise(false);
  3. react-собственная ссылка react-собственная-sqlite-хранилище
  4. компакт-диск android amp;amp; ./gradlew чистый
  5. Выполните шаг для вызова 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 , и база данных, наконец, открывается.

Я не уверен, что этот путь является абсолютным. Я надеюсь, что это было временно, так как это было на пути из учебника.