带有 SQLite 数据库的 Cordova 应用程序在 iOS 中首次运行后冻结,但在 Android 中运行良好
Posted
技术标签:
【中文标题】带有 SQLite 数据库的 Cordova 应用程序在 iOS 中首次运行后冻结,但在 Android 中运行良好【英文标题】:Cordova app with SQLite database freezes after first run in iOS but works fine in Android 【发布时间】:2016-03-25 16:17:30 【问题描述】:我在使用 AngularJS 构建的 Cordova 应用程序中使用 SQlite。我引导应用程序 onDeviceReady() 然后检查是否存在数据库和特定表并根据结果执行某些操作。该应用程序在 android 中按预期运行,但在 ios 中它第一次运行,然后在模拟器或设备的白页上被阻止!谁能告诉我如何解决这个问题?
var db = window.sqlitePlugin.openDatabase(
// options
name: "users_info.db",
location: 2
,
// success callback
function (msg)
// console.log("success: " + msg);
// console.log(msg);
,
// error callback
function (msg)
// console.log("error: " + msg);
);
db.transaction(function (tx)
tx.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name='user'", [], function (tx, result)
if (result.rows.length == 0)
console.log('theres no table with this name ');
$scope.$apply(function ()
$location.path('/login');
);
else
tx.executeSql(
"select * from user;",
[],
function (tx, res)
var row = res.rows.item(0);
console.log(row.role);
if (row.role == 4)
$scope.$apply(function ()
userService.roleid = '4';
userService.userid = row.userid;
$location.path('/student');
);
);
console.log('this table exists');
);
);
我也尝试了以下代码来打开数据库,但在 iOS 中,应用程序在第一次运行后再次冻结
var db = $cordovaSQLite.openDB( name: "users_info.db", location: 1, iosDatabaseLocation: 'default' ,
// success callback
function (msg)
// console.log("success: " + msg);
console.log(msg);
console.log('success');
,
// error callback
function (msg)
console.log("error: " + msg);
console.log('error');
);
【问题讨论】:
【参考方案1】:我发现问题的原因是我的页面包含 SQLite 数据库的代码 sn-p 在加载时刷新了两次,导致代码同时读取和写入 SQlite 数据库两次,这导致数据库和因此iOS应用程序冻结。我确保代码只运行一次,它就像一个魅力!
【讨论】:
以上是关于带有 SQLite 数据库的 Cordova 应用程序在 iOS 中首次运行后冻结,但在 Android 中运行良好的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 10 中使用 cordova-plugin-file 复制 SQLite 数据库 cordova-sqlite-storage
Ionic/Cordova SqLite 并不总是在来自 Play 商店的应用更新之间持续存在
Cordova Android:从任意目录打开 SQLite .db 数据库
升级到 64 位时 Cordova Sqlite 数据库错误