我正在嘗試使用 expo 的 SQLite 為我的 react native 應用程式創建資料庫并遵循它的檔案,但我認為資料庫沒有初始化。
檔案: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 []
我創建了promiseasinit()如果失敗則回傳錯誤,當它解決時會記錄成功訊息DATABASE INITIALIZED。但我沒有得到任何輸出。
助手/資料庫:
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;
};
我沒有收到任何錯誤,也沒有控制臺中的成功訊息。我不知道是什么問題,我做錯了什么?
uj5u.com熱心網友回復:
你沒有正確撰寫你的函式,你忘記了一個大括號,并在你不應該有的地方添加了空引數陣列。
同樣在您的查詢中您寫了CREATE TABLE PLACES IF NOT EXISTS places. 它相信正確的語法是CREATE TABLE IF NOT EXISTS places.
事務中引數的順序是callback、errorCallback、successCallback。 https://docs.expo.dev/versions/latest/sdk/sqlite/#database
executeSql 中引數的順序是 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(error.message);
},
function () {
resolve(true);
console.log('Created database OK');
}
);
});
需要添加引數時的示例:
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(error.message);
}
);
},
function (error) {
reject(error.message);
}
);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/422614.html
標籤:
上一篇:SQLSELECT中的嵌套計算
