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 ./
- iOS模拟器:
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
相关产品推荐
相关产品推荐

