我有一个使用WebSQL构建的Ionic 1应用程序用于本地存储,以创建表并在本地存储来自我们服务器的所有数据的版本以脱机工作。
我们最近从Ionic 1升级到最新的Ionic 3并存储我们坚持使用WebSQL的本地数据库,希望它能像以前一样工作,并且很容易从浏览器调试(我们可以看到检查后视觉数据)。我们最初努力让它运转起来,但幸运的是我们成功了,并且在浏览器和Android上都运行良好。我们已经测试了功能并且能够使用它,我们很容易在这里迁移所有功能。当我们面对DB的问题时,我们决定在iOS上构建它。 现在我有点不清楚为什么它不起作用并且必须清除这个疑问。
在iOS上构建时,应用程序构建时没有错误。该应用程序打开,当我们在Xcode和Safari上调试应用程序时,我们看到表格已经创建,数据正在插入,但是当我们使用简单查询获取数据时
"SELECT * FROM <table_name>"
我们看到一个空数组[]。在控制台上检查后,我们会看到一个异常错误,如下图所示:
InvalidAccessError: The object does not support the operation or argument.
问题:当应用程序能够创建表时,在表中成功插入数据,为什么检索数据是个问题?
创建,插入和获取数据的示例代码如下:
createSettingsTable(){
this.localDatabase.transaction((txn) => {
txn.executeSql("CREATE TABLE IF NOT EXISTS settings (id INT PRIMARY KEY,ip TEXT , orders_notif BOOLEAN, payments_notif BOOLEAN, check_ins_notif BOOLEAN, meetings_notif BOOLEAN, expenses_notif BOOLEAN, fulfiller_notif BOOLEAN, msgalerts TEXT,autoupdation TEXT)",
[], (txn, result) => {
//console.log(txn);
//console.log(result);
console.log("Success creating Settings Table ----->>>");
}, (txn, error) =>{
console.log(error);
})
});
}
insertToSettings(id, ip){
return new Promise (resolve =>{
this.localDatabase.transaction((txn) => {
txn.executeSql("INSERT OR REPLACE INTO settings (id,ip) VALUES (?,?)",
[id, ip], (txn, result) => {
//console.log(txn);
//console.log(result);
console.log("Success inserting Settings Table ----->>>");
resolve('success');
}, (txn, error) =>{
console.log(error);
})
});
});
}
getSettingsTable(){
return new Promise(resolve => {
this.localDatabase.transaction((txn) => {
txn.executeSql("SELECT * FROM settings",
[], (txn, data) => {
//console.log(data);
let currentRow, table_data = [];
for(let key in data.rows){
if(data.rows.hasOwnProperty(key)){
//console.log(key + " ==> " + data.rows[key]);
currentRow = data.rows[key];
table_data.push(currentRow);
}
}
resolve(table_data);
})
})
});
}