Подтвердить что ты не робот

Использовать локальную базу данных в Xamarin

Я начал использовать плагин Xamarin для Visual Studio для создания приложения для Android.

У меня есть локальная база данных SQL, и я хочу вызвать ее для отображения данных. Я не понимаю, как я могу это сделать. Возможно ли это?

4b9b3361

Ответ 1

Подумав, что это тривиальная вещь, я ошибся, когда попытался настроить быстрый тестовый проект. Этот пост будет содержать полное руководство по настройке БД для приложения Android в Xamarin, которое пригодится в качестве справочного пособия для будущих пользователей Xamarin.

С одного взгляда:

  1. Добавьте Sqlite.cs в ваш проект.
  2. Добавьте файл базы данных в качестве актива.
  3. Установите файл базы данных для сборки в качестве AndroidAsset.
  4. Вручную скопируйте файл базы данных из вашего apk в другой каталог.
  5. Откройте соединение с базой данных, используя Sqlite.SqliteConnection.
  6. Работайте с базой данных, используя Sqlite.

Настройка локальной базы данных для проекта Xamarin Android

1. Добавьте Sqlite.cs в ваш проект.

Начните с перехода в этот репозиторий и загрузки Sqlite.cs; это предоставляет API Sqlite, который вы можете использовать для выполнения запросов к вашей базе данных. Добавьте файл в ваш проект как исходный файл.

2. Добавьте БД в качестве актива.

Затем возьмите свою БД и скопируйте ее в каталог Assets вашего проекта Android, а затем импортируйте в свой проект, чтобы он отображался под папкой Assets в вашем решении:

enter image description here

В этом примере я использую образец базы данных Chinook_Sqlite.sqlite, переименованный в db.sqlite с этого сайта.

3. Установите БД для сборки как AndroidAsset.

Щелкните правой кнопкой мыши по файлу БД и установите для него действие AndroidAsset. Это обеспечит его включение в каталог ресурсов APK.

enter image description here

4. Вручную скопируйте БД из вашего APK.

Поскольку БД включена как Актив (упакован в APK), вам необходимо извлечь его.

Вы можете сделать это с помощью следующего кода:

string dbName = "db.sqlite";
string dbPath = Path.Combine (Android.OS.Environment.ExternalStorageDirectory.ToString (), dbName);
// Check if your DB has already been extracted.
if (!File.Exists(dbPath))
{
    using (BinaryReader br = new BinaryReader(Android.App.Application.Context.Assets.Open(dbName)))
    {
        using (BinaryWriter bw = new BinaryWriter(new FileStream(dbPath, FileMode.Create)))
        {
            byte[] buffer = new byte[2048];
            int len = 0;
            while ((len = br.Read(buffer, 0, buffer.Length)) > 0)
            {
                bw.Write (buffer, 0, len);
            }
        }
    }
}

Это извлекает БД в виде двоичного файла из APK и помещает его в путь к внешнему хранилищу системы. Реально БД может идти куда угодно, я просто решил ее воткнуть.

Я также читал, что в Android есть папка с базами данных, в которой будут храниться базы данных; Я не мог заставить его работать, поэтому я просто побежал с этим методом использования существующей БД.

5. Откройте соединение с БД.

Теперь откройте соединение с БД через класс Sqlite.SqliteConnection:

using (var conn = new SQLite.SQLiteConnection(dbPath))
{
        // Do stuff here...
}

6. Работать на БД.

Наконец, поскольку Sqlite.net является ORM, вы можете работать с базой данных, используя ваши собственные типы данных:

public class Album
{
    [PrimaryKey, AutoIncrement]
    public int AlbumId { get; set; }
    public string Title { get; set; }
    public int ArtistId { get; set; }
}

// Other code...

using (var conn = new SQLite.SQLiteConnection(dbPath))
{
    var cmd = new SQLite.SQLiteCommand (conn);
    cmd.CommandText = "select * from Album";
    var r = cmd.ExecuteQuery<Album> ();

    Console.Write (r);
}

Резюме

И это как добавить существующую базу данных Sqlite в ваше решение Xamarin для Android! Для получения дополнительной информации ознакомьтесь с примерами, включенными в библиотеку Sqlite.net, ее модульными тестами и примерами в документации Xamarin.

Ответ 2

Вот тот, который я использую, и он работает

  • установите плагин Sqlite
  • создать интерфейс для доступа к сервисам разных платформ
  • создать модель для стола
  • реализовать интерфейс, который вы создали ранее, на всех платформах, которые вы хотите использовать
  • использовать плагин для создания, получения, вставки и т.д. на вашем столе

для более подробной информации проверьте это