我正在开发一个最初为最近升级到 2.2.0 的 PhoneGap 1.0.0 编写的 iOS 应用程序,因此我可以将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 和 Users 表就会插入数据。
- 当登录屏幕加载时,会在数据库中查询中心和用户。
/* 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 上的问题。