我正在使用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。
有没有人遇到过类似的问题?
非常感谢!
答案 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
。与其他列类似。