terça-feira, 23 de julho de 2013

Android – Gerenciadores de Base de Dados SQLite


Para quem não sabe, o sistema Android tem como banco de dados nativo o SQLite. Todo mundo conhece os denominados sistemas gerenciadores de Banco de Dados (SGBD), que nada mais é do que um conjunto de programas responsáveis pelo gerenciamento de uma base de dados. O foco principal destes softwares é gerenciar o acesso, manipulação e organização dos dados disponibilizando uma interface amigável e de fácil manuseio, permitindo realizar a criação e manutenção das bases de dados. Temos algumas características importantes, sendo:

·         Linguagem de definição de dados (“Data Definition Language” - DDL): linguagem responsável por especificar conteúdos, estruturação e elemento de dados;

·         Linguagem de Manipulação de dados (“Data Manipulation Language” - DML): utilizadas para recuperação, inclusão, remoção e modificação de informações em banco de dados. Temos basicamente dois tipos: As DMLs Procedurais, que exigem que o usuário especifique quais dados são necessários e como obtê-los. Já as Não-Procedurais exigem que o usuário especifique quais dados são necessários sem especificar como obtê-los.

·         Dicionário de dados: definições de elementos de dados e características.

A minha intenção neste artigo é de apresentar alguns aplicativos SGBD (gratuitos) existentes no mercado para a plataforma Android. Estes aplicativos são encontrados na própria loja do Google. Com o próprio dispositivo (celular ou tablet) entre no “Google Play” e pesquise pelo nome “sqlite”. Encontraremos diversos tipos de aplicativos, Ver Imagem 01.

Imagem 01: Google Play.

É importante ressaltar que a instalação destes aplicativos é simples e intuitiva, por isso não abordaremos detalhes.
Dividiremos este artigo em três tópicos, sendo: SQLite Manager, aSQLiteManager e DB Browser.

1-) SQLite Manager

É considerado um poderoso SGBD, combinando uma interface fácil de usar e com inúmeros recursos. Podemos executar diversas operações como criar tabelas, visões, gatilhos e índices. A tela inicial é muito simples e intuitiva, possuindo um botão para localizar o Banco SQLite e uma lista dos bancos registrados na ferramenta. O SQLite Manager possui um Banco padrão chamado “defaultdb.db”, o qual poderá ser visto na Imagem 02.

Imagem 02: Tela inicial do SQLite Manager.   

Ao clicar no banco desejado, teremos diversas tabelas e dois botões, sendo “SQL” e “Info”. Para fins de aprendizado focaremos apenas na tabela “Product”, possuindo os campos: “Id”, “name”, “price”, “description”. Ver Imagem 03.

Imagem 03: Tabelas.

Clicando no botão “SQL” teremos informações como: Caminho da base de dados e comandos pré-definidos como, por exemplo: instruções de SELECT, INSERT, UPDATE, DELETE, CREATE, entre outros. Conseguimos gerenciar praticamente tudo. Clicando no botão “Run” obteremos o “result set” do comando realizado. Já o botão “Hide SQL”, como o próprio nome diz, irá esconder as sugestões de instruções SQL e deixar a mostra apenas os resultados. Em ”History”, temos um histórico. Ver Imagem 04.

Imagem 04: Executando comandos SQL.

Podemos também efetuar alterações diretamente nas tabelas, para isto clique sobre a “Product” e na região superior direita, no caso do android 4.0, temos três pontinhos, que são as opções habilitadas para esta tela. Temos um Menu com os itens: “Insert Row”, “Reload”, “Page Size” e “Run SQL”. Ver Figura 05.

Figura 05: Tabela Product.

Insert Row: Responsável por inserir registros na tabela selecionada. Para fins didáticos inserimos alguns dados e em seguida clicaremos no botão “ok” para confirmar. Ver Imagem 06.

Figura 06: Inserindo Registros.

Reload: Recarregar/Atualizar os dados na tela.
Page Size: Quantidade de registros que serão mostradas da tela.
Run SQL: Tela responsável por executar instruções SQL de Select, Delete, Update e Create.


É também um gerenciador de banco de dados SQLite de código aberto, sendo que a versão 3.6 que estamos utilizando possui algumas características, como:
·         Permitir mostrar arquivos por nome, tamanho, data ou ícone e classificá-los por nome, extensão, tamanho, data;
·         Filtragem de arquivos;
·         Ter uma lista de favoritos;
·         Exportação no formato “Csv”;
·         Importação e Exportação das tabelas com triggers.

Este aplicativo é bem intuitivo, no primeiro momento possuímos quatro botões, sendo:

Abrir Banco de Dados: Localizar e abrir um banco de dados SQLite já existente;
Novo Banco de Dados: Criar um banco de dados desde o início;
Abertos recentemente: Lista de favoritos contendo todos os bancos de dados abertos recentemente;
Sobre: Informações sobre o desenvolvedor desta ferramenta.

Ver Imagem 07.

Figura 07: Tela Inicial do aSQLIteManager.

Ao contrário do “SQLiteManager” citado anteriormente, este aplicativo não possui um Banco de dados padrão, sendo necessário criá-lo. Para isto clique no botão “Novo banco de Dados” e na próxima tela escolha um caminho e um nome para o mesmo clicando no botão “Ok”. Teremos os seguintes botões, sendo:

Tabelas: Gerenciar as tabelas;
Views: Gerenciar as visões;
Indices: Gerenciar os índices;
Query: Executar comandos SQL.

Clicando na região superior direita temos também outros itens de menus, como:

Exportar Banco de Dados: Exportar o banco para uso posterior.
Restaurar Banco de Dados:
Restaurar banco já existente.
Abrir arquivo SQL: Abrir arquivo com instruções SQL pré-compiladas.
Informações da Base:
Informações gerais como versão, codificadores, tamanho da página, quantidade de paginação, etc.
Nova Tabela: local onde iremos criar uma nova tabela se necessário.

Ver Imagem 08 para maiores detalhes.


Figura 08: Gerenciamento das Tabelas, Visões, Índices e Instruções SQL.

Vamos criar uma tabela de “Produtos” contendo o campo “Id” do tipo inteiro, único, auto-incremento e chave primária e a “descrição” do tipo texto. Clique em “Nova Tabela” escolhendo o nome da tabela e em seguida adicione os campos citados anteriormente. O interessante desta ferramenta é que temos uma interface muito amigável nos permitindo realizar tarefas desde inserir valores padrões para os campos até informar chaves estrangeiras e referenciá-las de acordo com sua utilização. Ver Imagem 09.

Figura 09: Criando os campos.

Voltando na tela de gerenciamento (Figura 08), note que a tabela “Produtos” foi adicionada na seção “Tabelas” e a chave primária “Id” na seção “Índices”. Ao clicar sobre a tabela “Produtos” temos um controle total sobre a mesma, contando com os botões:

Campos: Descrição completa dos campos incluindo ordem, nome, tipo, etc...
Novo:
Inclusão de novos dados na tabela.
Dados:
Listagem completa dos dados que estão contidos da tabela.
Na região superior direita, outros recursos como:
Primeiro: Irá navegar até o primeiro registro da tabela.
Último: Irá navegar até o último registro da tabela.
Filtro: Filtrar os dados de acordo com o que desejar.
Exportar Tabela: Exportar a tabela para uma futura consulta.
Exportar para arquivos do tipo CSV: Exportar para arquivos do tipo CSV (arquivos que podem ser lidos no Excel, por exemplo).
Importar arquivos do tipo CSV: Carregar arquivos do tipo CSV, permitindo uma melhor visualização.
Definição da tabela: Contém informações (Instruções de CREATE) da tabela em questão.

Ver Imagem 10.

Figura 10: Tabela Produtos.


Este aplicativo é exclusivamente para acessar as bases de dados SQLite, permitindo inserir, editar, apagar, atualizar os registros ali contidos. Permite a visualização de toda a estrutura da base de dados, como por exemplo: Visões, Índices, tabelas ou Gatilhos. Um recurso que achei interessante é a possibilidade de registrar diversas bases de dados. Outro recurso que também facilita a vida do desenvolvedor é a criação de um histórico de instruções SQL já executada. Em seguida irei descrever algumas de suas funcionalidades. Veremos na Imagem 11 os recursos iniciais.

Figura 11: DB Browser, Recursos Iniciais.

No primeiro impacto podemos conferir os principais recursos deste aplicativo. Na região central temos um histórico de tarefas realizadas e na região esquerda temos quatro botões, sendo:

Query SQL

Especificamente para executar instruções SQL. Ver Imagem 12.

Figura 12: Query SQL – Executando instruções SQL.

Na região superior temos alguns botões:

Hide SQL: “Esconder” a instrução SQL já executada.
Clear SQL: Limpar a instrução SQL para poder criar outra em seguida.
Clear Grid: Limpar os dados que estão na Grid.
Execute: Executar a Instrução SQL.

Explore DB:

Aqui é onde iremos explorar todos os recursos da base de dados, como tabelas, visões, índices ou gatilhos. Com a facilidade do “Touch Screen” podemos visualizar tanto as propriedades como os dados. Imagem 13.

Figura 13: Explore DB – Explorando a Base de Dados.
Connections

Como o próprio nome já diz, é aqui que temos todas as conexões realizadas, todas as bases de dados registradas. Temos a possibilidade de ativar ou desativar uma conexão facilmente. Ver Imagem 14.

Figura 14: Conexões.
Search DB

Permite localizar os arquivos de banco de dados em qualquer pasta, para posteriormente utilizá-los. Ver imagem 15.

Figura 15: Search DB.

Conclusões

Procurei neste artigo abordar um assunto ainda muito “cru” e de pouquíssimas documentações, o uso de gerenciadores de banco de dados SQLite diretamente de um dispositivo (celular ou tablet) usando o sistema Operacional Android.  Ressalto ainda que foram realizados muitos testes em outros aplicativos gratuitos e os três que apresentaram melhores resultados no âmbito de gerenciamento de banco de dados foram estes. Logicamente que poderão existir outros tão bons e fáceis de utilizar, mas no momento desconheço.

Fiquem a vontade para nos mandar e-mails com sugestões de artigos ou dicas para que seja publicado na revista, faremos o possível e o impossível para ampará-los.
Um forte abraço e até o mês que vem!


sexta-feira, 19 de julho de 2013

Asp.Net – Trabalhando com WebServices


O assunto “WebService” já foi discutido em outros artigos de nossa revista, ou seja, o nosso foco principal é demonstrar o funcionamento de uma forma prática no ASP.Net tendo como ferramenta de desenvolvimento o Microsoft Visual Studio. Mas obter informações nunca é demais antes de colocar em prática o uso deste recurso.
Os “WebServices” nasceram com o intuito de compartilhar informações no formato XML utilizando como meio a internet. Utiliza o protocolo SOAP (Simple Object Access Protocol) traduzindo para o português Protocolo Simples de Acesso a Objetos que nada mais é do que um protocolo para troca de informações estruturadas em uma plataforma descentralizada e distribuída. Neste artigo usarei como base um “Webservice” gratuito para obtenção da cotação do dólar. Nossa aplicação possuirá o serviço de WebService e uma pequena aplicação para acessá-lo.

Importante: Este serviço é gratuito, ressaltando que poderá parar de funcionar a qualquer momento ou até mesmo ter diferenças de valores com a cotação real do dólar, por isso servirá apenas como base de aprendizado.

Conhecendo o “WebService”

Acesse o site http://cotacao.republicavirtual.com.br/, note que também temos outros tipos de serviços como Consulta de CEPS, que também poderia ser implementado. No nosso caso usaremos a opção “WebService Cotação de Moedas”. Acessando o link, encontraremos informações para nos auxiliarmos ao decorrer no desenvolvimento de nossa aplicação. Na aba “Exemplos” teremos vários tipos de retorno, como por exemplo: Retorno em XML, em Query String ou em Java-Script. Concentraremos-nos na primeira opção, o retorno em XML, ver imagem 01.

Figura 01: Requisitando o retorno em XML.

O funcionamento será realizado através de uma solicitação HTTP e retornado um documento no formato solicitado.

URL WebService: http://cotacao.republicavirtual.com.br/web_cotacao.php


Criando um exemplo prático

Dividiremos este exemplo em três partes, sendo:

·         Objetos: Onde estão armazenadas as classes utilizadas ao decorrer do desenvolvimento.
·         WSCotacao: Onde será desenvolvido o WebService.
·         BuscaCotacao: Aplicação que irá consumir o WebService.

Crie uma nova “Solution” e a nomeie como desejar. Uma sugestão seria “BuscaCotacao”.

Objetos (Criando a Classe)

Clicando em “File/New/Project...” escolha a opção “Empty Project” para termos um projeto do zero. Em “Name” defina o nome para “Objetos” e em “Solution” altere a opção “Add to solution” para adicioná-lo ao projeto já existente. Ver Imagem 02.

Figura 02: Adicionando recursos ao projeto.

Adicione também uma classe ao projeto, chame-a de “Cotacao”. Esta classe armazenará os seguintes atributos:

- dolar_comercial_venda: Retornar o valor em real (R$) de venda do dólar comercial.
- dólar_comercial_compra: Retornar o valor em real (R$) de compra do dólar comercial.
- dólar_paralelo_venda: Retornar o valor em real (R$) de venda do dólar paralelo.
- dólar_paralelo_compra: Retornar o valor em real (R$) de compra do dólar paralelo.

Dê um duplo clique no arquivo “Cotacao.cs” para codificarmos a classe em questão. Possuiremos os atributos citados anteriormente.

using System;

using System.Text;


namespace Objetos
{
    public class Cotacao
    {
        public string dolar_comercial_compra { get; set; }
        public string dolar_comercial_venda { get; set; }
        public string dolar_paralelo_compra { get; set; }
        public string dolar_paralelo_venda { get; set; }
    }
}

WSCotacao (Criando o WebService)

Esta parte é a mais crucial do artigo, é aqui onde trabalharemos com o WebService. Seguindo os mesmo passos descritos anteriormente, crie um novo projeto, mas só que desta vez crie como “Asp.Net Web Site”. Em “name” defina como “WSCotacao”. Adicione em “References” o objeto “Objetos” (para termos acesso a classe “Cotacao”, Ver Imagem 03.

Figura 03: Adicionando Referências ao projeto.

Este é o momento onde teremos acesso total a classe “Cotacao” implementada anteriormente. O arquivo onde serão publicados os métodos do WebService será do tipo “.asmx”. Para adicioná-lo clique com o botão direito sobre o projeto “WSCotacao” escolhendo “Add/New Item...”. Role até o item “Web Service” e defina em name como “WSConsultaCotacao.asmx”. Ver Imagem 04.

Figura 04: Inserindo um WebService.


Figura 05: WebService Criado.

Abrindo o arquivo o primeiro passo será adicionar as bibliotecas necessárias, Ver Abaixo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using Objetos;
using System.Xml.Linq;

Inicialmente teremos alguns atributos padrões, sendo:

[WebService(Namespace = "http://tempuri.org/")]

O atributo WebService encontrado na definição da classe permite definir o “namespace” para o “WebService”. Por padrão o “namespace” é definido para http://tempuri.org/ podendo ser alterado para uma URL representando sua empresa por exemplo.


[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]


Já o atributo WebServiceBinding que indica que o “WebService” está em conformidade com a especificação WS-I BP 1.1 – “Web Services Interoperability Basic Profile specification”.


[System.ComponentModel.ToolboxItem(false)]


Este atributo diz se a classe ou controle será disponibilizada para a “ToolBox”, ou seja, marcando esta opção para “false” estaremos impondo que este “WebService” não pode ser visto como um item da toolbox.

Temos também um método publicado “HelloWorld”. A diretiva [WebMethod] indica que este atributo ou método será publicado, funcionará como um “WebService” e será visto por outras aplicações. Removeremos este método para em seguida trabalharmos com o nosso.


public class WSConsultaCotacao : System.Web.Services.WebService
{

A classe “WSConsultaCotacao” automaticamente herda da classe “System.Web.Services.WebService”

        [WebMethod]
        public Cotacao ConsultaCotacao()
        {

            Cotacao cotacao = new Cotacao();

            try
            {
XElement objXElement = new XElement("root");
               objXElement.Add(XElement.Load(url));

var dadosCotacao = (from d in  objXElement.Elements("webservicecotacao")
               select new
               {
dolar_comercial_compra = d.Element("dolar_comercial_compra").Value.ToString(),
dolar_comercial_venda = d.Element("dolar_comercial_venda").Value.ToString(),
dolar_paralelo_compra = d.Element("dolar_paralelo_compra").Value.ToString(),
dolar_paralelo_venda = d.Element("dolar_paralelo_venda").Value.ToString()
               }).Single();

cotacao.dolar_comercial_compra = dadosCotacao.dolar_comercial_compra;
cotacao.dolar_comercial_venda = dadosCotacao.dolar_comercial_venda;
cotacao.dolar_paralelo_compra = dadosCotacao.dolar_paralelo_compra;
cotacao.dolar_paralelo_venda =    dadosCotacao.dolar_paralelo_venda;

            }
            catch (Exception ex)
            {
throw new Exception("Erro ao recuperar a Cotação do Dólar: " + ex.Message);
            }
            return cotacao;
        }

O método terá o nome de “ConsultaCotacao” e como retorno o objeto “Cotacao”, que nada mais é do que a classe que criamos no primeiro tópico. A string “url” terá o endereço para retorno dos dados. Estamos passando também o parâmetro “formato=XML”, é neste exato momento que indicamos ao site para termos como retorno um XML com todos os atributos dos valores da cotação do dólar. Crie um objeto do tipo “Cotacao” para armazenarmos os resultados posteriormente. Dentro de um bloco “Try...Catch” usaremos a classe “XElement”, para nos auxiliar a ler e a carregar o retorno dos dados em XML. Temos um conjunto de dados que deverão ser lidos utilizando uma simples instrução LINQ e logo em seguida atribuídas para as correspondentes variáveis da classe “Cotação”.

Importante: O retorno deste WebService possui outras cotações, como por exemplo, o valor do Euro. Não abordaremos neste artigo.


      }
}
Podemos visualizar o resultado no Browser apertando a tecla “F5”. Ver Imagem 06.

Figura 06: WebService em ação.

Conseguimos visualizar e consultar todos os métodos publicados. Publicamos apenas um chamado “ConsultaCotacao”. Para obter mais detalhes é só clicar sobre o mesmo. Ver Imagem 07.

Figura 07: Testando o WebService.

BuscaCotacao (Consumindo o WebService)

Veremos como é fácil consumir um “WebService” no “Asp.Net”. Para isto crie uma aplicação do tipo “Asp.Net Web Site” e defina o nome como “BuscaCotacao”. Clique com o botão direito e escolha “Add Web Reference”. Ver Imagem 08.

Figura 08: Adicionando um WebService na aplicação.

Possuímos três tipos, sendo:

·         Web services in this solution: “WebService” localizado na própria solução. (Usaremos esta opção)
·         Web services on the local machine: “WebService” localizado na máquina local.
·         Browse UDDI Servers on the local network: Lista servidores disponíveis dentro de uma rede local que fornecem serviços de “WebService”.

Clicando na primeira opção automaticamente será encontrado o “WebService” criado. Escolha o mesmo e defina em “web reference name” como “WSConsultaCotacao” finalizando em “Add Reference”. Ver Imagem 09.

Figura 09: Utilizando o WebService criado.

Para os testes finais usaremos um “Web Form” com os seguintes componentes: 1 ScriptManager, 1 UpdateProgress (Para dar uma mensagem informativa ao usuário quando estivermos consumindo o WebService), 1 UpdatePanel (Atualizarmos apenas uma região da aplicação), 5 Labels, 4 TextBoxes e um Button. A Imagem 10 nos dará uma ideia de lay-Out.

Figura 10: Lay-Out Proposto.

O código ASPX correspondente:

<form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <table class="style1">
                    <tr>
                        <td class="style2" colspan="2">
                            <asp:Label ID="Label5" runat="server"
                                style="font-weight: 700; text-align: center"
                                Text="Cotação do Dólar em Real (R$)"></asp:Label>
                        </td>
                    </tr>
                    <tr>
                        <td class="style2" colspan="2">
                         <asp:UpdateProgress ID="UpdateProgress1" runat="server">
                                <ProgressTemplate>
                                    Aguarde, pesquisando...
                                </ProgressTemplate>
                            </asp:UpdateProgress>
                        </td>
                    </tr>
                    <tr>
                        <td class="style2">
<asp:Label ID="Label1" runat="server" Text="Venda Dolar Comercial:" style="text-align: right"></asp:Label>
                        </td>
                        <td class="style4">
<asp:TextBox ID="txtCep" runat="server" MaxLength="10" Width="100px"></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td class="style2">
<asp:Label ID="Label2" runat="server" Text="Compra Dólar Comercial:"
                           style="text-align: right"></asp:Label>
                        </td>
                        <td>
<asp:TextBox ID="txtTipo" runat="server" Width="100px"></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td class="style2">
<asp:Label ID="Label3" runat="server" Text="Venda Dólar Paralelo:"
                           style="text-align: right"></asp:Label>
                        </td>
                        <td class="style4" style="text-align: left">
<asp:TextBox ID="txtLogradouro" runat="server" Width="100px"></asp:TextBox>
                           </td>
                    </tr>
                    <tr>
                        <td class="style2">
<asp:Label ID="Label4" runat="server" Text="Compra Dólar Paralelo:"
                           style="text-align: right"></asp:Label>
                        </td>
                        <td>
<asp:TextBox ID="txtComplemento" runat="server" Width="100px"></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td class="style2" colspan="2">
<asp:Button ID="btnConsultaCEP2" runat="server" OnClick="btnConsulta_Click"
                                Text="Consultar" />
                        </td>
                    </tr>
                </table>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>

Importaremos algumas bibliotecas necessárias:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BuscaCotacao.WSConsultaCotacao;

Usaremos o evento Click() do botão para finalizarmos esta etapa.

protected void btnConsulta_Click(object sender, EventArgs e)
{
WSConsultaCotacao.WSConsultaCotacao objWSConsultaCotacao = new WSConsultaCotacao.WSConsultaCotacao();
                                  
     Cotacao cotacao = new Cotacao();
     cotacao = objWSConsultaCotacao.ConsultaCotacao();

     txtDolComCom.Text = cotacao.dolar_comercial_compra;
     txtDolComVen.Text = cotacao.dolar_comercial_venda;
     txtDolParCom.Text = cotacao.dolar_paralelo_compra;
     txtDolParVen.Text = cotacao.dolar_paralelo_venda;
}

Criamos um objeto para o WebService e outro para o armazenamento do resultado do método “ConsultaCotacao”. Finalizamos inserindo os resultados nos “TextBoxes” correspondentes. Ver Imagem 11 o resultado final.

Figura 11: Exemplo em Run-Time.

Conclusões

Hoje em dia, WebService é um tipo de serviço muito utilizado para realizar integração de sistemas de várias plataformas pelo fato de utilizar o protocolo SOAP para troca de informações e o tipo de arquivo no formato XML. A intenção do artigo deste mês foi de ensinar como trabalhar com este recurso utilizando a plataforma .Net, em uma aplicação “Asp.Net”. Espero que estas dicas propostas os auxilie a desenvolver e a consumir seus próprios WebServices. Um forte abraço e até o mês que vem!

Referências