Не могу на телефоне подключиться к базе данных SQLite. Пишу игру на Юньке и на компе все классно работает, а вот на телефоне - ничего не пашет, запросы не проходят ни в какую.
Старые методы 2016 года (копирование БД при помощи WWW) уже не работают, а новых я найти не могу. В коде уже перепробовал массу способов.
База данных хранится в папке Assets/Database. Помимо этого она еще есть в папке StramingAssects. Но все равно не работает и не находит эту папку, т.к. Юнька пишет, что метод устарел.
if(Application.platform == RuntimePlatform.Android)
{
path =Path.Combine(Application.persistentDataPath,"/Database/gb.bytes.db");
if(!File.Exists(path))
{
WWW db = new WWW("jar:file://"+Application.dataPath+"!/assets/Database/gb.bytes.db");
while(!db.isDone){debug.text = "База данных пока не загружена";}
File.WriteAllBytes(path,db.bytes);
}
}
Я сделал вот так, и оно отлично работает:
using SQLite;
using System;
using System.IO;
using UnityEngine;
/// <summary>
/// Базовый класс для локальных баз данных SQLite.
/// </summary>
public abstract class PvnSQLiteDB : IDisposable
{
/// <summary>
/// Соединение к БД.
/// </summary>
public SQLiteConnection Connection;
protected string SqliteFileNameOnly;
protected string SqliteFileNameWithPath;
/// <summary>
/// Конструктор.
/// </summary>
/// <param name="dbFileNameOnly">Имя файла базы данных.</param>
public PvnSQLiteDB(string dbFileNameOnly)
{
Connection = null;
SqliteFileNameOnly = dbFileNameOnly;
SqliteFileNameWithPath = Path.Combine(Application.persistentDataPath, SqliteFileNameOnly);
}
/// <summary>
/// Установить соединение.
/// </summary>
public virtual void Connect()
{
CreateSqliteFileIfNotExists();
Connection = new SQLiteConnection(/*"URI=file:" +*/ SqliteFileNameWithPath);
}
/// <summary>
/// Создать при необходимости файл БД с начальным наполнением данных
/// - либо пустой, либо шаблон БД из ресурсов.
/// </summary>
private void CreateSqliteFileIfNotExists()
{
// если базы еще нет в папке приложения, то создать ее, загрузив из ресурсов
// (там лежит БД с начальным заполнением данных)
if (!File.Exists(SqliteFileNameWithPath))
{
string resName = "Databases/" + Path.GetFileNameWithoutExtension(SqliteFileNameOnly);
var asset = (TextAsset)Resources.Load(resName);
if (asset != null)
{
File.WriteAllBytes(SqliteFileNameWithPath, asset.bytes);
}
else
{
Debug.LogWarning("Начальная база данных SQLite отсутствует в ресурсе '" + resName + "'. Будет создана пустая БД.");
File.AppendAllText(SqliteFileNameWithPath, "");
}
}
}
/// <summary>
/// Вызывается при уничтожении экземпляра объекта этого класса.
/// </summary>
public void Dispose()
{
if (Connection != null)
Connection.Dispose();
}
}
Файл БД с начальным наполнением надо положить в Resources/Databases. Если не положить, то код создаст пустую БД.
В конструктор надо передать имя файла без пути.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
беру инфу из базы, при получении полей получаются много dreader["field_name"]ToString() можно ли перевести сразу DataReader в Dictionary чтобы избавиться от кучи...
Я использую следующий код для пагинации в EF Core:
Мне необходимо получить список доступных wifi сетейНа теперешний момент есть такой код