2015-08-28 2 views
1

Добрый день У меня возникла проблема с доступом к моей базе данных на мобильном устройстве Android. Кажется, что он не читает мою базу данных, или я не знаю, что моя база данных не включена в сборку. Но вот улов, моя база данных отлично работает в редакторе единства. Я не могу найти проблему на своем мобильном устройстве, потому что у меня нет доступа на консоль. Кстати вот мой код:База данных не загружена на устройство, но работает на Unity Editor

Чтение базы данных:

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(); 
       } 
      } 
     } 

    } 

Im использованием SQLite

Примечание: Я сделал свою базу данных с помощью SQLite Database Browser 2.0 b1 - База данных находится в моей папке базы данных в папке с активами - У меня есть Mono.Data, Mono.Data.Sqlite, sqlite3.dll, sqlite3.def, Syste m.Data.dll в моей папке с плагинами

ответ

1

Процесс сборки Unity довольно умен, чтобы идентифицировать встроенные типы активов, которые используются в ваших сценах, но он не распознает ваш файл базы данных как зависимость, и поэтому он не включен в сборке.

Вы можете включить необработанные файлы, сохранив их в папке StreamingAssets.

Путь для этих файлов зависит от целевой платформы вашей сборки в:

//PC 
path = Application.dataPath + "/StreamingAssets"; 

//iOS 
path = Application.dataPath + "/Raw"; 

//Android 
path = Application.dataPath + "/Raw"; 

Одно важное замечание для Android строит, со страницы вручную связаны выше:

Обратите внимание, что на Android, файлы содержатся в сжатом файле .jar (который по существу является тем же самым форматом, что и стандартные zip-сжатые файлы). Это означает, что если вы не используете WWW-класс Unity для извлечения файла, вам нужно будет использовать дополнительное программное обеспечение для просмотра внутри архива .jar и получения файла.

Если ваш случай использования не может обрабатывать только для чтения DB файл, встроенный в .jar архиве, может быть проще скопировать этот файл в другом месте, например, Application.persistentDataPath и открыть это.

+0

она до сих пор не работает для меня Я использовал эту ссылку в качестве справки: http://docs.unity3d.com/Manual/StreamingAssets.html и изменил мою строку подключения к этому: «банка: файл: // "+ Application.dataPath +"! /assets/AtlasDB.sqlite "; – VonnCC

Смежные вопросы