Путем проб и ошибок, поиска информации в интернете, тестирования сам пришел написанному ниже рабочему варианту.
Выкладываю его тут - вдруг кому то понадобится.
Работа игры использующей SQLite проверена 20.09.2022 на ОС Windows 7 Windows 10, версиях x86 и x64.
Использовал Unity 2021.3.10f1.
В интернете есть похожие инструкции, но с ошибками. А именно путь к файлам, которые мы копируем в папку Pluging указан не верный.
В результате игра работает только на Windows x64 или на x86 (в зависимости от инструкции). Или версия x64 не работает на x86.
В моем случае (путь Editor\Data\MonoBleedingEdge\lib\mono\unityjit-win32) всё работает на всех версиях ОС.
Работа с БД SQLite в UNITYДля работы с SQLite нужно:
1) Создать базу, например mybase.db.
2) Создать папкуAssets\StreamingAssets и скопировать туда базу.
3) Загрузить с сайта
https://www.sqlite.org/download.htmlPrecompiled Binaries for Windows 32-bit DLL (x86) for SQLite
Precompiled Binaries for Windows 64-bit DLL (x86) for SQLite
Precompiled Binaries for Android
zip и aar файлы - это архивы. Нужно разархивировать файлы.
4) Создать папку Assets\Plugins
5) Создать папки Assets\Plugins\x86, Assets\Plugins\x64 и Assets\Plugins\Android.
6) В архиве aar sqlite-android-3390300\jni\x86_64 взять файл libsqliteX.so и переименовать его в libsqlite.so.
7) Скопировать libsqlite.so в папку Assets\Plugins\Android.
8) Из каждого zip архива взять файл sqlite3.dll и скопиривать его в соответствующие папки Assets\Plugins\x86 и Assets\Plugins\x64.
9) В папку Assets\Plugins скопировать файлы из папки C:\Program Files\Unity\Hub\Editor\2021.3.10f1\Editor\Data\MonoBleedingEdge\lib\mono\unityjit-win32
Файлы:
Mono.Data.Sqlite.dll
System.Configuration.dll
System.Data.dll
System.EnterpriseServices.dll
System.Security.dll
Если Unity в дебаггере/консоли покажет, что в проекте уже используется загруженная dll - то удалить этот файл из папки Plugins.
Далее можно будет работать с БД, используя скрипт.
Скрипт
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Data;
using System;
using UnityEngine.UI;
using Mono.Data.Sqlite; // Используем Sqlite.
public class Connection : MonoBehaviour
{
public void setConnection()
{
string path = Application.dataPath + "/StreamingAssets/base/mybase.db";
string sqlCommandText = "SELECT name FROM users";
SqliteConnection connection = new SqliteConnection("Data Source="+path);
connection.Open();
if (connection.State == ConnectionState.Open)
{
SqliteCommand sqliteCommand = new SqliteCommand();
sqliteCommand.Connection = connection;
sqliteCommand.CommandText = sqlCommandText;
SqliteDataReader sqliteDataReader = sqliteCommand.ExecuteReader(); // Ридер - читает данные и возвращает объект типа odject.
// Если строк много - выполняем код в цикле.
while (sqliteDataReader.Read())
{
// Мы можем получать данные из ридера разными способами.
var id = sqliteDataReader.GetValue(0); // C помощью метода GetValue. Получим первое значение.
object id = sqliteDataReader[0]; // Аналогично, но через индексатор ридера.
object id = sqliteDataReader["id"]; // Через название столбца.
// Пример конвертации результатов из object в string.
string id=sqliteDataReader["id"].ToString();
// Пример конвертации результатов из object в int.
int age =Convert.ToInt32(sqliteDataReader["age"]);
}
// Если в таблице всего одна строка - то можно просто обратиться к ней, без цикла.
object id = sqliteDataReader["id"];
int age =Convert.ToInt32(sqliteDataReader["age"]);
}
connection.Close();
}
}
Ошибка Loading assembly failed: "Assets/Plugins/Mono.Data.Sqlite.dll" reason: File does not contain a valid CIL image - не влияет на работу. Как пишут в интернете - это баг Unity.
Если возникает ошибка unity error plastic scm null reference, то надо удалить из проекта пакет Version Control Package (Меню->Window->Package Manager).