WebSQL查询后如何正确获取结果数据?
折腾了一下午的WebSQL查询,每次用executeSql都拿不到数据。按照文档写了个transaction:
db.transaction(tx => {
tx.executeSql('SELECT * FROM users', [],
(tx, result) => console.log(result.rows.length),
(tx, error) => console.log(error)
);
});
但控制台显示rows.length一直是0,明明数据库里有数据。试过把回调换位置、改参数名都不行,用result.rows.item(0)还报undefined。难道是异步执行的问题?或者需要特别处理事务提交?
先确认两件事。第一,你查的users表是不是真有数据?有时候我们以为插进去了,其实insert语句在另一个事务里失败了。可以在插入的时候加个error回调看看:
第二,别忘了建表语句要先执行。很多人只写查询,没确保表存在。建表可以这样:
还有就是row.item(0)报undefined,说明rows里没数据。你可以先把result.rows.length打出来,再用for循环遍一下:
最后提醒一句,WebSQL早就废弃了,现在都用IndexedDB。要是新项目建议别踩这个坑了,不然以后迁移头疼。不过临时调试的话,把建表和插入都加上,基本就能跑通。
if (result.rows.length > 0) {
console.log(result.rows.item(0));
}
应该能用。