簡體   English   中英

Expo SQLite 數據庫未在本機反應中初始化

[英]Expo SQLite Database isn't initialising in react native

我正在嘗試使用 expo 的 SQLite 為我的 react 本機應用程序創建數據庫,並遵循它的文檔,但我認為數據庫沒有初始化。

文檔: expo-sqlite

應用程序.js:

console.log("init () above");

init()
  .then(() => {
    console.log("DATABASE INITIALIZED");
  })
  .catch(() => {
    console.log("FAILED DATABSE INITIALIZATION", err);
  });

console.log("init () below");

//Nothing logs in console

安慰:

init () above
init () below
places: Array []

我將promise創建為init() ,如果它失敗則返回錯誤,當它解決時它會記錄成功消息DATABASE INITIALIZED 但我沒有得到任何 output。

助手/數據庫:

import * as SQLite from "expo-sqlite";

const db = SQLite.openDatabase("places.db");

export const init = () => {
  const promiseDB = new Promise((resolve, reject) => {
    db.transaction((tx) => {
      tx.executeSql(
        "CREATE TABLE PLACES IF NOT EXISTS places (id INTEGER PRIMARY KEY NOT NULL, title TEXT NOT NULL, imageUri TEXT NOT NULL, address TEXT NOT NULL, lat REAL NOT NULL, lng REAL NOT NULL)"
      );
      [],
        () => {
          resolve();
        },
        (_, err) => {
          reject(err);
        };
    });
  });
  return promiseDB;
};


我沒有收到任何錯誤,也沒有控制台中的成功消息。 我不知道是什么問題,我做錯了什么?

您沒有正確編寫 function,您忘記了一個大括號,並在不應該有的地方添加了 arguments 的空數組。

同樣在您的查詢中,您寫了CREATE TABLE PLACES IF NOT EXISTS places 它認為正確的語法是CREATE TABLE IF NOT EXISTS places

arguments在事務中的順序是callback、errorCallback、successCallback。 https://docs.expo.dev/versions/latest/sdk/sqlite/#database

executeSql中arguments的順序是sqlStatement、arguments、callback、errorCallback。 https://docs.expo.dev/versions/latest/sdk/sqlite/#sqltransaction

這應該創建您的表:

return new Promise((resolve, reject) => {
        db.transaction(
            function (tx) {
                tx.executeSql("CREATE TABLE IF NOT EXISTS places (id INTEGER PRIMARY KEY NOT NULL, title TEXT NOT NULL, imageUri TEXT NOT NULL, address TEXT NOT NULL, lat REAL NOT NULL, lng REAL NOT NULL)");
            },
            function (error) {
                reject(false);
                throw new Error(
                    'Database creation error: ' + error.message
                );
            },
            function () {
                resolve(true);
                console.log('Created database OK');
            }
      );
});

需要添加 arguments 時的示例:

return new Promise((resolve, reject) => {
    db.transaction(
        function (tx) {
            tx.executeSql(
                'SELECT * FROM TABLE_NAME WHERE name=?;',
                [name],
                function (tx, resultSet) {
                    let data = [];
                    for (let i = 0, c = resultSet.rows.length;i < c;i++) {
                        data.push(resultSet.rows.item(i));
                    }
                    resolve(data);
                },
                function (tx, error) {
                    reject(undefined);
                    throw new Error('Error: ' + error.message);
                }
            );
        },
        function (error) {
            reject(undefined);
            throw new Error('transaction error: ' + error.message);
        }
    );
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM