Я начал использовать плагин Xamarin для Visual Studio для создания приложения для Android.
У меня есть локальная база данных SQL, и я хочу вызвать ее для отображения данных. Я не понимаю, как я могу это сделать. Является ли это возможным?
Я начал использовать плагин Xamarin для Visual Studio для создания приложения для Android.
У меня есть локальная база данных SQL, и я хочу вызвать ее для отображения данных. Я не понимаю, как я могу это сделать. Является ли это возможным?
Подумав, что это тривиальная задача, я оказался неправ, когда попытался создать проект быстрого тестирования. Этот пост будет содержать полное руководство по настройке БД для Android-приложения в Xamarin, которое пригодится в качестве справочника для будущих пользователей Xamarin.
С одного взгляда:
Для начала перейдите в этот репозиторий и загрузите Sqlite.cs; это предоставляет Sqlite API, который вы можете использовать для выполнения запросов к вашей базе данных. Добавьте файл в свой проект в качестве исходного файла.
Затем получите свою БД и скопируйте ее в каталог 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, его модульные тесты и examples в документации Xamarin.
path\to\project\Assets
. Я только что пришел на работу, поэтому пока не могу обновить ответ, сделаю это сегодня вечером.
- person matthewrdev; 11.09.2013
.mdf
или .log
файл? а как создать .sqlite
файл?
- person ; 09.11.2016
Android.App.Application.Context.Assets.Open
не разрешена. Какую ссылку я должен добавить?
- person Rauf; 03.02.2021
Вот тот, который я использую, и он работает
для получения более подробной информации проверьте это