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

Unity 2021.3.13带SQLite功能的独立程序跨PC读取数据库失败

Unity SQLite独立版跨PC运行异常排查方案

针对你遇到的Unity 2021.3.13 SQLite程序在非开发PC Windows独立版输出null的问题,结合已排查的点,给出以下具体解决方向:

1. 数据库路径逻辑修正

多数情况下问题出在路径读取的兼容性上:

  • 确保数据库文件在Unity中设置为Copy to Output Directory:右键数据库文件→导入设置,将Copy to设为Copy if newer或Always Copy
  • 改用Application.persistentDataPath作为数据库存储路径,而非相对路径。首次运行时从StreamingAssets复制数据库到该目录(避免权限或路径解析问题),示例代码:
    using System.IO;
    using UnityEngine;
    using UnityEngine.Networking;
    
    public class DBLoader : MonoBehaviour
    {
        private string dbName = "your_db_name.db";
        void Start()
        {
            string targetPath = Path.Combine(Application.persistentDataPath, dbName);
            if (!File.Exists(targetPath))
            {
                #if UNITY_EDITOR || UNITY_STANDALONE_WIN
                string sourcePath = Path.Combine(Application.streamingAssetsPath, dbName);
                File.Copy(sourcePath, targetPath);
                #elif UNITY_ANDROID
                using (UnityWebRequest www = UnityWebRequest.Get(Path.Combine(Application.streamingAssetsPath, dbName)))
                {
                    www.SendWebRequest();
                    while (!www.isDone) { }
                    if (www.result == UnityWebRequest.Result.Success)
                    {
                        File.WriteAllBytes(targetPath, www.downloadHandler.data);
                    }
                }
                #endif
            }
            // 后续使用targetPath作为数据库路径
        }
    }
    
  • 可在代码中输出targetPath的实际路径(比如通过Debug.Log或UI文本),到目标PC上检查该路径下是否存在数据库文件

2. 补充SQLite原生依赖库

Unity的SQLite功能依赖Windows平台的sqlite3.dll,该文件常被遗漏:

  • 从Unity安装目录的Editor/Data/MonoBleedingEdge/lib/mono/unityjit-win64(64位程序)或unityjit-win32(32位)下复制sqlite3.dll
  • 将dll放入项目的Plugins/Windows目录,右键dll→导入设置,设置平台为Windows,勾选对应架构(x64或x86),取消其他平台勾选
  • 打包后确认输出目录的Plugins文件夹中包含该dll

3. 替换兼容版System.Data与I18N DLL

手动添加的DLL可能和Unity内置Mono环境不兼容:

  • 删除项目中现有手动添加的System.Data.dll、I18N.dll等文件
  • 从Unity安装目录的Editor/Data/MonoBleedingEdge/lib/mono/4.7.2-api下复制对应DLL到项目Plugins目录
  • 同样设置这些DLL的导入平台为Windows,匹配目标架构,避免跨平台冲突

4. 检查SQL连接与查询逻辑

确认连接字符串和查询语句无错误:

  • 使用标准SQLite连接字符串:
    string connStr = $"Data Source={targetPath};Version=3;";
    using (var conn = new System.Data.SQLite.SQLiteConnection(connStr))
    {
        conn.Open();
        string countQuery = "SELECT COUNT(*) FROM your_table_name;";
        using (var cmd = new System.Data.SQLite.SQLiteCommand(countQuery, conn))
        {
            var result = cmd.ExecuteScalar();
            if (result != null)
            {
                int itemCount = Convert.ToInt32(result);
                // 更新UI显示数量
            }
        }
    }
    
  • 确保表名、字段名拼写正确,避免因大小写或语法错误导致查询返回null

5. 排除安全软件拦截

部分PC的杀毒软件或防火墙可能阻止程序读取本地文件:

  • 暂时关闭目标PC的安全软件,测试程序是否正常运行
  • 若恢复正常,将程序.exe文件和所在文件夹添加到安全软件的信任列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:05:38