LiteDB – Xamarin.Forms

Olá, neste artigo irei demonstrar como você pode trabalhar com um Banco de Dados local em suas aplicações Xamarin.Forms.

Para este exemplo, escolhi o LiteDB que é um banco de dados NoSQL desenvolvido pelo brasileiro Mauricio David.

 

ADICIONANDO O NUGET PACKAGE

Clique com o botão direito em cima de sua Solution e selecione “Manage NuGet Packages for Solution…”.

1

 

Digite “LiteDB” e selecione o plugin como demonstrado na imagem a seguir.

2

 

Selecione o projeto compartilhado e clique no botão “Install”.

2

 

Preparando o LiteDB

Como o banco de dados é local, é necessário criar uma interface para pegar a pasta e o caminho do banco de dados.

 
Compartilhado


namespace DemoLiteDB
{
public interface IHelper
{
string GetFilePath(string file);
}
}

view raw

IHelper.cs

hosted with ❤ by GitHub

 

Android


using System;
using System.IO;
using DemoLiteDB.Droid;
using Xamarin.Forms;
[assembly: Dependency(typeof(Helper))]
namespace DemoLiteDB.Droid
{
public class Helper : IHelper
{
public string GetFilePath(string file)
{
string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
return Path.Combine(path, file);
}
}
}

view raw

Helper.cs

hosted with ❤ by GitHub

 

iOS


using DemoLiteDB.iOS;
using System;
using System.IO;
using Xamarin.Forms;
[assembly: Dependency(typeof(Helper))]
namespace DemoLiteDB.iOS
{
public class Helper : IHelper
{
public string GetFilePath(string file)
{
string document = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
string library = Path.Combine(document, "..", "Library", "Databases");
if (!Directory.Exists(library))
{
Directory.CreateDirectory(library);
}
return Path.Combine(library, file);
}
}
}

view raw

Helper.cs

hosted with ❤ by GitHub

 

Utilizando o LiteDB

Crie uma classe com as propriedades desejada, para este exemplo eu criei uma classe chamada Customer.cs como demonstrada a seguir.


namespace DemoLiteDB
{
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
}

view raw

Customer.cs

hosted with ❤ by GitHub

 

Xaml

Adicione os seguintes controles

  • Entry – Para utilizar a propriedade “Name” no método Insert e Get.
  • Button Insert – Para inserir um novo customer com o nome digitado no Entry.
  • Button Get – Para pegar o customer no BD que possui o name digitado no Entry.
  • ListView – Para listar os customers cadastrados e quando um elemento selecionado poder realizar a exclusão.


<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms&quot;
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml&quot;
xmlns:local="clr-namespace:DemoLiteDB"
x:Class="DemoLiteDB.MainPage" Title="Demo LiteDB">
<StackLayout Padding="10">
<Entry x:Name="EntryName" Placeholder="Name"/>
<Button Text="Insert" Clicked="Insert"/>
<Button Text="Get" Clicked="Get" />
<ListView x:Name="ListCustomers" ItemSelected="List_Selected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal" Padding="10">
<Label Text="{Binding Id}"></Label>
<Label Text="{Binding Name}"></Label>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>

view raw

MainPage.xaml

hosted with ❤ by GitHub

 

C#

 

Verifica se o banco de dados já existe, caso não exista ele cria.
_dataBase = new LiteDatabase(DependencyService.Get<IHelper>().GetFilePath(Banco.db));

 

Realiza uma consulta de customers
Customers = _dataBase.GetCollection<Customer>();


using System.Linq;
using LiteDB;
using Xamarin.Forms;
namespace DemoLiteDB
{
public partial class MainPage : ContentPage
{
LiteDatabase _dataBase;
LiteCollection<Customer> Customers;
public MainPage()
{
InitializeComponent();
_dataBase = new LiteDatabase(DependencyService.Get<IHelper>().GetFilePath("Banco.db"));
Customers = _dataBase.GetCollection<Customer>();
ListCustomers.ItemsSource = Customers.FindAll();
BindingContext = this;
}
}
}

 

Insert

Método para inserir um novo Customer


private void Insert(object sender, System.EventArgs e)
{
int idCustomer = Customers.Count() == 0 ? 1 : (int) (Customers.Max(x => x.Id) + 1);
Customer customer = new Customer
{
Id = idCustomer,
Name = EntryName.Text,
};
Customers.Insert(customer);
ListCustomers.ItemsSource = Customers.FindAll();
}

 

Get

Método para pegar o primeiro customer que encontrar com o name igual ao digitado no Entry.


private void Get(object sender, System.EventArgs e)
{
Customers = _dataBase.GetCollection<Customer>();
if (Customers.Count() > 0)
{
var customer = Customers.FindAll().FirstOrDefault(x => x.Name == EntryName.Text);
DisplayAlert("id: " +customer?.Id, "Name: "+customer?.Name, "ok");
}
}

 

List_Selected

Método para quando selecionado um elemento da lista, caso a resposta seja “Sim” o elemento será deletado.


private async void List_Selected(object sender, SelectedItemChangedEventArgs e)
{
var action = await DisplayActionSheet("Atenção", "Não", "Sim", "Deletar ?");
if (action == "Sim")
{
var customer = e.SelectedItem as Customer;
Customers.Delete(customer?.Id);
ListCustomers.ItemsSource = Customers.FindAll();
}
}

 

Resultado

ezgif.com-video-to-gif (3)

 

 

Para saber mais sobre o LiteDB acesse: Getting Started

 

Esse e todos os exemplos deste blog encontram-se disponíveis no GitHub.

icongithub

2 comentários em “LiteDB – Xamarin.Forms

Deixe um comentário