• Skip to content
  • Skip to primary sidebar
  • Skip to footer

R Andrade

Blog do Paulo Roberto - Desenvolvimento e arquitetura

Todas as operações CRUD com SQLite no Xamarin.Forms sem usar SQL

2 de abril de 2018 by Paulo Roberto Ramos de Andrade Leave a Comment

Olá pessoal! Tudo bem? Depois de termos aprendido a usar todas as operações SQL com o sqlite-net-pcl, vamos usar recursos do sqlite-net-pcl para realizar as mesmas ações sem precisar usar nenhuma instrução SQL. Ou seja, com o sqlite-net-pcl e PCLExt.Storage, vamos adicionar, remover, atualizar e ler informações sem escrever instruções SQL.

Como sempre, fique à vontade para baixar o código fonte deste artigo para estudos.

O segredo está no fato de que o sqlite-net-pcl permite representar uma tabela através de uma classe, e podemos adicionar atributos para configurar a chave primária. Neste caso, a classe Model representará uma tabela com dois campos: Id com o tipo int e Info com o tipo string. E o campo Id é chave primária (atributo PrimaryKey) e auto incremental (atributo AutoIncrement).

public class Model
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }

    public string Info { get; set; }
}

Na classe App, fazemos basicamente o mesmo procedimento, usando o PCLExt.Storage para abrir ou criar o arquivo banco.db e o sqlite-net-pcl cria a tabela e abre a conexão. Só que desta vez usamos o método CreateTable da Conexao (do tipo SQLiteConnection) para criar uma tabela que armazene dados representados pela classe Model (note que nem especificamos o nome da tabela).

public SQLiteConnection Conexao { get; set; }

public App ()
{
    var pasta = new LocalRootFolder();
    var arquivo = pasta.CreateFile("banco.db", CreationCollisionOption.OpenIfExists);
    Conexao = new SQLiteConnection(arquivo.Path);

    Conexao.CreateTable<Model>();
    InitializeComponent();
    MainPage = new MainPage();
}

A página principal do app propositalmente é a mesma do artigo anterior, e vamos fazer as quatro operações CRUD nos mesmos métodos. Da mesma forma como no artigo anterior, usaremos ações de contexto para atualizar e apagar dados individuais.

<StackLayout>
    <ListView x:Name="ListView">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextCell Text="{Binding Info}">
                    <TextCell.ContextActions>
                        <MenuItem Text="Atualizar" Clicked="MenuItemAtualizar_OnClicked" CommandParameter="{Binding .}" IsDestructive="False" />
                        <MenuItem Text="Apagar" Clicked="MenuItemApagar_OnClicked" CommandParameter="{Binding .}" IsDestructive="True" />
                    </TextCell.ContextActions>
                </TextCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <Button Text="Adicionar" Clicked="ButtonAdicionar_OnClicked" />
    <Button Text="Apagar tudo" Clicked="ButtonApagarTudo_OnClicked" />
</StackLayout>

No método ButtonAdicionar_OnClicked, usamos o método Insert para adicionar uma informação nova. Como estamos criamos um objeto Model, o sqlite-net-pcl já sabe que ele será armazenado na tabela correspondente.

private void ButtonAdicionar_OnClicked(object sender, EventArgs e)
  {
      ((App) Application.Current).Conexao.Insert(new Model {Info = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss.ffff}"});
      CarregarInformacoes();
  }

Já no método ButtonApagarTudo_OnClicked, usamos a instrução DeleteAll para apagar todos os objetos do tipo T do banco, neste caso, Model.

private void ButtonApagarTudo_OnClicked(object sender, EventArgs e)
{
    ((App) Application.Current).Conexao.DeleteAll<Model>();
    CarregarInformacoes();
}

O método CarregarInformacoes() traz as informações do banco para a tela através do método Table, onde T neste caso é Model (ou seja, trazemos todos os objetos Model do banco para a memória). Logo depois, usamos o método ToList() para converter as informações trazida numa lista, que pode facilmente ser configurada como ItemsSource da ListView.

public MainPage()
{
    InitializeComponent();
    CarregarInformacoes();
}

private void CarregarInformacoes()
{
    var list = ((App) Application.Current).Conexao.Table<Model>().ToList();
    ListView.ItemsSource = list;
}

No método MenuItemAtualizar_OnClicked, resgatamos o objeto vindo da ListView, mudamos a informação que queremos e repassamos o objeto atualizado para o banco através do método Update. Todas as informações atualizadas em memória já serão persistidas no banco – desde que a informação que representa a chave primária seja igual, claro.

private void MenuItemAtualizar_OnClicked(object sender, EventArgs e)
{
    var mi = (MenuItem)sender;
    var model = (Model)mi.CommandParameter;
    model.Info = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss.ffff}";
    ((App) Application.Current).Conexao.Update(model);
    CarregarInformacoes();
}

Finalmente em MenuItemApagar_OnClicked, resgatamos o objeto da ListView e passamos sua identificação para o método Delete, onde T é Model. Ou seja, o Model cuja identificação for passada como parâmetro será apagado do banco.

private void MenuItemApagar_OnClicked(object sender, EventArgs e)
{
    var mi = (MenuItem)sender;
    var model = (Model)mi.CommandParameter;
    ((App) Application.Current).Conexao.Delete<Model>(model.Id);
    CarregarInformacoes();
}

E este é o resultado:


E sem nem usar instruções SQL, conseguimos fazer as operações básicas de bando de dados num banco local, com o uso inteligente do sqlite-net-pcl e do PCLExt.Storage. Até a próxima!

[]’s
Paulo Roberto

Filed Under: C#, Mobile, Todas as postagens, Xamarin Tagged With: .net, banco de dados, c#, injeção de dependência do xamarin.forms, mobile, plug-ins xamarin.forms, sqlite, visual studio, xamarin, xamarin.android, xamarin.forms, xamarin.ios

Publicidade

Primary Sidebar

Quem sou eu

Meu nome é Paulo Roberto e tenho 32 anos, com 12 anos de experiência na área. Sou desenvolvedor, autodidata, iniciante nas artes da arquitetura de softwares, eterno interessado em aprender mais técnicas e tecnologias e também interessado em documentar e repassar o pouco que já sei.

Acompanhe o blog nas redes sociais

  • Email
  • Facebook
  • Github
  • Linkedin
  • Twitter

Publicidade

O que foi mais lido no último mês

  • Apagando dados com SQLite, C# e sqlite-net-pcl
  • Trabalhando com o simulador do iOS
  • Convertendo tabelas HTML em arquivos Excel no Front End
  • Todas as operações CRUD com SQLite no Xamarin.Forms

Categorias

Arquitetura de Sistemas ASP.NET MVC ASP.NET Web Api Autenticação e Autorização C# Cors Dicas e Truques Entity Framework JavaScript Mobile N Camadas OWIN Pessoal Segurança Sites que ajudam Softwares Todas as postagens Unit Testing Virtualização Xamarin Xaml

Footer

Pesquisar

Arquivo do blog

Copyright © 2019 · Magazine Pro on Genesis Framework · WordPress · Log in