执行带有 WHERE 子句的 Sql 在 Phonegap 中不返回任何结果

executeSql with WHERE clause not returning any results in Phonegap

本文关键字:Phonegap 返回 结果 任何 Sql 行带 WHERE 子句 执行      更新时间:2023-09-26

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

...
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) {
  ...
}

我得到的结果.rows.length等于1,结果.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);

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

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

多谢!

我明白了问题所在。似乎在插入行时,字段"id"被创建为整数(因为传递的值是整数(。但是,当我访问findById时,我没有发送1,而是发送"1"。"WHERE"子句需要一个整数,它正在查找一个字符串对象。

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

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

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