Expo-sqlite-storage中tx.executeSql无法正常插入数据求助
排查建议
1. 修复日期参数格式
SQLite的DATETIME类型需要标准格式字符串(如ISO 8601:YYYY-MM-DD HH:MM:SS),直接传入Date对象可能无法被正确解析。在每个日期计算分支后,把Date对象转为ISO字符串:
// 示例:Daily分支修改后 if (recurringInterval === 'Daily') { recurranceDate = new Date(date.getTime() + 24 * 60 * 60 * 1000); recurranceDate = recurranceDate.toISOString(); // 新增这行 }
其他Monthly、Yearly分支同理添加格式转换。
2. 补全事务级错误捕获
外层try/catch抓不到db.transaction内部的异步错误,给事务添加全局错误回调,排查整个事务是否异常:
db.transaction((tx) => { // 原executeSql代码 }, (error) => { console.log("事务执行失败:", error); });
3. 验证表结构正确性
执行以下代码检查表字段是否匹配预期:
db.transaction((tx) => { tx.executeSql("PRAGMA table_info(rexpenses)", [], (_, res) => { console.log("表结构详情:", res.rows._array); }); });
确认name、recurrancedate等字段存在,同时注意SQLite会自动把STRING类型转为TEXT,这属于正常情况。
4. 再次确认参数值完整性
在函数开头添加日志,确保expense的属性值完全符合要求:
function setRecurringExpense (expense) { console.log("待插入数据:", expense); console.log("名称字段值:", expense.Name, "是否存在该属性:", 'Name' in expense); // 后续原有代码 }
避免因属性名大小写(如expense.name vs expense.Name)导致的隐性赋值失败。
5. 明确使用读写事务(针对部分SQLite库)
如果用的是React Native的react-native-sqlite-storage这类库,部分版本需要显式指定写入事务,把db.transaction替换为db.writeTransaction:
db.writeTransaction((tx) => { tx.executeSql(/* 原有插入语句 */); });
6. 确认数据库实例一致性
打印数据库实例信息,排查是否插入和查询用了不同的数据库实例:
// 创建数据库时打印标识 console.log("当前数据库实例:", db); // React Native环境可打印db._dbname查看库名
内容的提问来源于stack exchange,提问作者jay shah
相关产品推荐
相关产品推荐

