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

React Native Expo SQLite数据在DB Browser中不显示求助

问题原因与解决方案

1. 代码中的异步操作未等待

你当前的代码里,db.runAsync调用没有加await,这会导致插入操作还没完全执行完成,就去执行后续的查询。虽然控制台显示查询成功,但实际写入磁盘的操作可能还没完成。

修复方法:给db.runAsync加上await,确保插入操作完成后再进行后续逻辑:

async function insertData(data_to_submit) {
    try {
      // 加上await等待插入完成
      const result = await db.runAsync(
        `INSERT INTO BizUser (
          WhiteLabelURL, BizUser, BizUserPassword, BizUserName, BizUserEmail, 
          BizUserCell, BizUserAddress, BizUserClass, BizLocationLatitude, 
          BizLocationLongitude, BizLocationDescription, BizFeaturedImage, 
          ActiveStatus, ActiveStatusDateTime, SignupDateTime, BizLastUpdate, 
          BizLastUpdateDateTime
        ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);`,
        [
          data_to_submit.WhiteLabelURL,
          data_to_submit.BizUser,
          data_to_submit.BizUserPassword,
          data_to_submit.BizUserName,
          data_to_submit.BizUserEmail,
          data_to_submit.BizUserCell,
          data_to_submit.BizUserAddress,
          data_to_submit.BizUserClass,
          data_to_submit.BizLocationLatitude,
          data_to_submit.BizLocationLongitude,
          data_to_submit.BizLocationDescription,
          data_to_submit.BizFeaturedImage,
          data_to_submit.ActiveStatus,
          data_to_submit.ActiveStatusDateTime,
          data_to_submit.SignupDateTime,
          data_to_submit.BizLastUpdate,
          data_to_submit.BizLastUpdateDateTime,
        ]
      );

      const allUsers = await db.getAllAsync("SELECT * FROM BizUser");

      console.log("Data inserted successfully", result, allUsers);
    } catch (error) {
      console.error("Error inserting data:", error);
    }
  }

2. 你打开的不是App实际使用的数据库文件

Expo会将SQLite数据库存储在设备/模拟器的沙盒目录中,而不是项目根目录下的mydb.db。你手动打开的文件只是空的模板,不是实际存储数据的文件。

如何找到正确的数据库文件:

  • 第一步:打印数据库实际路径
    在代码中添加以下语句,获取并打印App使用的数据库路径:
console.log('实际数据库路径:', db.getDatabasePath('mydb.db'));

根据控制台输出的路径,去对应的位置找文件。

  • 第二步:根据平台导出文件
    • iOS模拟器:
      打开Xcode → 点击顶部菜单Window → Devices and Simulators → 选中你的模拟器和App → 点击Download Container → 导出后右键显示包内容 → 进入Documents目录找到数据库文件。
    • Android模拟器:
      打开Android Studio → 打开Device File Explorer → 导航到/data/data/[你的App包名]/files/ → 找到mydb.db → 右键Save As导出到本地。
      或者用adb命令:
      adb pull /data/data/[你的包名]/files/mydb.db ./
      

3. 可选:用事务确保数据写入

如果涉及多次写入操作,建议用事务包裹,确保所有操作要么全部成功,要么全部回滚,避免数据不一致:

async function insertData(data_to_submit) {
  try {
    await db.transactionAsync(async tx => {
      await tx.runAsync(
        `INSERT INTO BizUser (...) VALUES (...);`,
        [/* 参数数组 */]
      );
    });
    const allUsers = await db.getAllAsync("SELECT * FROM BizUser");
    console.log("数据插入成功", allUsers);
  } catch (error) {
    console.error("插入失败:", error);
  }
}

内容的提问来源于stack exchange,提问作者M.Zanaen Ullah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:27:39