Ionic SQLite插入TEXT列值为undefined问题求助
解决Category表Name字段插入后显示undefined的问题
看起来你的插入逻辑本身没有语法错误,但不管是代码插入还是手动插入,读取时Name字段都返回undefined,大概率是读取数据的环节出了问题,下面分几种常见情况帮你排查:
1. 检查读取数据时的字段名大小写
SQLite默认会把表和列名转换为小写存储(除非创建表时用双引号强制区分大小写)。如果你的读取代码是类似下面的写法:
// 错误示例:用了大写Name,但驱动返回的是小写name const category = { Id: row.IdCategory, Name: row.Name, // 这里应该改成row.name Visible: row.Visible };
那必然会得到Name: undefined,因为SQLite驱动返回的列名是小写的。你可以改成小写的row.name试试,或者在读取时统一处理字段名的大小写。
2. 直接验证数据库表结构
建议用SQLite可视化工具(比如DB Browser for SQLite)打开你的数据库文件,直接查看Category表的结构:
- 确认
Name列确实存在,且类型为TEXT - 查看手动插入的
cat2这条数据,Name字段是否真的为空(如果工具里能看到cat2,那说明是读取代码的问题;如果工具里也显示为空,那可能是数据库创建或插入的隐藏问题)
3. 排查读取数据的核心逻辑
请重点检查你的LoadCategory方法,这是问题的关键。比如可以在方法里打印返回的行对象,看看实际的字段名和值:
LoadCategory() { return this.database.executeSql('SELECT * FROM Category', []).then(([result]) => { const categories = []; for (let i = 0; i < result.rows.length; i++) { const row = result.rows.item(i); console.log('读取到的行数据:', row); // 打印行对象,确认字段名和值 categories.push({ IdCategory: row.IdCategory, Name: row.name, // 根据打印结果调整大小写 Visible: row.Visible }); } return categories; }); }
通过打印row,你能直观看到返回的属性名是Name还是name,以及Name字段的实际值是否存在。
4. 尝试调整插入语句的字段名写法
虽然概率较低,但你插入时给Name加了反引号,部分SQLite驱动对反引号的处理可能有差异。可以试试去掉反引号或者换成双引号:
-- 去掉反引号的写法 INSERT INTO Category (Name, Visible) VALUES (?, ?) -- 或者用双引号包裹字段名 INSERT INTO Category ("Name", Visible) VALUES (?, ?)
总结:最常见的原因是读取数据时字段名大小写不匹配,建议先打印行对象确认实际字段名,再调整读取代码即可解决问题。
内容的提问来源于stack exchange,提问作者danicode
相关产品推荐
相关产品推荐

