我正在开发一款最初为PhoneGap 1.0.0编写的iOS应用程序,该应用程序最近已升级到2.2.0,因此我可以将SQLitePlugin与SQLCipher一起使用。我遇到问题SELECT
语句永远不会返回结果,即使我知道那里有数据。
这是纲要:
THDatabase.DatabaseConnection = sqlitePlugin.openDatabase(THDatabase.name, THDatabase.currentVersion, THDatabase.displayName, THDatabase.size);
THDatabase.DatabaseConnection.transaction(THDatabase.CreateUsersTable, THDatabase.FatalErrorCallback);
THDatabase.DatabaseConnection.transaction(THDatabase.CreateCentersTable, THDatabase.FatalErrorCallback);
...
/* Centers */
LoadCenters: function LoadCenters() {
console.log("LoadCenters");
THDatabase.DatabaseConnection.transaction(THDatabase.LoadCentersImpl, THDatabase.FatalErrorCallback);
console.log('THDB.LoadCenters called from: ' + arguments.callee.caller.name);
},
LoadCentersImpl: function(tx) {
console.log("Loading centers.");
tx.executeSql('SELECT * FROM Centers', [], THDatabase.LoadCentersParse, THDatabase.RecoverableErrorCallback);
},
LoadCentersParse: function(tx, results) {
console.log('parsing centers');
var dataArray = [];
var len = results.rows.length;
...
},
/* Users */
LoadUsers: function LoadUsers() {
console.info("THDB.LoadUsers");
THDatabase.DatabaseConnection.transaction(THDatabase.LoadUsersImpl, THDatabase.FatalErrorCallback);
},
LoadUsersImpl: function (tx) {
console.info("Loading users...");
tx.executeSql('SELECT * FROM Users', [], THDatabase.LoadUsersParse, THDatabase.RecoverableErrorCallback);
},
LoadUsersParse: function (tx, results) {
console.info('parsing users...');
var dataArray = [];
var len = results.rows.length;
console.log(len);
...
}
...
我遇到的问题是,在LoadUsersImpl()
运行后,LoadUsersParse()
永远不会得到SELECT
语句的结果。 console.log在“正在加载用户...”处停止。我仍然可以登录应用程序,但没有其他任何需要从数据库读取的工作。
我尝试在匿名函数中包含对LoadUsersParse()
的调用,传递tx, results
,但这不起作用。如果我传递只是 results
,那么调用的结果会显示在控制台日志中,但它会在“解析用户...”之后立即显示。
如果没有在PhoneGap中安装SQLitePlugin,这个相同的代码工作正常,但我无法弄清楚它可能导致问题的位置。
在“加载用户......”后立即转动DEBUG:
SQLitePlugin.backgroundExecuteSqlBatch: {"executes":[{"query":["BEGIN"],"path":"ThinkHealthDBs.db","callback":"cb55"},{"query":["SELECT * FROM Users"],"path":"ThinkHealthDBs.db","callback":"cb56"}]}
在使用和不使用SQLCipher以及PhoneGap / Cordova 2.1.0时,这是一个问题。