141
  1 2ª Edição (VENDA E DISTRIBUIÇÃO PROIBIDA) De : Luciano Alves da Silva ([email protected] om.br) www.apostilaandroid.net ApostilaDeAndroid  Rio de Janeiro Fevereiro 2014

Apostila Android BD 2 Edicao Completa

Embed Size (px)

Citation preview

  • 1

    2 Edio

    (VENDA E DISTRIBUIO PROIBIDA)

    De : Luciano Alves da Silva ([email protected])

    www.apostilaandroid.net

    ApostilaDeAndroid

    Rio de Janeiro Fevereiro 2014

  • 2

    Aviso sobre esta apostila

    Antes de iniciar a leitura deste material, veja esses avisos importantes:

    Esse material NO PODER SER DISTRIBUDO, em hiptese alguma, em outros sites da Internet ou atravs outros processos/meios .

    Essa material , em hiptese alguma, NO PODE SER COMERCIALIZADO tanto pela Internet ou de forma impressa.

    Se por acaso voc ver este material sendo distribudo em outro site ou sendo comercializado (sem ser pelo site oficial da apostila), por favor, entre em contato com o autor (ver e-mail na primeira pgina).

  • 3

    Sobre o Autor da Apostila

    Luciano Alves da Silva Bacharelado em Cincia da Computao pela UNISUAM e Ps-Graduado em Docncia do Ensino Superior pelo Instituto A Vez do Mestre (Universidade Cndido Mendes - UCAM). Possui conhecimento e domnio das linguagens de programao Pascal, Java, C/C++, C#, Visual Basic, Delphi, PHP e HTML. J criou Ambientes de Desenvolvimento Integrado (conhecidos como IDE) como o MakeWare (que trabalha com as linguagens Pascal, C++ e Java) e o AlgoWare (interpretador de algoritmos).

    autor tambm dos seguintes livros, pela editora AGBOOK

    Aprenda Passo a Passo a Programar em Android Guia Essencial para Desenvolvedores

    Desenvolvendo Jogos com a Plataforma XNA Guia para Desenvolvedores.

    Desenvolvendo Jogos com a Ferramenta RPG Maker VX Guia do Usurio.

  • 4

    Apresentao

    Este material dedicado para aqueles que desejam trabalhar com banco de dados usando o SQLite, presente na plataforma Android para o armazenamento e gerenciamento de dados.

    Caso voc, que esteja lendo este material, seja iniciante em programao com Android, recomendo antes adquirir no site oficial a Apostila de Android Programando Passo a Passo: Programao Bsica - 6 Edio, pois esse material nada mais do que um complemento da apostila citada. Agora caso voc j possua conhecimento bsico sobre programao com Android, e deseja aprender banco de dados, este material lhe dar todo o passo a passo para a construo de programas em Android que trabalhem com banco de dados.

  • 5

    ndice analtico

    Captulo 1 Fundamentos sobre Banco de Dados ....................................... 6 1.1) A linguagem SQL .................................................................................... 6

    1.1.1) O comando CREATE TABLE ............................................................ 7 1.1.2) O comando INSERT ......................................................................... 7 1.1.3) O comando UPDATE ........................................................................ 8 1.1.4) O comando DELETE ......................................................................... 8 1.1.5) O comando SELECT ......................................................................... 8

    Captulo 2 Usando Banco de Dados no Android (SQLite) ...................... 10 2.1) Trabalhando com o SQLite do Android.................................................. 10

    2.1.1) O mtodo query .............................................................................. 10 2.1.2) O mtodo insert............................................................................... 10 2.1.3) O mtodo update ............................................................................ 11 2.1.4) O mtodo delete.............................................................................. 11 2.1.5) O mtodo execSQL ......................................................................... 12

    2.2) Exemplos de SQL usando as funes do Android ................................ 12 2.2.1) Fazendo uma consulta a tabela (usando SELECT) ........................ 12 2.2.2) Inserindo dados (usando INSERT) ................................................. 13 2.2.3) Atualizando dados (usando UPDATE) ............................................ 13 2.2.4) Removendo dados (usando DELETE) ............................................ 14 2.2.5) Criando uma tabela (usando CREATE TABLE) .............................. 14

    Captulo 3 Programao com Banco de Dados na prtica ...................... 18 3.1 Construindo uma aplicao que ir criar o Banco de Dados ............... 18 3.2 Aplicao que ir registrar informaes no Banco (Primeira Verso) ... 25 3.3 Aplicao que ir registrar informaes no Banco (Segunda Verso) .. 34 3.4 Aplicao que consulta as informaes da tabela ................................ 39 3.5 Aplicao que altera as informaes da tabela (Primeira Verso) ....... 50 3.6 Aplicao que altera as informaes da tabela (Segunda Verso) ...... 61 3.7 Aplicao que exclui registros da tabela (Primeira Verso) ................. 72 3.8 Aplicao que exclui registros da tabela (Segunda Verso) ................ 83

    Captulo 4 Desenvolvendo uma aplicao completa ............................... 91 Concluso a respeito do material ............................................................... 141

  • 6

    Captulo 1 Fundamentos

    sobre Banco de Dados

    tualmente as aplicaes Android (seja ela uma aplicao comercial, jogo e etc.) sempre esto guardando informaes (como por exemplo, o nome do cliente, endereo e etc.). Essas informaes so armazenadas

    normalmente em um banco de dados, podendo esse banco ser on-line (situado em um servidor para essa finalidade) ou local (situado no prprio dispositivo).

    A plataforma Android j oferece (presente em sua arquitetura) um conjunto de recursos (bibliotecas e classes) que permite que ns possamos trabalhar com banco de dados (baseado no SQLite, um sistema gerenciador de banco de dados (SGBD)).

    Para trabalharmos com banco de dados no Android, naturalmente, preciso ter o conhecimento e o domnio da linguagem SQL (Structured Query Language), que uma linguagem padro voltada para manipulao de informaes em um BD (seja ele uma consulta, uma atualizao e etc). Antes de comearmos a trabalhar com BD no Android, precisamos conhecer e entender sobre est linguagem SQL.

    1.1) A linguagem SQL

    A linguagem SQL (Structured Query Language) uma linguagem de consulta estruturada que realiza consultas banco de dados. A SQL dividida em duas sub-linguagens: LMD (Linguagem de Manipulao de Dados ou Data Manipulation Language DML) e LDD (Linguagem de Definio de Dados ou Data Definition Language DDL) . A LDD um conjunto de comandos dentro da SQL usada para a definio das estruturas de dados, fornecendo as instrues que permitem a criao, modificao e remoo das tabelas, assim como criao de ndices. J a LMD o grupo de comandos dentro da linguagem SQL utilizado para a recuperao, incluso, remoo e modificao de informaes em bancos de dados.

    Vamos conhecer agora alguns comandos bsicos muito utilizados da linguagem SQL.

    A

  • 7

    1.1.1) O comando CREATE TABLE

    Esse comando serve para criar tabelas em banco de dados. Veja a sua sintaxe abaixo:

    create table ( [] [, [],..., [ ]])

    Exemplo: Criar uma tabela chamada cadastro com os seguintes campos:

    - codusuario: Do tipo inteiro e com propriedades de chave primria e auto numerao.

    - nome : Do tipo texto e requerido

    - idade : Do tipo inteiro e requerido

    create table cadastro(codusuario integer primary key autoincrement, nome text not null, idade integer not null)

    Outro exemplo : Criar uma tabela chamada cadastro (com os mesmos campos do exemplo acima) no banco de dados, se ela no existir.

    create table if not exists cadastro(codusuario integer primary key autoincrement, nome text not null, idade integer not null)

    1.1.2) O comando INSERT

    Esse comando serve para inserir dados em uma tabela j existente. Veja a sua sintaxe abaixo:

    insert into (,...) values(,...,)

    Exemplo: Adicionar dados na tabela cadastro (que foi criada com o comando CREATE TABLE), conforme mostrado abaixo:

    nome : Luciano idade : 23

  • 8

    OBS: Como o campo codusuario do tipo auto-numerao, o valor dele j definido automaticamente.

    insert into cadastro(nome,idade) values(Luciano,23)

    1.1.3) O comando UPDATE

    Esse comando serve para atualizar dados de uma tabela j existente. Veja a sua sintaxe abaixo:

    update set = [ ,..., = ] where

    Exemplo: Atualizar a idade do primeiro registro (Luciano) para 27 anos.

    update cadastro set idade = 27 where codusuario=1

    1.1.4) O comando DELETE

    Esse comando serve para remover dados de uma tabela j existente. Veja a sua sintaxe abaixo:

    delete from where

    Exemplo: Remover o primeiro registro da tabela (Luciano)

    delete from cadastro where codusuario=1

    1.1.5) O comando SELECT

    Esse comando serve para fazer consultas em uma tabela j existente. Veja a sua sintaxe abaixo:

    select [,,...,] from where

  • 9

    Exemplos :

    Mostrar todos os dados cadastrados na tabela

    select codusuario,nome,idade from cadastro

    Mostrar todos os nomes cuja idade seja maior que 25.

    select nome from cadastro where (idade >= 25)

    Mostrar todos os nomes cujo prefixo seja David, ou melhor, todos que se chamam David independente do sobrenome.

    select nome from cadastro where (nome like David%)

    A partir de agora vamos ver abaixo algumas funes do Android que trabalham com banco de dados.

  • 10

    Captulo 2 Usando Banco de

    Dados no Android (SQLite)

    2.1) Trabalhando com o SQLite do Android

    No Android existe um pacote chamado android.sqlite que possui vrias classes, muitas delas para o tratamento de banco de dados. Uma dessas classes (que a que vamos trabalhar neste material) a classe chamada SQLiteDataBase, que possui os seguintes mtodos, conforme mostrado em seguida:

    2.1.1) O mtodo query

    O mtodo query realiza uma consulta SQL no banco de dados (equivale ao comando SELECT). Essa funo retorna uma instncia (objeto) do tipo Cursor. Vejamos a sintaxe do mtodo em seguida:

    Cursor query(String , String[] , String , String[] , String , String , String )

    Vamos conhecer os parmetros que iremos utilizar dessa funo:

    : Neste parmetro voc informa o nome da tabela.

    : Neste parmetro a(s) coluna(s) que o banco possui.

    : Aqui voc informa a condio de busca de dados. Este parmetro funciona como se fosse a clausula where do SQL, onde informada a condio de busca.

    O restante dos parmetros iremos trabalhar em seu valor null.

    2.1.2) O mtodo insert

    O mtodo insert realiza uma insero de dados na tabela (equivale ao comando INSERT). Vejamos a sintaxe deste mtodo:

    long insert(String , String , ContentValues )

  • 11

    Essa funo possui trs parmetros:

    : Neste parmetro voc informa o nome da tabela.

    : O SQL no permite a insero de linhas em branco, logo, se o valor de uma coluna for vazio, ele ser iniciado com o valor null.

    : Este parmetro possui os valores a serem adicionados na tabela.

    2.1.3) O mtodo update

    O mtodo update realiza uma atualizao de dados na tabela (equivale ao comando UPDATE do SQL). Vejamos agora a sintaxe deste mtodo :

    int update(String , ContentValues , String , String )

    Essa funo possui trs parmetros:

    : Neste parmetro voc informa o nome da tabela.

    : Este parmetro possui os valores a serem adicionados na tabela.

    : Aqui voc informa a condio para a realizao da atualizao dos dados.

    : Aqui voc informa os argumentos relativos condio informada.

    2.1.4) O mtodo delete

    O mtodo delete realiza a remoo de dados na tabela (equivale ao comando DELETE do SQL). Vejamos a sintaxe deste mtodo:

    int delete(String , String , String )

    Essa funo possui trs parmetros:

    : Neste parmetro voc informa o nome da tabela.

  • 12

    : Aqui voc informa a condio para a realizao da remoo dos dados da tabela.

    : Aqui voc informa os argumentos relativos condio informada.

    2.1.5) O mtodo execSQL

    O mtodo execSQL executa uma consulta SQL (como CREATE TABLE, INSERT INTO, UPDATE, DELETE e etc.). No possvel usar a clausula SELECT nesta funo. Para esse tipo de situao, use o mtodo query. Vejamos a sintaxe deste mtodo:

    void execSQL(String sql)

    Vamos fazer algumas comparaes da funo execSQL, que permite sintaxes de comando SQL com as demais funes, como update,insert e delete para a realizao de uma consulta SQL.

    2.2) Exemplos de SQL usando as funes do Android

    2.2.1) Fazendo uma consulta a tabela (usando SELECT)

    - Comando SQL :

    select codusuario, nome, idade from cadastro

    - Usando a funo query :

    query("cadastro", (new String[] {"codusuario","nome","idade"}), null, null, null, null, null);

    - Comando SQL :

    select nome from cadastro where idade > 24

    - Usando a funo query :

  • 13

    query("cadastro", (new String[] {"nome"}),"idade > 24" , null, null, null, null);

    2.2.2) Inserindo dados (usando INSERT)

    - Comando SQL :

    insert into cadastro(nome,idade) values(Luciano,23)

    - Usando a funo execSQL

    execSQL("insert into cadastro(nome,idade) values(Luciano,23); ");

    Usando a funo insert :

    ContentValues valor = new ContentValues();

    valor.put("nome", "Luciano" ); valor.put("idade", "23");

    insert("cadastro",null,valor);

    2.2.3) Atualizando dados (usando UPDATE)

    - Comando SQL :

    update cadastro set idade = 27 where codusuario=1

    - Usando a funo execSQL

    execSQL("update cadastro set idade = 27 where (codusuario=1); ");

    Usando a funo update :

    ContentValues valor = new ContentValues();

    valor.put("idade", "27");

    update("cadastro",valor, "codusuario=1",null);

  • 14

    2.2.4) Removendo dados (usando DELETE)

    - Comando SQL :

    delete from cadastro where codusuario=1

    - Usando a funo execSQL

    execSQL("delete from cadastro where (codusuario=1); ");

    Usando a funo delete :

    delete("cadastro", "codusuario=1",null);

    2.2.5) Criando uma tabela (usando CREATE TABLE)

    - Comando SQL :

    create table cadastro(codusuario integer primary key autoincrement, nome text not null, idade integer not null)

    - Usando a funo execSQL

    execSQL("create table cadastro(codusuario integer primary key autoincrement, nome text not null, idade integer not null); ");

    Agora vamos conhecer as funes responsveis por criar e abrir banco de dados no Android.

    SQLDatabase openOrCreateDatabase(String nome_do_banco,int mode, CursorFactory cf);

    Essa funo abre ou cria um novo banco de dados. Voc deve especificar o nome do banco e o modo de abertura (somente leitura ; somente escrita e etc.) e um terceiro parmetro, que normalmente null. Veja um exemplo abaixo:

    SQLDatabase db;

    db = openOrCreateDatabase("dbbanco", Context.MODE_PRIVATE, null);

    O comando acima abre ou cria o banco de dados chamado dbbanco.

  • 15

    Quando realizamos uma consulta do tipo SELECT usando a funo query, ela retorna um objeto do tipo Cursor, onde nela esto armazenados os registros solicitados pela consulta. Vamos ver abaixo os mtodos da classe Cursor:

    Mtodo Descrio

    boolean moveToFirst() Move o cursor para o primeiro registro da tabela.

    boolean moveToPrevious() Move o cursor para o registro anterior da tabela.

    boolean moveToNext() Move o cursor para o prximo registro da tabela.

    boolean moveToLast() Move o cursor para o ltimo registro da tabela.

    int getCount() Retorna o nmero de registros da tabela.

    int getColumnIndex(String columnName) Retorna o ndice da coluna na tabela, atravs do seu nome, que passado como parmetro.

    String getColumnName(int columnIndex) Retorna o nome da coluna na tabela, atravs do seu ndice, que passado como parmetro.

    int getInt(int columnIndex)

    Retorna o valor do campo, tendo como seu parmetro o seu ndice, convertido em int. Lembre-se : o ndice do primeiro campo 0, o ndice do segundo campo 1 e assim por diante.

    float getFloat(int columnIndex)

    Retorna o valor do campo, tendo como seu parmetro o seu ndice, convertido em float. Lembre-se : o ndice do primeiro campo 0, o ndice do segundo campo 1 e assim por diante.

    double getDouble(int columnIndex)

    Retorna o valor do campo, tendo como seu parmetro o seu ndice, convertido em double. Lembre-se : o ndice do primeiro campo 0, o ndice do segundo campo 1 e assim por diante.

    short getShort(int columnIndex)

    Retorna o valor do campo, tendo como seu parmetro o seu ndice, convertido em short. Lembre-se : o ndice do primeiro campo 0, o ndice do segundo campo 1 e assim por diante.

  • 16

    Vou mostrar agora um exemplo para que voc tenha um melhor entendimento do mecanismo de banco de dados do Android.

    Imagine uma tabela chamada cadastro com os seguintes dados abaixo:

    nome idade Amanda 32 Bianca 30 Bruna 23 Carla 20

    Agora, observe a linha de cdigo abaixo:

    SQLDatabase db;

    db = openOrCreateDatabase("dbbanco", Context.MODE_PRIVATE, null);

    Cursor c = db.query("cadastro", (new String[] {"nome","idade"}), "idade < 32", null, null, null, null);

    Observe que a linha acima cria um objeto do tipo Cursor que vai receber o resultado da consulta da funo query, que retorna uma instncia do mesmo tipo. Logo, a instncia retornada pela funo query na verdade, retorna uma tabela resultante da consulta. Veja esse resultado abaixo:

    nome idade Bruna 23 Carla 20

    Continuando a codificao. Veja a linha abaixo:

    c.moveToFirst();

    A linha acima coloca o ponteiro no primeiro registro da tabela. A linha:

    String nome = c.getString(0);

    Retorna o valor do campo nome do primeiro registro, no caso, Bruna. Veja agora a prxima linha:

    int idade = c.getInt(1);

    Retorna o valor do campo idade do primeiro registro, no formato int. Neste caso, o valor retornado 23. A linha:

    c.moveToNext();

  • 17

    A linha acima avana para o prximo registro. A linha:

    nome = c.getString(0);

    Retorna o valor do campo nome do segundo registro, no caso, Carla. Veja agora a prxima linha:

    int idade = c.getInt(1);

    Retorna o valor do campo idade do segundo registro, no formato int. Neste caso, o valor retornado 20.

    Bom, com certeza voc entendeu como funciona o mecanismo de manipulao de banco de dados no Android. Agora vamos por esse aprendizado na prtica, comeando desenvolvendo algumas aplicaes Android bsicas.

  • 18

    Captulo 3 Programao com

    Banco de Dados na prtica

    o captulo anterior vimos os comandos de SQL presentes na classe SQLiteDataBase para a manipulao de informaes. Agora iremos ver na prtica como usar os comandos abordados no captulo anterior

    atravs da construo de pequenas aplicaes bsicas, passo a passo.

    3.1 Construindo uma aplicao que ir criar o Banco de Dados

    A nossa primeira aplicao que iremos construir ir criar o nosso Banco , como tambm a nossa tabela que iremos utilizar para inserir e guardar as nossas informaes.

    Para isso, vamos criar um novo projeto no Android de acordo com as informaes abaixo:

    Application Name: AplicacaoBancoDeDados

    Project Name: AplicacaoBancoDeDados

    Package Name : com.example.aplicacaobancodedados

    Minimum Required SDK : API 14: Android 4.0 (Ice Cream Sandwich)

    Activity Name: BancoDeDadosActivity

    Layout Name : activity_banco_de_dados

    Depois de criar o nosso projeto no Android vamos colocar dentro do diretrio drawable-mdpi (presente dentro da pasta res do projeto) todas as imagens que acompanham este material.

    Feito o que foi solicitado acima, vamos escrever o seguinte cdigo XML para a tela da nossa aplicao:

    N

  • 19

  • 20

    android:textSize="20sp" />

    Feito isso teremos o seguinte resultado abaixo:

    Tela da nossa aplicao

    Agora vamos no arquivo BancoDeDadosActivity.java para digitarmos o seguinte cdigo seguinte:

  • 21

    package com.example.aplicacaobancodedados;

    import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.view.Menu; import android.view.View; import android.widget.*; import android.view.*;

    public class BancoDeDadosActivity extends Activity {

    Button btcriarbanco; SQLiteDatabase db;

    @Override protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState); setContentView(R.layout.activity_cria_banco_de_dados); btcriarbanco = (Button) findViewById(R.id.btcriarbanco);

    btcriarbanco.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View view) {

    try {

    db = openOrCreateDatabase("banco_dados", Context.MODE_PRIVATE, null);

    db.execSQL("create table if not exists" + "usuarios(numreg integer primary key" + " autoincrement, nome text not null, telefone text " + "not null," + "email text not null)");

    AlertDialog.Builder dialogo = new AlertDialog.Builder(CriaBancoDeDadosActivity.this);

    dialogo.setTitle("Aviso") .setMessage("Banco de dados criado com sucesso") .setNeutralButton("OK", null) .show();

    }catch (Exception e){

    }

    } }); }

    }

  • 22

    Irei comentar algumas linhas de cdigo do programa. A instruo :

    db = openOrCreateDatabase("banco_dados", Context.MODE_PRIVATE, null);

    Cria (ou abre, caso j exista) o nosso banco de dados, cujo nome se chama banco_dados atravs do mtodo openOrCreateDataBase do objeto db .

    A prxima instruo :

    db.execSQL("create table if not exists " + usuarios(numreg integer primary key" + " autoincrement, nome text not null, telefone text " + "not null," + "email text not null)");

    Cria uma tabela (caso ela no exista) dentro do banco de dados chamada usuarios, com os seus devidos campos, atravs do mtodo execSQL. No parmetro do mtodo passamos uma string que contm uma instruo SQL do tipo create table, que ir criar a tabela que iremos trabalhar em nossa aplicao.

    Vamos executar a nossa aplicao, o resultado voc confere na figura seguinte:

    Aplicao em execuo

  • 23

    Para criarmos o nosso banco basta clicarmos no boto presente em nossa aplicao. Feito isso ser exibida a seguinte mensagem abaixo:

    Aplicao em execuo Banco de dados criado com sucesso

    Como confirmar se o banco de dados realmente foi criado ?

    Para confirmarmos se o banco de dados foi realmente criado, podemos utilizar o recurso File Explorer , onde atravs dele podemos visualizar a estrutura e diretrios e arquivos presentes dentro do emulador. Para visualizarmos o File Explorer basta irmos no menu Window / Show View Others. Feito isso ir se abrir a seguinte caixa de dilogo:

  • 24

    Caixa de dilogo Show View

    Depois de abrir a caixa de dilogo acima, expanda o diretrio Android e em seguida selecione a opo File Explorer, conforme mostrado em seguida:

    Selecionando o item File Explorer

  • 25

    Feito isso o File Explorer ir se abrir no ADT, conforme podemos conferir na figura seguinte:

    File Explorer em exibio

    OBS: Se voc por acaso no ver nada no File Explorer, feche e reinicie o emulador.

    O diretrio onde o nosso banco de dados foi criado dentro do Android o data/data/com.example.aplicacaobancodedados/databases/. Confira na figura seguinte :

    Visualizando o banco de dados

    3.2 Aplicao que ir registrar informaes no Banco (Primeira Verso)

    Vamos construir agora, dentro do mesmo projeto, uma aplicao que ir registrar as informaes dentro da nossa tabela dentro do Banco de Dados (a tabela usuarios). Esse programa estar dividido em duas verses. Essa ser a primeira verso do programa, onde iremos trabalhar com o mtodo execSQL para a insero das informaes na tabela (atravs de comando SQL).

    Vamos criar agora um nova aplicao, seguindo os passos a seguir:

  • 26

    Clique com o boto direito sobre o nome do projeto e selecione New / Others. Na caixa de dilogo que se abre, selecione dentro do diretrio Android a opo Android Activity, conforme mostra a figura abaixo:

    Caixa de dilogo New

    Aps selecionar a opo acima clique no boto Next. Na caixa de dilogo seguinte pressione novamente o boto Next. Agora na caixa de dilogo que aparece, digite as seguintes informaes abaixo:

    Activity Name: GravaRegistrosActivity

    Layout Name : activity_grava_registros

    Dentro do arquivo activity_grava_registros.xml vamos escrever o seguinte cdigo XML abaixo:

    Depois de criarmos o nosso projeto, vamos copiar para dentro do diretrio drawable-mdpi o arquivo icone_cadastro.png (que acompanha este material), que ser o cone de nossa aplicao. Feito isso, vamos no arquivo activity_grava_registros.xml para adicionarmos o cdigo XML da tela de nossa aplicao:

  • 27

  • 28

    android:textSize="18sp" />

  • 29

    Feito o que foi solicitado, salve o arquivo activity_grava_registros.xml. Vejamos na figura a tela da nossa aplicao:

    Tela da nossa aplicao

    Agora dentro do arquivo GravaRegistrosActivity.java vamos digitar o seguinte cdigo abaixo:

    package com.example.aplicacaobancodedados;

    import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.view.View; import android.widget.Button; import android.widget.EditText;

  • 30

    public class GravaRegistrosActivity extends Activity {

    Button btcadastrar; EditText ednome, edtelefone, edemail;

    SQLiteDatabase db;

    @Override protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState); setContentView(R.layout.activity_grava_registros); btcadastrar = (Button) findViewById(R.id.btcadastrar);

    ednome = (EditText) findViewById(R.id.ednome); edtelefone = (EditText) findViewById(R.id.edtelefone); edemail = (EditText) findViewById(R.id.edemail);

    try { db = openOrCreateDatabase("banco_dados", Context.MODE_PRIVATE, null); } catch(Exception e) { MostraMensagem("Erro : " + e.toString()); }

    btcadastrar.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View arg0) {

    String nome = ednome.getText().toString(); String telefone = edtelefone.getText(). toString(); String email = edemail.getText().toString();

    try {

    db.execSQL("insert into usuarios(nome," + "telefone, email) values('" + nome + "','" + telefone + "','" + email + "')");

    MostraMensagem("Dados cadastrados com sucesso");

    } catch(Exception e) { MostraMensagem("Erro : " + e.toString()); }

    } }); }

  • 31

    public void MostraMensagem(String str) { AlertDialog.Builder dialogo = new AlertDialog.Builder(GravaRegistrosActivity.this);

    dialogo.setTitle("Aviso"); dialogo.setMessage(str); dialogo.setNeutralButton("OK", null); dialogo.show(); }

    }

    Vamos a explicao de algumas linhas de cdigo. A instruo:

    String nome = ednome.getText().toString(); String telefone = edtelefone.getText().toString(); String email = edemail.getText().toString();

    Obtm as informaes digitadas nos campos nome, telefone e email (representado respectivamente pelos componentes/objetos ednome, edtelefone e edmail) e atribui os seus valores para as variveis de mesmo nome : nome, telefone e email.

    Na instruo seguinte :

    db.execSQL("insert into usuarios(nome,telefone, email) values('" + nome + "','" + telefone + "','" + email + "')");

    Realiza a insero dos dados na tabela usurios por meio da instruo insert da linguagem SQL, atravs do mtodo execSQL.

    Vamos abrir agora o arquivo activity_banco_de_dados.xml (no modo Graphical Layout) para inserirmos o seguinte componente abaixo, abaixo do boto rotulado Criar Banco de Dados):

    Button

    Propriedade Valor Id Btcadastrardados

    Text Cadastrar Dados Width 200dp

    Veja o resultado na figura seguinte :

  • 32

    Tela da aplicao em construo

    Agora vamos abrir novamente o arquivo BancoDeDadosActivity.java para digitarmos as seguintes instrues destacadas em azul abaixo:

    public class BancoDeDadosActivity extends Activity {

    Button btcriabanco; Button btcadastrardados; SQLiteDatabase db;

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_banco_de_dados);

    btcriabanco = (Button) findViewById(R.id.btcriarbanco); btcadastrardados = (Button) findViewById(R.id.btcadastrardados); btcadastrardados.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent gravaRegistroActivity = new Intent(BancoDeDadosActivity.this, GravaRegistrosActivity.class); BancoDeDadosActivity.this. startActivity(gravaRegistroActivity); } });

  • 33

    btcriabanco.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View view) {

    :

    } }); }

    }

    Depois de escrever o cdigo acima, vamos executar a nossa aplicao. Veja o resultado na figura seguinte:

    Aplicao em execuo

    Experimente agora realizar um cadastro de um usurio e em seguida, clique no boto cadastrar para armazenar as informaes dentro da tabela usuarios" presente dentro do banco de dados. Veja o resultado na figura seguinte:

  • 34

    3.3 Aplicao que ir registrar informaes no Banco (Segunda Verso)

    Na verso anterior que desenvolvemos da aplicao, o registro das informaes na tabela usuarios" eram realizados atravs do uso da instruo SQL insert , expressa dentro do mtodo execSQL. Agora vamos realizar a insero dos dados atravs do mtodo insert presente dentro da classe SQLiteDatabase.

    Vamos agora criar uma nova Activity (Atividade) clicando com o boto direito sobre o nome do projeto e em seguida New / Other. Na caixa de dilogo que se abre, selecione a opo Android Activity (dentro da pasta Android). Clique no boto Next at avanar a seo New Blank Activity, conforme mostra a figura seguinte:

    Caixa de dilogo New Activity (New Blank Activity)

    Agora vamos preencher os seguinte campos abaixo:

    Activity Name: GravaRegistros2Activity

    Layout Name : activity_grava_registros2

    Aps criar a Activity , vamos dentro do arquivo activity_grava_registros2.xml para escrevermos o mesmo cdigo XML do arquivo

  • 35

    activity_grava_registros.xml. Depois de copiar o cdigo para o arquivo, salve as alteraes.

    Depois disso vamos abrir o arquivo GravaRegistros2Activity.java para digitarmos o seguinte cdigo abaixo:

    package com.example.aplicacaobancodedados;

    import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.view.View; import android.widget.Button; import android.widget.EditText;

    public class GravaRegistros2Activity extends Activity {

    Button btcadastrar;

    EditText ednome; EditText edtelefone; EditText edemail;

    SQLiteDatabase db;

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_grava_registros2);

    btcadastrar = (Button) findViewById(R.id.btcadastrar);

    ednome = (EditText) findViewById(R.id.ednome); edtelefone = (EditText) findViewById(R.id.edtelefone); edemail = (EditText) findViewById(R.id.edemail);

    try { db = openOrCreateDatabase("banco_dados", Context.MODE_PRIVATE, null); } catch(Exception e) { MostraMensagem("Erro : " + e.toString()); }

    btcadastrar.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View arg0) {

    String nome = ednome.getText().toString(); String telefone = edtelefone.getText() .toString(); String email = edemail.getText().toString();

  • 36

    ContentValues valor = new ContentValues();

    valor.put("nome", nome); valor.put("telefone", telefone); valor.put("email", email);

    try {

    db.insert("usuarios", null,valor); MostraMensagem("Dados cadastrados com sucesso");

    } catch(Exception e) { MostraMensagem("Erro : " + e.toString()); }

    } });

    }

    public void MostraMensagem(String str) { AlertDialog.Builder dialogo = new AlertDialog.Builder(GravaRegistros2Activity.this);

    dialogo.setTitle("Aviso"); dialogo.setMessage(str); dialogo.setNeutralButton("OK", null); dialogo.show(); }

    }

    Irei comentar aqui agora algumas linhas do nosso programa de cadastro. O cdigo presente dentro do boto cadastrar da aplicao possui o seguinte conjunto de instrues :

    ContentValues valor = new ContentValues();

    valor.put("nome", nome); valor.put("telefone", telefone); valor.put("email", email);

    try {

    db.insert("usuarios", null,valor); MostraMensagem("Dados cadastrados com sucesso");

    } catch(Exception e) { MostraMensagem("Erro : " + e.toString()); }

  • 37

    Esse conjunto de instrues mostrados anteriormente, funciona de forma similar ao mtodo execSQL (utilizado na verso do programa anterior), executando a instruo INSERT da linguagem SQL. Explicarei passo a passo as etapas de execuo. O primeiro bloco de instrues:

    ContentValues valor = new ContentValues();

    valor.put("nome", nome); valor.put("telefone", telefone); valor.put("email", email);

    Cria o objeto do tipo ContentValues chamado valor . Dentro desse objeto armazenamos os valores a serem adicionados no Banco de Dados atravs do mtodo put. Esse mtodo possui dois argumentos: No primeiro argumento do mtodo informado o nome do campo presente dentro da tabela (onde iremos armazenar as informaes) e no segundo argumento informamos o dado que aquele campo ir assumir.

    Na instruo seguinte:

    db.insert("usuarios", null,valor);

    Executamos o mtodo insert presente dentro do objeto db (do tipo SQLiteDataBase) que responsvel por inserir as informaes dentro da tabela usuarios" (funcionamento similar ao da instruo INSERT da linguagem SQL).

    Agora vamos abrir o arquivo activity_banco_dados.xml e dentro da tela da aplicao, vamos adicionar um componente do tipo Button (abaixo do boto Cadastrar Dados), de acordo com a tabela abaixo:

    Button

    Propriedade Valor Id btcadastrardados2

    Text Cadastrar Dados (2 Edio)

    Width 200dp

    Feito isso teremos o seguinte resultado:

  • 38

    Tela da aplicao em execuo

    Agora dentro do arquivo BancoDeDadosActivity.java vamos escrever as seguintes instrues destacadas em azul abaixo:

    public class BancoDeDadosActivity extends Activity {

    Button btcriabanco; Button btcadastrardados; Button btcadastrardados2; SQLiteDatabase db;

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_banco_de_dados);

    btcriabanco = (Button) findViewById(R.id.btcriarbanco); :

    Btcadastrardados2 = (Button) findViewById(R.id.btcadastrardados2);

    btcadastrardados.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent gravaRegistroActivity2 = new Intent(BancoDeDadosActivity.this, GravaRegistrosActivity2.class);

  • 39

    BancoDeDadosActivity.this. startActivity(gravaRegistroActivity2); } });

    Depois de escrever o cdigo acima, vamos executar a nossa aplicao. Veja o resultado na figura seguinte:

    Aplicao em execuo

    Experimente agora realizar um segundo cadastro utilizando a segunda verso do nosso programa.

    3.4 Aplicao que consulta as informaes da tabela

    Agora vamos desenvolver uma aplicao (Activity) que ir realizar a consulta das informaes que foram gravadas na tabela atravs das aplicaes desenvolvidas anteriormente.

    Vamos agora criar uma nova Activity (Atividade) clicando com o boto direito sobre o nome do projeto e em seguida New / Other. Na caixa de dilogo que se abre, selecione a opo Android Activity (dentro da pasta Android). Clique no boto Next at avanar a seo New Blank Activity. Na tela em exibio vamos informar as seguintes dados:

  • 40

    Activity Name: ConsultaDadosActivity

    Layout Name : activity_consulta_dados

    Depois de preencher as informaes acima, clique em Finish para que o processo seja finalizado.

    Agora dentro da pasta drawable-mdpi vamos adicionar os arquivos icone-consulta.png, botao_primeiro.png, botao_anterior.png, botao_proximo.png e botao_ultimo.png que iremos utilizar em nosso programa de consulta. Feito isso, vamos adicionar dentro do arquivo activity_consulta_dados.xml o seguinte cdigo XML.

  • 41

  • 42

    android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="#2a58b4" android:textSize="18sp" />

  • 43

    Depois de inserir o cdigo dentro do arquivo activity_consulta_dados.xml , vamos salvar as alteraes. Depois disso, vamos abrir o arquivo ConsultaDadosActivity.java para digitarmos o seguinte cdigo abaixo:

    package com.example.aplicacaobancodedados;

    import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.view.Menu; import android.view.View; import android.widget.ImageView; import android.widget.TextView;

    public class ConsultaDadosActivity extends Activity {

    TextView txtnome, txttelefone, txtemail,txtstatus_registro;

    SQLiteDatabase db;

    ImageView imgprimeiro, imganterior, imgproximo, imgultimo;

    int indice;

    Cursor c;

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_consulta_dados);

    txtnome = (TextView) findViewById(R.id.txtnome); txttelefone = (TextView) findViewById(R.id.txttelefone);

    txtemail = (TextView) findViewById(R.id.txtemail); txtstatus_registro = (TextView) findViewById(R.id.txtstatus_registro);

    txtnome.setText(""); txttelefone.setText(""); txtemail.setText("");

    imgprimeiro = (ImageView) findViewById(R.id.imgprimeiro); imganterior = (ImageView) findViewById(R.id.imganterior); imgproximo = (ImageView) findViewById(R.id.imgproximo); imgultimo = (ImageView) findViewById(R.id.imgultimo);

  • 44

    try {

    //Abre o banco de dados db = openOrCreateDatabase ("banco_dados",Context.MODE_PRIVATE, null);

    c = db.query("usuarios",new String [] {"nome","telefone","email"}, null,null,null,null,null);

    if(c.getCount() > 0) {

    //Move para o primeiro registro c.moveToFirst(); indice = 1;

    txtnome.setText(c.getString(0));//Obtem o nome txttelefone.setText(c.getString(1));//Obtm o telefone txtemail.setText(c.getString(2));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount());

    } else {

    txtstatus_registro.setText("Nenhum Registro");

    }

    imgprimeiro.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View view) {

    if(c.getCount() > 0) { //Move para o primeiro registro c.moveToFirst(); indice = 1; txtnome.setText(c.getString(0));//Obtem o nome txttelefone.setText(c.getString(1));//Obtm o //telefone txtemail.setText(c.getString(2));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); }

    } });

    imganterior.setOnClickListener(new View.OnClickListener() {

  • 45

    @Override public void onClick(View v) {

    if(c.getCount() > 0) { if(indice > 1) {

    indice--; //Move para o registro anterior c.moveToPrevious();

    txtnome.setText(c.getString(0));//Obtem o nome txttelefone.setText(c.getString(1));//Obtm o telefone txtemail.setText(c.getString(2));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); } } } });

    imgproximo.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View arg0) {

    if(c.getCount() > 0) { if(indice != c.getCount()) {

    indice++; //Move para o prximo registro c.moveToNext();

    txtnome.setText(c.getString(0));//Obtem o nome txttelefone.setText (c.getString(1));//Obtm o telefone txtemail.setText (c.getString(2));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount());

    } }

    } });

    imgultimo.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) {

    if(c.getCount() > 0) { //Move para o ltimo registro

  • 46

    c.moveToLast(); indice = c.getCount();

    txtnome.setText(c.getString(0));//Obtem o nome txttelefone.setText(c.getString(1));//Obtm o //telefone txtemail.setText(c.getString(2));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); }

    } });

    }catch(Exception e) { MostraMensagem("Erro : " + e.toString()); }

    }

    public void MostraMensagem(String str) { AlertDialog.Builder dialogo = new AlertDialog.Builder(ConsultaDadosActivity.this);

    dialogo.setTitle("Aviso"); dialogo.setMessage(str); dialogo.setNeutralButton("OK", null); dialogo.show(); } }

    Irei explicar agora algumas linhas de cdigo do nosso programa. Ao carregarmos o nosso programa , executado o seguinte trecho de cdigo :

    db = openOrCreateDatabase ("banco_dados",Context.MODE_PRIVATE, null);

    c = db.query("usuarios",new String [] {"nome","telefone","email"}, null,null,null,null,null);

    A primeira instruo realiza a abertura do nosso Banco de Dados por meio da instruo openOrCreateDataBase.

    A segunda instruo realiza a consulta de todas as informaes presentes dentro da tabela usuarios atravs do mtodo query do objeto db . O resultado retornado para o objeto c (como uma instncia da classe Cursor)

  • 47

    A navegao entre as informaes feita atravs dos botes presentes na aplicao. Quando navegamos para o primeiro registro da nossa tabela (atravs do boto primeiro registro), executado o seguinte trecho de comandos:

    if(c.getCount() > 0) { //Move para o primeiro registro c.moveToFirst(); indice = 1; txtnome.setText(c.getString(0));//Obtem o nome txttelefone.setText(c.getString(1));//Obtm o //telefone txtemail.setText(c.getString(2));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); }

    No trecho de comandos mostrados acima, temos a seguinte instruo:

    c.moveToFirst();

    Que move o cursor para o primeiro registro da tabela usuarios". Nas instrues seguintes:

    txtnome.setText(c.getString(0));//Obtem o nome txttelefone.setText(c.getString(1));//Obtm o //telefone txtemail.setText(c.getString(2));//Obtm o e-mail

    Que exibe as informaes do primeiro registro na tela da nossa aplicao. A instruo seguinte:

    txtstatus_registro.setText(indice + " / " + c.getCount());

    Atualiza o status de navegao, onde so exibidos na tela a posio corrente do cursor na tabela de dados e o total de registros presentes na tabela.

    Todas as atividades descritas desse boto, similar para os demais botes de navegao.

    Agora vamos abrir o arquivo activity_banco_dados.xml e dentro da tela da nossa aplicao, vamos adicionar um componente do tipo Button (abaixo do boto Cadastrar Dados (2 Verso), conforme a tabela seguinte:

  • 48

    Button

    Propriedade Valor Id btconsultardados

    Text Consultar Dados Width 200dp

    Feito isso teremos o seguinte resultado:

    Tela da aplicao em construo

    Depois disso vamos abrir o arquivo BancoDeDadosActivity.java para digitarmos os seguintes blocos de comandos destacados em azul abaixo:

    public class BancoDeDadosActivity extends Activity {

    Button btcriabanco; Button btcadastrardados; Button btcadastrardados2; Button btconsultardados; SQLiteDatabase db;

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_banco_de_dados);

    btcriabanco = (Button) findViewById(R.id.btcriarbanco);

  • 49

    :

    btconsultardados = (Button) findViewById(R.id.btconsultardados);

    btconsultardados.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent consultaDadosActivity = new Intent(BancoDeDadosActivity.this, ConsultaDadosActivity.class); BancoDeDadosActivity.this. startActivity(consultaDadosActivity); } });

    Depois disso vamos executar a nossa aplicao. O resultado voc confere na figura seguinte :

    Aplicao em execuo

  • 50

    3.5 Aplicao que altera as informaes da tabela (Primeira Verso)

    Vamos construir agora, dentro do mesmo projeto, uma aplicao que ir alterar as informaes dentro da nossa tabela dentro do Banco de Dados. Esse programa estar dividido em duas verses. Essa ser a primeira verso do programa, onde iremos trabalhar com o mtodo execSQL para a insero das informaes na tabela (atravs de comando SQL).

    Crie uma nova atividade Android (Android Activity) atravs da caixa de dilogo New Blank Activity. A nossa atividade ter as seguintes informaes abaixo:

    Activity Name: AlterarDadosActivity

    Layout Name : activity_alterar_dados

    Agora dentro da pasta drawable-mdpi vamos adicionar os arquivos icone-alterar_dados.png, botao_alt_primeiro.png, botao_alt_anterior.png, botao_alt_proximo.png e botao_alt_ultimo.png que iremos utilizar em nosso programa de alterao de informaes. Feito isso, vamos adicionar dentro do arquivo activity_alterar_dados.xml o seguinte cdigo XML.

  • 51

  • 52

  • 53

    Feito isso teremos o seguinte resultado:

    Tela da aplicao em construo

    Depois disso vamos abrir o arquivo AlterarDadosActivity.java para digitarmos o seguinte cdigo abaixo:

    package com.example.aplicacaobancodedados;

    import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.Context;

  • 54

    import android.content.DialogInterface; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView;

    public class AlterarDadosActivity extends Activity {

    EditText txtnome, txttelefone, txtemail;

    TextView txtstatus_registro;

    SQLiteDatabase db;

    ImageView imgprimeiro, imganterior, imgproximo, imgultimo;

    Button btalterardados;

    int indice;

    int numreg;

    Cursor c;

    DialogInterface.OnClickListener diAlteraInformacoes;

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_alterar_dados);

    txtnome = (EditText) findViewById(R.id.txtnome); txttelefone = (EditText) findViewById(R.id.txttelefone);

    txtemail = (EditText) findViewById(R.id.txtemail);

    txtstatus_registro = (TextView) findViewById(R.id.txtstatus_registro);

    imgprimeiro = (ImageView) findViewById(R.id.imgprimeiro); imganterior = (ImageView) findViewById(R.id.imganterior); imgproximo = (ImageView) findViewById(R.id.imgproximo); imgultimo = (ImageView) findViewById(R.id.imgultimo);

    btalterardados = (Button) findViewById(R.id.btalterardados);

    try {

    //Abre o banco de dados db = openOrCreateDatabase("banco_dados", Context.MODE_PRIVATE, null);

  • 55

    c = db.query("usuarios",new String [] {"numreg","nome","telefone","email"}, null,null,null,null,null);

    if(c.getCount() > 0) {

    //Move para o primeiro registro

    c.moveToFirst(); indice = 1; numreg = c.getInt(0); //Obtem o nmero de registro txtnome.setText(c.getString(1));//Obtem o nome txttelefone.setText(c.getString(2));//Obtm o telefone txtemail.setText(c.getString(3));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount());

    } else {

    txtstatus_registro.setText("Nenhum Registro");

    } } catch(Exception e) {

    }

    imgprimeiro.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) { if(c.getCount() > 0) { //Move para o primeiro registro c.moveToFirst(); indice = 1;

    numreg = c.getInt(0); //Obtem o nmero de //registro txtnome.setText(c.getString(1));//Obtem o nome txttelefone.setText (c.getString(2));//Obtm o telefone txtemail.setText(c.getString(3));//Obtm o //e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); }

    } });

  • 56

    imganterior.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) { // TODO Auto-generated method stub if(c.getCount() > 0) { if(indice > 1) {

    indice--; //Move para o registro anterior c.moveToPrevious();

    numreg = c.getInt(0); //Obtem o nmero de //registro txtnome.setText(c.getString(1));//Obtem o //nome txttelefone.setText(c.getString(2));//Obtm o //telefone txtemail.setText(c.getString(3));//Obtm o //e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); } } }});

    imgproximo.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) { // TODO Auto-generated method stub if(c.getCount() > 0) { if(indice != c.getCount()) {

    indice++; //Move para o proximo registro c.moveToNext();

    numreg = c.getInt(0); //Obtem o nmero de //registro txtnome.setText(c.getString(1));//Obtem o //nome txttelefone.setText(c.getString(2));//Obtm o //telefone

    //Obtm o e-mail txtemail.setText(c.getString(3));

    txtstatus_registro.setText(indice + " / " + c.getCount()); } } } });

  • 57

    imgultimo.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) { if(c.getCount() > 0) { //Move para o ltimo registro c.moveToLast(); indice = c.getCount();

    numreg = c.getInt(0); //Obtem o nmero de registro txtnome.setText(c.getString(1));//Obtem o nome txttelefone.setText(c.getString(2));//Obtm o //telefone txtemail.setText(c.getString(3));//Obtm o e-mail txtstatus_registro.setText(indice + " / " + c.getCount()); } } });

    diAlteraInformacoes = new DialogInterface.OnClickListener() {

    @Override public void onClick(DialogInterface dialog, int which) {

    //Altera as informaes do registro na tabela String nome = txtnome.getText().toString(); String telefone = txttelefone.getText().toString(); String email = txtemail.getText().toString(); try {

    db.execSQL("update usuarios set nome = '" + nome + "', " + "telefone = '" + telefone + "', email = '" + email + "' where numreg = " + numreg);

    MostraMensagem("Dados alterados com sucesso."); } catch(Exception e) { MostraMensagem("Erro: " + e.toString()); } } };

    btalterardados.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) {

    AlertDialog.Builder dialogo = new AlertDialog.Builder(AlterarDadosActivity.this); dialogo.setTitle("Confirma"); dialogo.setMessage("Deseja alterar as informaes"); dialogo.setNegativeButton("No", null); dialogo.setPositiveButton("Sim", diAlteraInformacoes); dialogo.show(); } }) ; }

  • 58

    public void MostraMensagem(String str) { AlertDialog.Builder dialogo = new AlertDialog.Builder(AlterarDadosActivity.this); dialogo.setTitle("Aviso"); dialogo.setMessage(str); dialogo.setNeutralButton("OK", null); dialogo.show(); }

    }

    Irei explicar aqui algumas linhas de cdigo do nosso programa. Dentro do boto Alterar Dados temos o seguinte cdigo abaixo:

    AlertDialog.Builder dialogo = new AlertDialog.Builder(AlterarDadosActivity.this); dialogo.setTitle("Confirma"); dialogo.setMessage("Deseja alterar as informaes"); dialogo.setNegativeButton("No", null); dialogo.setPositiveButton("Sim", diAlteraInformacoes); dialogo.show();

    Que exibe uma mensagem confirmando se o usurio deseja alterar as informaes do registro selecionado (e modificado). Se observarmos acima, o mtodo setPositiveButton , que exibe o boto Sim da caixa de mensagem, chama a instncia diAlteraInformacoes que nada mais do que uma estrutura do tipo DialogInterface, onde dentro da mesma existe um evento do tipo click, que ser executado quando o boto Sim for clicado. Vejamos o conjunto de instrues do evento abaixo:

    diAlteraInformacoes = new DialogInterface.OnClickListener() {

    @Override public void onClick(DialogInterface dialog, int which) {

    //Altera as informaes do registro na tabela String nome = txtnome.getText().toString(); String telefone = txttelefone.getText().toString(); String email = txtemail.getText().toString(); try {

    db.execSQL("update usuarios set nome = '" + nome + "', " + "telefone = '" + telefone + "', email = '" + email + "' where numreg = " + numreg);

    MostraMensagem("Dados alterados com sucesso."); } catch(Exception e) { MostraMensagem("Erro: " + e.toString()); } } };

  • 59

    Como podemos observar na estrutura mostrada, existe uma instruo que executa o mtodo execSQL presente dentro da instncia db , que realiza a instruo UPDATE da linguagem SQL para alterar as informaes presentes dentro da tabela usuarios" do nosso Banco de Dados.

    Agora vamos voltar para o arquivo activity_banco_de_dados.xml e dentro da tela da nossa aplicao vamos inserir um componente Button (abaixo do boto Consultar Dados), de acordo com a tabela abaixo:

    Button

    Propriedade Valor Id btalterardados

    Text Alterar Dados Width 200dp

    Feito isso teremos o seguinte resultado:

    Tela da aplicao em construo

    Agora dentro do arquivo BancoDeDadosActivity.java vamos escrever o seguinte cdigo destacado em azul abaixo:

  • 60

    public class BancoDeDadosActivity extends Activity {

    Button btcriabanco; Button btcadastrardados; Button btcadastrardados2; Button btconsultardados; Button btalterardados; SQLiteDatabase db;

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_banco_de_dados);

    btcriabanco = (Button) findViewById(R.id.btcriarbanco); :

    btalterardados = (Button) findViewById(R.id.btconsultardados);

    btalterardados.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent alterarDadosActivity = new Intent(BancoDeDadosActivity.this, AlterarDadosActivity.class); BancoDeDadosActivity.this. startActivity(alterarDadosActivity); } });

    Depois de escrever os cdigos solicitados vamos executar a nossa aplicao. O resultado voc confere na figura seguinte:

  • 61

    Aplicao em Execuo

    Experimente realizar uma alterao de dados em um dos registros da nossa tabela.

    3.6 Aplicao que altera as informaes da tabela (Segunda Verso)

    Agora vamos desenvolver uma segunda verso da aplicao desenvolvida anteriormente, onde nela vamos utilizar como meio de alterao das informaes o mtodo update da classe SQLiteDataBase que possui o mesmo comportamento da instruo UPDATE da linguagem SQL.

    Vamos criar uma nova Activity de acordo com as informaes abaixo:

    Activity Name: AlterarDados2Activity

    Layout Name : activity_alterar_dados2

    A tela da segunda verso da nossa aplicao de alterao de dados igual ao da primeira verso, logo, copie o cdigo XML do arquivo activity_alterar_dados.xml para o arquivo activity_alterar_dados2.xml. Feito isso teremos o seguinte resultado:

  • 62

    Agora dentro do arquivo AlterarDados2Activity.java vamos escrever o seguinte cdigo abaixo:

    package com.example.aplicacaobancodedados;

    import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.ContentValues; import android.content.Context; import android.content.DialogInterface; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView;

    public class AlterarDados2Activity extends Activity {

    EditText txtnome, txttelefone, txtemail;

    TextView txtstatus_registro;

    SQLiteDatabase db;

  • 63

    ImageView imgprimeiro, imganterior, imgproximo, imgultimo;

    Button btalterardados;

    int indice;

    int numreg;

    Cursor c;

    DialogInterface.OnClickListener diAlteraInformacoes;

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_alterar_dados);

    txtnome = (EditText) findViewById(R.id.txtnome); txttelefone = (EditText) findViewById(R.id.txttelefone); txtemail = (EditText) findViewById(R.id.txtemail); txtstatus_registro = (TextView) findViewById(R.id.txtstatus_registro);

    imgprimeiro = (ImageView) findViewById(R.id.imgprimeiro); imganterior = (ImageView) findViewById(R.id.imganterior); imgproximo = (ImageView) findViewById(R.id.imgproximo); imgultimo = (ImageView) findViewById(R.id.imgultimo);

    btalterardados = (Button) findViewById(R.id.btalterardados);

    try {

    //Abre o banco de dados db = openOrCreateDatabase ("banco_dados",Context.MODE_PRIVATE, null); c = db.query("usuarios",new String [] {"numreg","nome","telefone","email"}, null,null,null,null,null);

    if(c.getCount() > 0) {

    //Move para o primeiro registro c.moveToFirst(); indice = 1; numreg = c.getInt(0); //Obtem o nmero de registro txtnome.setText(c.getString(1));//Obtem o nome txttelefone.setText(c.getString(2));//Obtm o //telefone txtemail.setText(c.getString(3));//Obtm o e-mail txtstatus_registro.setText(indice + " / " + c.getCount());

    } else { txtstatus_registro.setText("Nenhum Registro"); } }

  • 64

    catch(Exception e) {

    }

    imgprimeiro.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) { if(c.getCount() > 0) { //Move para o primeiro registro c.moveToFirst(); indice = 1; numreg = c.getInt(0); //Obtem o nmero de //registro

    //Obtem o nome txtnome.setText(c.getString(1)); //Obtm o telefone txttelefone.setText(c.getString(2)); txtemail.setText(c.getString(3));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); } } });

    imganterior.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) { // TODO Auto-generated method stub if(c.getCount() > 0) { if(indice > 1) { indice--; //Move para o registro anterior c.moveToPrevious();

    numreg = c.getInt(0); //Obtem o nmero de //registro

    //Obtem o nome txtnome.setText(c.getString(1));

    //Obtm o telefone txttelefone.setText(c.getString(2));

    //Obtm o e-mail txtemail.setText(c.getString(3));

    txtstatus_registro.setText(indice + " / " + c.getCount()); } } } });

  • 65

    imgproximo.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) { // TODO Auto-generated method stub if(c.getCount() > 0) { if(indice != c.getCount()) {

    indice++; //Move para o proximo registro c.moveToNext();

    //Obtem o nmero de registro numreg = c.getInt(0); txtnome.setText(c.getString(1));//Obtem o nome

    //Obtm o telefone txttelefone.setText(c.getString(2));

    //Obtm o e-mail txtemail.setText(c.getString(3));

    txtstatus_registro.setText(indice + " / " + c.getCount()); } } } });

    imgultimo.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) { if(c.getCount() > 0) { //Move para o ltimo registro c.moveToLast(); indice = c.getCount();

    numreg = c.getInt(0); //Obtem o nmero de registro txtnome.setText(c.getString(1));//Obtem o nome

    //Obtm o telefone txttelefone.setText(c.getString(2)); txtemail.setText(c.getString(3));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); }

    } });

  • 66

    diAlteraInformacoes = new DialogInterface.OnClickListener() {

    @Override public void onClick(DialogInterface dialog, int which) {

    //Altera as informaes do registro na tabela String nome = txtnome.getText().toString(); String telefone = txttelefone.getText().toString(); String email = txtemail.getText().toString();

    try {

    ContentValues valor = new ContentValues();

    valor.put("nome", nome); valor.put("telefone", telefone); valor.put("email", email);

    db.update("usuarios", valor, "numreg=" + numreg, null);

    MostraMensagem("Dados alterados com sucesso."); } catch(Exception e) { MostraMensagem("Erro: " + e.toString()); } } };

    btalterardados.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) {

    AlertDialog.Builder dialogo = new AlertDialog.Builder(AlterarDados2Activity.this);

    dialogo.setTitle("Confirma"); dialogo.setMessage("Deseja alterar as informaes ?"); dialogo.setNegativeButton("No", null); dialogo.setPositiveButton("Sim", diAlteraInformacoes); dialogo.show(); } }) ; }

    public void MostraMensagem(String str) { AlertDialog.Builder dialogo = new AlertDialog.Builder(AlterarDados2Activity.this); dialogo.setTitle("Aviso"); dialogo.setMessage(str); dialogo.setNeutralButton("OK", null); dialogo.show(); }

    }

  • 67

    Irei comentar agora o cdigo responsvel por realizar as alteraes na tabela do banco de dados. Em relao ao programa anterior, agora usamos o mtodo update ,presente dentro da instncia db , responsvel por alterar as informaes dentro da tabela usuarios". Veja o cdigo abaixo:

    ContentValues valor = new ContentValues();

    valor.put("nome", nome); valor.put("telefone", telefone); valor.put("email", email);

    db.update("usuarios", valor, "numreg=" + numreg, null);

    Dentro da instncia valor (do tipo ContentValues) adicionamos todas informaes que foram alteradas na aplicao, e por ltimo realizamos essas alteraes na tabela por meio do mtodo update, passando como argumento a tabela que queremos alterar as informaes (a tabela usuarios), a instncia que possui as informaes a serem alteradas (o argumento valor) e por ltimo, a condio (where) para que as informaes sejam alteradas(o argumento numreg = + numreg).

    Agora vamos abrir o arquivo activity_banco_de_dados.xml e vamos substituir o cdigo XML j presente no arquivo pelo novo cdigo XML abaixo:

  • 68

  • 69

    Feito isso teremos o seguinte resultado:

  • 70

    Tela da aplicao em construo

    Agora dentro do arquivo BancoDeDadosActivity.java vamos digitar o seguinte cdigo destacado em azul abaixo:

    public class BancoDeDadosActivity extends Activity {

    Button btcriabanco; Button btcadastrardados; Button btcadastrardados2; Button btconsultardados; Button btalterardados; Button btalterardados2;

    SQLiteDatabase db;

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_banco_de_dados);

    btcriabanco = (Button) findViewById(R.id.btcriarbanco); :

    btalterardados2 = (Button) findViewById(R.id.btconsultardados2);

    btalterardados2.setOnClickListener(new View.OnClickListener(){

  • 71

    @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent alterarDados2Activity = new Intent(BancoDeDadosActivity.this, AlterarDados2Activity.class); BancoDeDadosActivity.this. startActivity(alterarDados2Activity); } });

    Depois de digitar os cdigos solicitados vamos executar a nossa aplicao. O resultado voc confere na figura seguinte:

    Aplicao em Execuo

    Experimente agora alterar algumas informaes de algum registro presente na tabela.

  • 72

    3.7 Aplicao que exclui registros da tabela (Primeira Verso)

    Vamos construir agora, dentro do mesmo projeto, uma aplicao que ir excluir os registros da nossa tabela dentro do Banco de Dados. Esse programa estar dividido em duas verses. Essa ser a primeira verso do programa, onde iremos trabalhar com o mtodo execSQL para a insero das informaes na tabela (atravs de comando SQL).

    Crie uma nova atividade Android (Android Activity) atravs da caixa de dilogo New Blank Activity. A nossa atividade ter as seguintes informaes abaixo:

    Activity Name: ExcluirDadosActivity

    Layout Name : activity_excluir_dados

    Agora dentro da pasta drawable-mdpi vamos adicionar os arquivos icone-excluir_dados.png, botao_del_primeiro.png, botao_del_anterior.png, botao_del_proximo.png e botao_del_ultimo.png que iremos utilizar em nosso programa de alterao de informaes. Feito isso, vamos adicionar dentro do arquivo activity_excluir_dados.xml o seguinte cdigo XML.

  • 73

    android:id="@+id/layoutCorFundo" android:layout_width="fill_parent" android:layout_height="match_parent" android:background="#b0b5b3" android:gravity="center" >

  • 74

    android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="20dp" android:text="E-Mail:" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="#000000" android:textSize="18sp" />

  • 75

    Depois de colocar o cdigo no arquivo salve as alteraes. O resultado voc confere na figura seguinte:

    Tela da aplicao em construo

  • 76

    Agora vamos abrir o arquivo ExcluirDadosActivity.java para digitarmos o seguinte cdigo abaixo:

    package com.example.aplicacaobancodedados;

    import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView;

    public class ExcluirDadosActivity extends Activity {

    TextView txtnome, txttelefone, txtemail,txtstatus_registro;

    SQLiteDatabase db;

    ImageView imgprimeiro, imganterior, imgproximo, imgultimo;

    int indice;

    int numreg;

    Cursor c;

    Button btexcluirdados;

    DialogInterface.OnClickListener diExcluiRegistro;

    @Override protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState); setContentView(R.layout.activity_excluir_dados);

    txtnome = (TextView) findViewById(R.id.txtnome); txttelefone = (TextView) findViewById(R.id.txttelefone);

    txtemail = (TextView) findViewById(R.id.txtemail); txtstatus_registro = (TextView) findViewById(R.id.txtstatus_registro);

    txtnome.setText(""); txttelefone.setText(""); txtemail.setText("");

    imgprimeiro = (ImageView) findViewById(R.id.imgprimeiro); imganterior = (ImageView) findViewById(R.id.imganterior); imgproximo = (ImageView) findViewById(R.id.imgproximo); imgultimo = (ImageView) findViewById(R.id.imgultimo);

  • 77

    btexcluirdados = (Button) findViewById(R.id.btexcluirdados);

    try {

    //Abre o banco de dados db = openOrCreateDatabase("banco_dados",Context.MODE_PRIVATE, null);

    CarregarDados();

    imgprimeiro.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View view) {

    if(c.getCount() > 0) { //Move para o primeiro registro c.moveToFirst(); indice = 1; numreg= c.getInt(0); //Obtem o nmero do registro txtnome.setText(c.getString(1));//Obtem o nome txttelefone.setText(c.getString(2));//Obtm o //telefone txtemail.setText(c.getString(3));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); } } });

    imganterior.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) {

    if(c.getCount() > 0) { if(indice > 1) {

    indice--; //Move para o registro anterior c.moveToPrevious(); numreg= c.getInt(0); //Obtem o nmero do registro txtnome.setText(c.getString(1));//Obtem o nome txttelefone.setText(c.getString(2));//Obtm o //telefone txtemail.setText(c.getString(3));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); } } } });

    imgproximo.setOnClickListener(new View.OnClickListener() {

  • 78

    @Override public void onClick(View arg0) {

    if(c.getCount() > 0) { if(indice != c.getCount()) {

    indice++; //Move para o prximo registro c.moveToNext();

    numreg= c.getInt(0); //Obtem o nmero do registro txtnome.setText(c.getString(1));//Obtem o nome txttelefone.setText(c.getString(2));//Obtm o telefone txtemail.setText(c.getString(3));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount());

    } } } });

    imgultimo.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) {

    if(c.getCount() > 0) { //Move para o ltimo registro c.moveToLast(); indice = c.getCount();

    numreg= c.getInt(0); //Obtem o nmero do registro txtnome.setText(c.getString(1));//Obtem o nome txttelefone.setText(c.getString(2));//Obtm o telefone txtemail.setText(c.getString(3));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); } } });

    diExcluiRegistro = new DialogInterface.OnClickListener() {

    @Override public void onClick(DialogInterface dialog, int which) {

    db.execSQL("delete from usuarios where numreg = " + numreg); CarregarDados(); MostraMensagem("Dados excluidos com sucesso"); } }; btexcluirdados.setOnClickListener(new View.OnClickListener() {

  • 79

    @Override public void onClick(View v) {

    if(c.getCount() > 0) {

    AlertDialog.Builder dialogo = new AlertDialog.Builder(ExcluirDadosActivity.this); dialogo.setTitle("Confirma"); dialogo.setMessage("Deseja excluir esse registro ?"); dialogo.setNegativeButton("No", null); dialogo.setPositiveButton("Sim", diExcluiRegistro); dialogo.show(); } else { MostraMensagem("no existem registros para excluir"); } } });

    }catch(Exception e) { MostraMensagem("Erro : " + e.toString()); }

    }

    public void CarregarDados() { c = db.query("usuarios",new String [] {"numreg","nome","telefone","email"}, null,null,null,null,null);

    txtnome.setText(" "); txttelefone.setText(" "); txtemail.setText(" ");

    if(c.getCount() > 0) {

    //Move para o primeiro registro c.moveToFirst(); indice = 1; numreg= c.getInt(0); //Obtem o nmero do registro txtnome.setText(c.getString(1));//Obtem o nome txttelefone.setText(c.getString(2));//Obtm o telefone txtemail.setText(c.getString(3));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount());

    } else { txtstatus_registro.setText("Nenhum Registro"); }

    }

    public void MostraMensagem(String str) { AlertDialog.Builder dialogo = new

  • 80

    AlertDialog.Builder(ExcluirDadosActivity.this);

    dialogo.setTitle("Aviso"); dialogo.setMessage(str); dialogo.setNeutralButton("OK", null); dialogo.show(); } }

    Irei explicar aqui algumas linhas de cdigo do nosso programa. Dentro do boto Excluir Dados temos o seguinte cdigo abaixo:

    AlertDialog.Builder dialogo = new AlertDialog.Builder(AlterarDadosActivity.this); dialogo.setTitle("Confirma"); dialogo.setMessage("Deseja alterar as informaes"); dialogo.setNegativeButton("No", null); dialogo.setPositiveButton("Sim", diAlteraInformacoes); dialogo.show();

    Que exibe uma mensagem confirmando se o usurio deseja excluir o registro selecionado. Se observarmos acima, o mtodo setPositiveButton , que exibe o boto Sim da caixa de mensagem, chama a instncia diExcluiRegistro que nada mais do que uma estrutura do tipo DialogInterface, onde dentro da mesma existe um evento do tipo click, que ser executado quando o boto Sim for clicado. Vejamos o conjunto de instrues do evento abaixo:

    diExcluiRegistro = new DialogInterface.OnClickListener() {

    @Override public void onClick(DialogInterface dialog, int which) {

    db.execSQL("delete from usuarios where numreg = " + numreg); CarregarDados(); MostraMensagem("Dados excluidos com sucesso"); } };

    Como podemos observar na estrutura mostrada acima, existe uma instruo que executa o mtodo execSQL presente dentro da instncia db , que realiza a execuo instruo DELETE da linguagem SQL, cuja finalidade excluir o registro selecionado na tabela usuarios" do nosso Banco de Dados.

    Agora vamos voltar para o arquivo activity_banco_de_dados.xml e dentro da tela da nossa aplicao vamos inserir um componente Button (abaixo do boto Alterar Dados (2 Verso)), de acordo com a tabela abaixo:

    Button

    Propriedade Valor Id Btexcluirdados

  • 81

    Text Excluir Dados Width 160dp

    Feito isso teremos o seguinte resultado em seguida:

    Tela da aplicao em construo

    Agora vamos abrir o arquivo BancoDeDadosActivity.java para digitarmos as seguintes instrues destacadas em azul abaixo:

    public class BancoDeDadosActivity extends Activity {

    Button btcriabanco; Button btcadastrardados; Button btcadastrardados2; Button btconsultardados; Button btalterardados; Button btalterardados2; Button btexcluirdados;

    SQLiteDatabase db;

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_banco_de_dados);

    btcriabanco = (Button) findViewById(R.id.btcriarbanco);

  • 82

    :

    btexcluirdados = (Button) findViewById(R.id.btexcluirdados); btexcluirdados.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent excluirDadosActivity = new Intent(BancoDeDadosActivity.this, ExcluirDadosActivity.class); BancoDeDadosActivity.this. startActivity(excluirDadosActivity); } });

    Depois de escrever as instrues solicitadas, vamos executar a nossa aplicao. O resultado voc confere na figura seguinte:

    Aplicao em execuo

    Experimente excluir um registro da tabela do nosso Banco de Dados.

  • 83

    3.8 Aplicao que exclui registros da tabela (Segunda Verso)

    Agora vamos desenvolver uma segunda verso da aplicao desenvolvida anteriormente, onde nela vamos utilizar como meio para excluir os registros o mtodo delete da classe SQLiteDataBase que possui o mesmo comportamento da instruo DELETE da linguagem SQL.

    Vamos criar uma nova Activity de acordo com as informaes abaixo:

    Activity Name: ExcluirDados2Activity

    Layout Name : activity_excluir_dados2

    A tela da segunda verso da nossa aplicao de alterao de dados igual ao da primeira verso, logo, copie o cdigo XML do arquivo activity_excluir_dados.xml para o arquivo activity_excluir_dados2.xml. Feito isso teremos o seguinte resultado:

    Tela da aplicao em construo

  • 84

    Depois de copiar o cdigo XML para o arquivo , salve as alteraes. Feito isso vamos abrir o arquivo ExcluirDados2Activity.java para digitarmos o seguinte cdigo abaixo:

    package com.example.aplicacaobancodedados;

    import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView;

    public class ExcluirDados2Activity extends Activity {

    TextView txtnome, txttelefone, txtemail,txtstatus_registro;

    SQLiteDatabase db;

    ImageView imgprimeiro, imganterior, imgproximo, imgultimo;

    int indice;

    int numreg;

    Cursor c;

    Button btexcluirdados;

    DialogInterface.OnClickListener diExcluiRegistro;

    @Override protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState); setContentView(R.layout.activity_excluir_dados);

    txtnome = (TextView) findViewById(R.id.txtnome); txttelefone = (TextView) findViewById(R.id.txttelefone);

    txtemail = (TextView) findViewById(R.id.txtemail); txtstatus_registro = (TextView) findViewById(R.id.txtstatus_registro);

    txtnome.setText(""); txttelefone.setText(""); txtemail.setText("");

    imgprimeiro = (ImageView) findViewById(R.id.imgprimeiro); imganterior = (ImageView) findViewById(R.id.imganterior); imgproximo = (ImageView) findViewById(R.id.imgproximo); imgultimo = (ImageView) findViewById(R.id.imgultimo);

  • 85

    btexcluirdados = (Button) findViewById(R.id.btexcluirdados);

    try {

    //Abre o banco de dados db = openOrCreateDatabase("banco_dados",Context.MODE_PRIVATE, null);

    CarregarDados();

    imgprimeiro.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View view) {

    if(c.getCount() > 0) { //Move para o primeiro registro c.moveToFirst(); indice = 1; numreg= c.getInt(0); //Obtem o nmero do registro txtnome.setText(c.getString(1));//Obtem o nome txttelefone.setText(c.getString(2));//Obtm o //telefone txtemail.setText(c.getString(3));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); } } });

    imganterior.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) {

    if(c.getCount() > 0) { if(indice > 1) {

    indice--; //Move para o registro anterior c.moveToPrevious(); numreg= c.getInt(0); //Obtem o nmero do registro txtnome.setText(c.getString(1));//Obtem o nome txttelefone.setText(c.getString(2));//Obtm o //telefone txtemail.setText(c.getString(3));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); } } } });

  • 86

    imgproximo.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View arg0) {

    if(c.getCount() > 0) { if(indice != c.getCount()) {

    indice++; //Move para o prximo registro c.moveToNext();

    numreg= c.getInt(0); //Obtem o nmero do registro txtnome.setText(c.getString(1));//Obtem o nome txttelefone.setText(c.getString(2));//Obtm o telefone txtemail.setText(c.getString(3));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount());

    } } } });

    imgultimo.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) {

    if(c.getCount() > 0) { //Move para o ltimo registro c.moveToLast(); indice = c.getCount();

    numreg= c.getInt(0); //Obtem o nmero do registro txtnome.setText(c.getString(1));//Obtem o nome txttelefone.setText(c.getString(2));//Obtm o telefone txtemail.setText(c.getString(3));//Obtm o e-mail

    txtstatus_registro.setText(indice + " / " + c.getCount()); } } });

    diExcluiRegistro = new DialogInterface.OnClickListener() {

    @Override public void onClick(DialogInterface dialog, int which) {

    db.delete("usuarios","numreg=" + numreg,null); CarregarDados(); MostraMensagem("Dados excluidos com sucesso"); } };

  • 87

    btexcluirdados.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) {

    if(c.getCount() > 0) {

    AlertDialog.Builder dialogo = new AlertDialog.Builder(ExcluirDados2Activity.this); dialogo.setTitle("Confirma"); dialogo.setMessage("Deseja excluir esse registro ?"); dialogo.setNegativeButton("No", null); dialogo.setPositiveButton("Sim", diExcluiRegistro); dialogo.show(); } else { MostraMensagem("no existem registros para excluir"); } } });

    }catch(Exception e) { MostraMensagem("Erro : " + e.toString()); }

    }

    public void CarregarDados() { c = db.query("usuarios",new String [] {"numreg","nome","telefone","email"}, null,null,null,null,null)