You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 05:07:40