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

使用Cordova开发安卓应用如何读写Win10共享文件夹中的SQLite文件

实现方案说明

核心问题

你之前使用的cordova-plugin-file仅支持本地文件系统路径解析,不支持SMB协议的局域网共享路径访问;同时SQLite本身是基于本地文件块级读写的数据库,无法直接打开和操作远程网络路径下的数据库文件,所以直接替换路径的方案不可行。

适配插件选择

你需要额外安装支持SMB协议的Cordova插件来实现局域网共享文件夹的文件读写,推荐使用cordova-plugin-smbclient,该插件支持安卓端对接Windows SMB共享,可完成文件的上传、下载、目录遍历等操作。

逻辑调整思路

不能直接打开共享路径下的SQLite文件,需要按以下流程实现:

  1. 通过SMB插件连接Windows共享文件夹,将目标shared.db下载到安卓本地缓存目录
  2. 用你现有的SQLite插件操作本地缓存的数据库文件,完成所有增删改查逻辑
  3. 所有数据库操作完成后,将修改后的本地数据库文件通过SMB插件上传覆盖共享文件夹中的原文件

注意:多设备同时操作共享数据库时会存在文件覆盖冲突风险,建议操作前先在共享目录创建.lock标记文件,操作完成后删除,避免并发写入损坏数据库。

调整后代码示例

document.addEventListener('deviceready', function() {
    const SMB_SERVER = '192.168.1.29';
    const SMB_SHARE = 'shrd';
    const SMB_USER = '你的Windows共享账号';
    const SMB_PWD = '你的Windows共享密码';
    const DB_NAME = 'shared.db';
    // 本地缓存目录
    const localCacheDir = 'file:///storage/emulated/0/Android/cache/';

    // 1. 连接SMB共享
    window.smbClient.connect(SMB_SERVER, SMB_USER, SMB_PWD, function() {
        // 2. 下载共享目录的db到本地缓存
        window.smbClient.downloadFile(`smb://${SMB_SERVER}/${SMB_SHARE}/${DB_NAME}`, localCacheDir + DB_NAME, function() {
            // 3. 打开本地缓存的db操作
            window.resolveLocalFileSystemURL(localCacheDir, function(cacheDirEntry) {
                var db = window.sqlitePlugin.openDatabase({
                    name: DB_NAME, 
                    androidDatabaseLocation: cacheDirEntry.toURL()
                });

                db.transaction(function(tx) {
                    tx.executeSql('CREATE TABLE IF NOT EXISTS MyTable (data)');
                    tx.executeSql('INSERT INTO MyTable VALUES (?)', ['test-value']);
                }, function(error) {
                    console.log('操作数据库错误: ' + error.message);
                }, function() {
                    db.transaction(function(tx) {
                        tx.executeSql('SELECT data from MyTable', [], function(tx_ignored, resultSet) {
                            console.log('记录数: ' + resultSet.rows.length);
                            for (var i=0; i < resultSet.rows.length; ++i) {
                                console.log('索引: ' + i + ' 值: ' + resultSet.rows.item(i).data);
                            }
                            // 4. 操作完成后上传db回共享目录
                            window.smbClient.uploadFile(localCacheDir + DB_NAME, `smb://${SMB_SERVER}/${SMB_SHARE}/${DB_NAME}`, function() {
                                console.log('数据库已同步到共享文件夹');
                            }, function(err) {
                                console.log('上传失败: ' + err.message);
                            });
                        });
                    }, function(error) {
                        console.log('查询数据库错误: ' + error.message);
                    });
                });
            });
        }, function(err) {
            console.log('下载共享数据库失败: ' + err.message);
        });
    }, function(err) {
        console.log('SMB连接失败: ' + err.message);
    });
});

额外注意事项

  • 安卓端需要配置网络访问权限,安卓11及以上版本需要申请对应本地存储读写权限
  • Windows端需要放开445端口防火墙规则,确保共享文件夹对配置的账号开放读写权限
  • 如果共享目录允许匿名访问,SMB账号密码填空字符串即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:45:02