Я начал использовать плагин Xamarin для Visual Studio для создания приложения для Android.
У меня есть локальная база данных SQL, и я хочу вызвать ее для отображения данных. Я не понимаю, как я могу это сделать. Возможно ли это?
Я начал использовать плагин Xamarin для Visual Studio для создания приложения для Android.
У меня есть локальная база данных SQL, и я хочу вызвать ее для отображения данных. Я не понимаю, как я могу это сделать. Возможно ли это?
Подумав, что это тривиальная вещь, я ошибся, когда попытался настроить быстрый тестовый проект. Этот пост будет содержать полное руководство по настройке БД для приложения Android в Xamarin, которое пригодится в качестве справочного пособия для будущих пользователей Xamarin.
С одного взгляда:
Начните с перехода в этот репозиторий и загрузки Sqlite.cs; это предоставляет API Sqlite, который вы можете использовать для выполнения запросов к вашей базе данных. Добавьте файл в ваш проект как исходный файл.
Затем возьмите свою БД и скопируйте ее в каталог Assets вашего проекта Android, а затем импортируйте в свой проект, чтобы он отображался под папкой Assets в вашем решении:
В этом примере я использую образец базы данных Chinook_Sqlite.sqlite, переименованный в db.sqlite с этого сайта.
Щелкните правой кнопкой мыши по файлу БД и установите для него действие AndroidAsset
. Это обеспечит его включение в каталог ресурсов 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 есть папка с базами данных, в которой будут храниться базы данных; Я не мог заставить его работать, поэтому я просто побежал с этим методом использования существующей БД.
Теперь откройте соединение с БД через класс Sqlite.SqliteConnection:
using (var conn = new SQLite.SQLiteConnection(dbPath))
{
// Do stuff here...
}
Наконец, поскольку 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.
Вот тот, который я использую, и он работает
для более подробной информации проверьте это