Home > database >  Unable to connect to SQLite in React-Native
Unable to connect to SQLite in React-Native

Time:11-10

I have pre-defined sqlite database using DB Browser for SQLite. I have place the db file in the path root/android/app/src/main/assets/www/mysqlite.db, unfortunately I'm unable to connect. Below are my versioning.

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",

My script(I make it simplified):

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();
        })();
    }, []);
}

The log writes:

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]

I have tried several ways but I'm unable to connect to it.

  1. Move from www to assets folder directly. Uninstall app on phone and run again.
  2. Remove SQLite.enablePromise(false);
  3. react-native link react-native-sqlite-storage
  4. cd android && ./gradlew clean
  5. Follow step to opendatabase call

CodePudding user response:

Try moving your file for android from root/android/app/src/main/assets/www/mysqlite.db -> root/android/app/src/main/assets/mysqlite.db

CodePudding user response:

I finally able to run it on Samsung Galaxy with Android 11. I've tried on Redmi6 with Android 9 and it can run.

I've removing react-native.config.js which contain 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()"
                }
            }
        }
    }
};

I also remove the import module import io.liteglue.SQLitePluginPackage; in MainApplication.java and the database finally open.

I'm not sure if this way are absolute. I hope it was temporary as it oppose the way from the tutorial.

  • Related