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

React-Native使用react-native-sqlite-storage执行executeSql未返回ResultSet

问题原因

你遇到的这个问题是调用层级不匹配导致的:

  • react-native-sqlite-storage的executeSql存在两种调用场景:事务内调用(tx.executeSql)和db对象直接调用(db.executeSql),两种场景的成功回调参数结构不同。官方文档标注的双参数(事务对象+结果集)仅适用于事务内调用的场景,直接在db对象上调用executeSql是插件提供的便捷封装,结果集数据会直接合并到第一个事务参数中,第二个参数默认返回undefined。
  • 另外如果数据库初始化时开启了promise: true配置,回调的参数结构也会和传统回调模式存在差异,也可能触发这个问题。

解决方法

你可以根据自己的使用场景任选以下方案:

  • 方案1:优先使用显式事务调用executeSql,参数和官方文档完全匹配
let sql = "SELECT * FROM table_a;"
let params = [];

db.transaction(tx => {
  tx.executeSql(sql, params,
    (trans, results) => {
      console.log("execute success results: " + JSON.stringify(results))
      resolve(results);
    },
    (error) => {
      console.log("execute error: " + error);
      reject(error);
    });
});
  • 方案2:保持现有调用方式,直接从第一个事务参数中取结果数据
    从你的控制台输出可以看到,事务对象已经包含了完整的结果集属性:rows、rowsAffected,直接读取使用即可,不需要等第二个参数:
// 原调用逻辑不变,修改取值逻辑即可
db.executeSql(sql, params,
  (trans) => {
    const results = trans;
    console.log("结果行数:", results.rows.length)
    // 取第一行数据示例:results.rows.item(0)
    resolve(results);
  },
  (error) => {
    console.log("execute error: " + error);
    reject(error);
});
  • 方案3:检查数据库初始化配置,若开启了promise: true,可以直接用Promise语法调用拿结果:
db.executeSql(sql, params)
  .then(([trans, results]) => {
    console.log("结果集:", results)
    resolve(results)
  })
  .catch(error => {
    reject(error)
  })

内容的提问来源于stack exchange,提问作者ProfessionalAmateur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:30:02