数据库未加载到设备上,但适用于Unity编辑器

时间:2015-08-28 08:44:10

标签: database unity3d sqlite

美好的一天我在移动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制作了数据库 - 数据库位于Assets文件夹中的数据库文件夹中 - 我的插件文件夹上有Mono.Data,Mono.Data.Sqlite,sqlite3.dll,sqlite3.def,System.Data.dll

1 个答案:

答案 0 :(得分: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存档中嵌入的只读数据库文件,否则将该文件复制到Application.persistentDataPath等其他位置并打开它可能更容易。