带有WHERE子句的executeSql不会在Phonegap中返回任何结果

时间:2013-10-10 23:22:57

标签: javascript sql cordova

我正在使用Phonegap开发一个应用程序。我创建了一个名为location的表,如下所示:

...
tx.executeSql('CREATE TABLE IF NOT EXISTS LOCATIONS (id unique, name, key, secret)');
...

我插了一行:

...
tx.executeSql('INSERT INTO LOCATIONS (id, name, key, secret) VALUES (?, ?, ?, ?)', [1, "Some Name", "Some Key", "Some Secret"], success, error);
...

当我这样做时:

...
tx.executeSql('SELECT * FROM LOCATIONS', [ ], function(tx, results) {
  ...
}

我得到results.rows.length等于1,results.rows.item(0)是:

[{“id”:1,“name”:“Some Name”,“key”:“Some Key”,“secret”:“Some Secret”}]

但是,如果我这样做:

...
function findById(id) {
  tx.executeSql('SELECT * FROM LOCATIONS WHERE id = ?', [ id ], function(tx, results) {
    ...
  }
}
...
findById(1);

我得到的results.rows.length等于0,而我希望它是1。

有没有人遇到过类似的问题?

非常感谢!

2 个答案:

答案 0 :(得分:2)

我遇到了问题所在。在插入行时,似乎字段“id”被创建为整数(因为传递的值是整数)。但是,当我访问findById时,我没有发送1,但我发送的是“1”。 “WHERE”子句期待一个整数,而是找到一个String对象。

当您在预准备语句(executeSql)中发送无效类型时,Phonegap中使用的Web-SQL似乎不会出错,而是返回0结果。奇怪的行为,但幸运的是我能够通过解析整数来解决我的问题:

function findById(id){   tx.executeSql('SELECT * FROM LOCATIONS WHERE id =?',[parseInt(id)],function(tx,results){     ...   } }

答案 1 :(得分:0)

结果是一个对象,而不是一个数组。例如,如果要访问名称值,请执行results.rows.item(0).name。与其他列类似。