@Staspost

Как правильно прописать обращение к БД в Android?

В проекте на Unity под Android имеется предзаполненная база данных SQLite. База c названием db.bytes лежит в проекте в папке \Assets\StreamingAssets.
При тестировании на Unity база работает нормально. Но при установке APK на реальный девайс через Google Play - база не функционирует.
При этом на cмартфоне БД создается (только я не понимаю, по правильному ли пути она создана). Она не пуста. Таблица с локалью в ней есть. Я нашел базу на SD-карте в папке \Android\data\ProjectName\files\db.bytes. Она должна лежать здесь в открытом доступе, или где-то по другому пути?
Копирование БД я делал по найденному в Инетах образцу (хоть и несколько устаревшему, насколько я понял) и выглядит метод у меня таким образом:
private void startDbCheckAndCopy()
    {
        try
        {
            if (Application.platform == RuntimePlatform.Android)
            {
                
                //#if UNITY_ANDROID && !UNITY_EDITOR
                path = Application.persistentDataPath + "/db.bytes";                
                if (!File.Exists(path))
                {
                    WWW load = new WWW("jar:file://" + Application.dataPath + "!/assets/" + "db.bytes");
                    while (!load.isDone) { }
                    File.WriteAllBytes(path, load.bytes);                    
                }
                //#endif
            }
            else if (Application.platform == RuntimePlatform.WindowsEditor)
            {
                path = Application.dataPath + "/StreamingAssets/" + "db.bytes";
            } 
        }
        catch (Exception ex)
        {
            Debug.Log("ошибка" + ex.ToString());
        }
    }

Данный метод вызывается самым первым в методе start() при загрузке игры (скрипт висит на canvas). Сразу после него вызывается следующий метод, который обращается к БД, но из БД ничего в итоге не грузится:
private void checkStartNew()
    {
        try
        {            
            dbconnection = new SqliteConnection("URI=file:" + path);
            dbconnection.Open();
            if (dbconnection.State == ConnectionState.Open)
            {
                cmd = new SqliteCommand();
                cmd.Connection = dbconnection;
                cmd.CommandText = "SELECT start FROM pref WHERE id=1";
                r = cmd.ExecuteReader();
                start = int.Parse(r[0].ToString());                     
            }
            else
            {
                Debug.Log("Error connection");
            }
        }
        catch (Exception ex)
        {
            Debug.Log(ex);
        }
        r.Close();
    }

Собственно вопрос, что я делаю не так и как нужно изменить код, чтобы БД на устройстве заработала? Может быть, как-то поменять путь расположения БД?
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Попробуйте подключить через вот этот пакет.
https://github.com/praeclarum/sqlite-net

В обоих версиях apk присутствуют so
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы