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

React-Native使用react-native-sqlite-storage无法连接预置SQLite数据库

修复方案
  • 修正OpenDB函数异步逻辑错误:当前resolve()在调用openDatabase后立刻同步执行,未等待数据库打开成功回调,导致ReadDB执行时数据库未完成初始化触发报错,修改为在打开成功回调中执行resolve:
const OpenDB = () => {
    return new Promise((resolve, reject) => {
        global.db = SQLite.openDatabase(
            {
                name: 'mysqlite.db',
                createFromLocation: '~mysqlite.db',
            },
            () => {
                console.log("Connection success!");
                resolve(); // 数据库打开成功后再resolve
            },
            error => {
                console.log(error);
                reject(error);
            });
        // 移除原位置的resolve()
    });
}
  • 检查资源打包配置,避免数据库文件被压缩或过滤:在android/app/build.gradle中添加以下配置,禁止压缩.db格式的资源文件,部分默认打包配置会压缩asset下的二进制文件导致数据库无法被识别:
android {
    aaptOptions {
        noCompress 'db'
    }
}
  • 校验createFromLocation参数和文件存放路径完全匹配:
    • 如果你把数据库文件放在assets/www目录下,参数要写为createFromLocation: '~www/mysqlite.db'
    • 如果你把数据库文件放在assets根目录下,参数才用createFromLocation: '~mysqlite.db'
  • 验证数据库文件格式:你用DB Browser for SQLite导出的数据库必须是SQLite3标准格式,不要设置密码或加密,导出后可以先在PC端用工具打开确认文件没有损坏,再放到asset目录下。
  • 调试验证文件是否打包进APK:编译生成APK后,用解压工具打开APK,查看assets目录下是否存在对应路径的mysqlite.db文件,确认文件没有被打包流程过滤。
  • 临时降级targetSdkVersion测试:Android 11的存储权限限制可能导致异常,你可以把android/build.gradle中的targetSdkVersion临时降到29,卸载重装应用测试是否能正常打开。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:45:03