【问题标题】:Database not loaded on Device, but works on Unity Editor数据库未加载到设备上,但适用于 Unity 编辑器
【发布时间】:2018-01-29 15:21:46
【问题描述】:

您好,我在访问我的移动 Android 设备上的数据库时遇到问题。似乎它没有读取我的数据库,或者我不知道我的数据库在构建时不包含在内。但这里有一个问题,我的数据库在统一编辑器中运行良好。我似乎无法在我的移动设备上找到问题,因为我无法访问它的控制台。顺便说一句,这是我的代码:

读取数据库:

void readDatabase(){

     string conn = "URI=file:" + Application.dataPath + "/Database/AtlasDB.sqlite";

    string sqlQuery = "SELECT * FROM UserScore";

    using (SqliteConnection c = new SqliteConnection(conn))
        {
            c.Open();
            using (SqliteCommand cmd = new SqliteCommand(sqlQuery, c))
            {
                using (SqliteDataReader rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read())
                        {
                        currHighScore = rdr.GetInt32(0);
                            //          string name = reader.GetString(1);
                        currHighDist = rdr.GetInt32(1);

                            Debug.Log( "High Score : " + currHighScore + ", High Distance: " + currHighDist);
                        }
                }
            }
        }

}

更新数据库:

void highscoreChecker(){

string conn2 = "URI=file:" + Application.dataPath + "/Database/AtlasDB";
        string  sqlQuery2 = "UPDATE UserScore SET Highscore = '" + MoveSanji.scoreAccumulate + "'";

using (SqliteConnection c = new SqliteConnection(conn2))
        {
            c.Open();
            using (SqliteCommand cmd = new SqliteCommand(sqlQuery2, c))
            {
                if (MoveSanji.scoreAccumulate > currHighScore) {

                    cmd.ExecuteReader();
                }
            }
        }

string  sqlQuery3 = "UPDATE UserScore SET HighDistance = '" + Mathf.RoundToInt( MoveSanji.distanceRun )+ "'";

        using (SqliteConnection c = new SqliteConnection(conn2))
        {
            c.Open();
            using (SqliteCommand cmd = new SqliteCommand(sqlQuery3, c))
            {
                if (Mathf.RoundToInt( MoveSanji.distanceRun) > currHighDist) {

                    cmd.ExecuteReader();
                }
            }
        }

    }

我正在使用 sqlite

注意:我使用 SQLite Database Browser 2.0 b1 创建了我的数据库 -- 数据库位于资产文件夹中我的数据库文件夹中 -- 我的插件文件夹中有 Mono.Data、Mono.Data.Sqlite、sqlite3.dll、sqlite3.def、System.Data.dll

【问题讨论】:

    标签: database unity3d sqlite


    【解决方案1】:

    Unity 的构建过程在识别场景中使用的内置资产类型方面非常聪明,但它不会将您的数据库文件识别为依赖项,因此它不包含在构建中。

    您可以将原始文件保存在StreamingAssets 文件夹中。

    这些文件的路径取决于您构建的目标平台:

    //PC
    path = Application.dataPath + "/StreamingAssets";
    
    //iOS
    path = Application.dataPath + "/Raw";
    
    //Android
    path = Application.dataPath + "/Raw";
    

    关于 Android 构建的一个重要说明,来自上面链接的手册页:

    请注意,在 Android 上,这些文件包含在压缩的 .jar 文件中(其格式与标准 zip 压缩文件的格式基本相同)。这意味着,如果您不使用 Unity 的 WWW 类来检索文件,那么您将需要使用其他软件来查看 .jar 存档内部并获取文件。

    除非您的用例可以处理嵌入在 .jar 存档中的只读 DB 文件,否则将该文件复制到另一个位置(例如 Application.persistentDataPath)并打开它可能会更容易。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2014-08-25
    • 2021-11-07
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多