Criando um Cadastro de Pessoa para android com (SQLCompact)
Neste artigo irei ensinar como fazer um cadastro de pessoa para android salvando em banco de dados SQLCompact, estarei utilizando o eclipse para criar o aplicativo.
Vamos lá, Crie um projeto android com o nome que desejar, no meu caso vou dar o nome de cadPessoa.
Feito isso, vamos criar as seguintes classes "BuscarPessoa", "CadastroPessoa", "Pessoa", "PessoaListAdapter", "EditarPessoa", "RepositorioPessoa", "RepositorioPessoaScript", "SQLiteHelper", delete a class Activity que sera criada sozinha. devera ficar da seguinte maneira:
Agora vamos configura nossa aplicação para ser reproduzida na tela, ache o "AndroidManifest.xml", preste muita atenção nessa parte. de um duplo click nele, selecione a aba abaixo escrito "Application", remove a classe Activity que foi criada, sozinha, deverá ficar da seguinte maneira:
Agora na aba "AndroidManifest.xml" deixe da seguinte maneira :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.br.CadPessoa"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/icon"
android:label="@string/app_name" >
<activity android:name="CadastroPessoa">
<intent-filter>
<action android:name="android.intent.action.MAIN"></action>
<category android:name="android.intent.category.LAUNCHER"></category>
</intent-filter>
</activity>
<activity android:name="EditarPessoa"></activity>
<activity android:name="BuscarPessoa"></activity>
</application>
</manifest>
Obs: Nesse XML configurei as classes de visual, e informei a classe que será criada por inicio.
Crie uma pasta Chamada "drawable" acima das outras pastas "drawable *.*". Nas pastas drawable adiciona as seguintes imagens (Imagens estarão disponíveis para download). Agora vamos ajeitar nossas classes e o layout das telas.
Vamos criar primeiro os formulários para nosso visual, na pasta res, crie 3 arquivos "Android XML Layout File" com os seguintes nomes "pessoa_linha_tabela", "form_buscar_pessoa", "form_editar_pessoa", deleta o main.xml
No form_buscar_pessoa, de um duplo click, e na aba "form_buscar_pessoa.xml", deixe da seguinte maneira.
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:layout_width="fill_parent"
android:background="#ffffff">
<TableRow>
<TextView android:id="@+id/text1" android:text="Nome:"
android:textColor="#000000" />
<EditText android:id="@+id/campoNome" android:width="240px" />
</TableRow>
<TableRow>
<ImageButton android:src="@drawable/pesquisar" android:id="@+id/btBuscar"
android:text="Buscar" />
</TableRow>
<TableRow>
<TextView android:id="@+id/text2" android:text="Cpf:"
android:textColor="#000000" />
<EditText android:id="@+id/campoCpf" />
</TableRow>
<TableRow>
<TextView android:id="@+id/text3" android:text="Idade:"
android:textColor="#000000" />
<EditText android:id="@+id/campoIdade" />
</TableRow>
</TableLayout>
Agora no form_editar_pessoa insira o seguinte codigo:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:layout_width="fill_parent"
android:background="#ffffff">
<TableRow>
<TextView android:id="@+id/text1" android:text="Nome:"
android:textColor="#000000" />
<EditText android:id="@+id/campoNome" android:width="240px" />
</TableRow>
<TableRow>
<TextView android:id="@+id/text2" android:text="Cpf:"
android:textColor="#000000" />
<EditText android:id="@+id/campoCpf" />
</TableRow>
<TableRow>
<TextView android:id="@+id/text3" android:text="Idade:"
android:textColor="#000000" />
<EditText android:id="@+id/campoIdade" />
</TableRow>
<LinearLayout android:layout_width="wrap_content"
android:layout_height="fill_parent">
<ImageButton android:src="@drawable/cancelar" android:id="@+id/btCancelar"
android:text="Cancelar"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
<ImageButton android:src="@drawable/salvar" android:id="@+id/btSalvar"
android:text=" Salvar "
android:layout_width="wrap_content" android:layout_height="wrap_content" />
<ImageButton android:src="@drawable/excluir" android:id="@+id/btExcluir"
android:text=" Excluir "
android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>
</TableLayout>
Agora no pessoa_linha_tabela insira o seguinte codigo:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content"
>
<TextView android:id="@+id/nome"
android:layout_height="30dip" android:layout_width="160sp"
/>
<TextView android:id="@+id/cpf"
android:layout_height="30dip" android:layout_width="100sp"
/>
<TextView android:id="@+id/idade"
android:layout_height="30dip" android:layout_width="40sp"
/>
</LinearLayout>
A parte de layout, já está pronta, agora vamos fazer a parte das classes, deixe a classe Pessoa da seguinte maneira :
package com.br.CadPessoa;
import android.content.ContentUris;
import android.net.Uri;
import android.provider.BaseColumns;
public class Pessoa {
public static String[] colunas = new String[] { Pessoas._ID, Pessoas.NOME,
Pessoas.CPF, Pessoas.IDADE };
public static final String AUTHORITY = "com.br.CadPessoa.provider.pessoa";
public long id;
public String nome;
public String cpf;
public int idade;
public Pessoa() {
}
public Pessoa(String nome, String cpf, int idade) {
super();
this.nome = nome;
this.cpf = cpf;
this.idade = idade;
}
public Pessoa(long id, String nome, String cpf, int idade) {
super();
this.id = id;
this.nome = nome;
this.cpf = cpf;
this.idade = idade;
}
/**
* Classe interna para representar as colunas e ser utilizada por um Content
* Provider
*
* Filha de BaseColumns que já define (_id e _count), para seguir o padrão
* Android
*/
public static final class Pessoas implements BaseColumns {
// Não pode instanciar esta Classe
private Pessoas() {
}
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY
+ "/pessoas");
public static final String CONTENT_TYPE =
"vnd.android.cursor.dir/vnd.google.pessoas";
public static final String CONTENT_ITEM_TYPE =
"vnd.android.cursor.item/vnd.google.pessoas";
public static final String DEFAULT_SORT_ORDER = "_id ASC";
public static final String NOME = "nome";
public static final String CPF = "cpf";
public static final String IDADE = "IDADE";
public static Uri getUriId(long id) {
// Adiciona o id na URI default do /pessoas
Uri uriPessoas = ContentUris
.withAppendedId(Pessoas.CONTENT_URI, id);
return uriPessoas;
}
}
@Override
public String toString() {
return "Nome: " + nome + ", cpf: " + cpf + ", Idade: " + idade;
}
}
Deixe a classe BuscarPessoa da seguinte maneira :
package com.br.CadPessoa;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
public class BuscarPessoa extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.form_buscar_pessoa);
ImageButton btBuscar = (ImageButton) findViewById(R.id.btBuscar);
btBuscar.setOnClickListener(this);
}
@Override
protected void onPause() {
super.onPause();
// Cancela para não ficar nada pendente na tela
setResult(RESULT_CANCELED);
// Fecha a tela
finish();
}
/**
* @see android.view.View.OnClickListener#onClick(android.view.View)
*/
public void onClick(View view) {
EditText nome = (EditText) findViewById(R.id.campoNome);
EditText cpf = (EditText) findViewById(R.id.campoCpf);
EditText idade = (EditText) findViewById(R.id.campoIdade);
// Recupera o nome da pessoa
String nomePessoa = nome.getText().toString();
// Busca a pessoa pelo nome
Pessoa pessoa = buscarPessoa(nomePessoa);
if (pessoa != null) {
// Atualiza os campos com o resultado
cpf.setText(pessoa.cpf);
idade.setText(String.valueOf(pessoa.idade));
} else {
// Limpa os campos
cpf.setText("");
idade.setText("");
Toast.makeText(BuscarPessoa.this, "Nenhuma pessoa encontrada", Toast.LENGTH_SHORT).show();
}
}
// Busca um carro pelo nome
protected Pessoa buscarPessoa(String nomePessoa) {
Pessoa pessoa = CadastroPessoa.repositorio.buscarPessoaPorNome(nomePessoa);
return pessoa;
}
}
Deixe a classe CadastroPessoa da seguinte maneira :
package com.br.CadPessoa;
import java.util.List;
import com.br.CadPessoa.Pessoa.Pessoas;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
public class CadastroPessoa extends ListActivity {
protected static final int INSERIR_EDITAR = 1;
protected static final int BUSCAR = 2;
public static RepositorioPessoa repositorio;
private List<Pessoa> pessoas;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
repositorio = new RepositorioPessoaScript(this);
atualizarLista();
}
protected void atualizarLista() {
// Pega a lista de pessoas e exibe na tela
pessoas = repositorio.listarPessoas();
// Adaptador de lista customizado para cada linha de uma pessoa
setListAdapter(new PessoaListAdapter(this, pessoas));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, INSERIR_EDITAR, 0, "Inserir Novo").setIcon(R.drawable.novo);
menu.add(0, BUSCAR, 0, "Buscar").setIcon(R.drawable.pesquisar);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// Clicou no menu
switch (item.getItemId()) {
case INSERIR_EDITAR:
// Abre a tela com o formulário para adicionar
startActivityForResult(new Intent(this, EditarPessoa.class), INSERIR_EDITAR);
break;
case BUSCAR:
// Abre a tela para buscar a pessoa pelo nome
startActivity(new Intent(this, BuscarPessoa.class));
break;
}
return true;
}
@Override
protected void onListItemClick(ListView l, View v, int posicao, long id) {
super.onListItemClick(l, v, posicao, id);
editarPessoa(posicao);
}
// Recupera o id da pessoa, e abre a tela de edição
protected void editarPessoa(int posicao) {
// Usuário clicou em alguma pessoa da lista
// Recupera a pessoa selecionado
Pessoa pessoa = pessoas.get(posicao);
// Cria a intent para abrir a tela de editar
Intent it = new Intent(this, EditarPessoa.class);
// Passa o id da pessoa como parâmetro
it.putExtra(Pessoas._ID, pessoa.id);
// Abre a tela de edição
startActivityForResult(it, INSERIR_EDITAR);
}
@Override
protected void onActivityResult(int codigo, int codigoRetorno, Intent it) {
super.onActivityResult(codigo, codigoRetorno, it);
<!-- Quando a activity EditarPessoa retornar, seja se foi para
adicionar vamos atualizar a lista -->
if (codigoRetorno == RESULT_OK) {
// atualiza a lista na tela
atualizarLista();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// Fecha o banco
repositorio.fechar();
}
}
Agora a classe EditarPessoa da seguinte maneira :
package com.br.CadPessoa;
import com.br.CadPessoa.Pessoa.Pessoas;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.ImageButton;
public class EditarPessoa extends Activity {
static final int RESULT_SALVAR = 1;
static final int RESULT_EXCLUIR = 2;
// Campos texto
private EditText campoNome;
private EditText campoCpf;
private EditText campoIdade;
private Long id;
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.form_editar_pessoa);
campoNome = (EditText) findViewById(R.id.campoNome);
campoCpf = (EditText) findViewById(R.id.campoCpf);
campoIdade = (EditText) findViewById(R.id.campoIdade);
id = null;
Bundle extras = getIntent().getExtras();
// Se for para Editar, recuperar os valores ...
if (extras != null) {
id = extras.getLong(Pessoas._ID);
if (id != null) {
// é uma edição, busca o pessoa...
Pessoa p = buscarPessoa(id);
campoNome.setText(p.nome);
campoCpf.setText(p.cpf);
campoIdade.setText(String.valueOf(p.idade));
}
}
ImageButton btCancelar = (ImageButton) findViewById(R.id.btCancelar);
btCancelar.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
setResult(RESULT_CANCELED);
// Fecha a tela
finish();
}
});
// Listener para salvar a pessoa
ImageButton btSalvar = (ImageButton) findViewById(R.id.btSalvar);
btSalvar.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
salvar();
}
});
ImageButton btExcluir = (ImageButton) findViewById(R.id.btExcluir);
if (id == null) {
// Se id está nulo, não pode excluir
btExcluir.setVisibility(View.INVISIBLE);
} else {
// Listener para excluir a pessoa
btExcluir.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
excluir();
}
});
}
}
@Override
protected void onPause() {
super.onPause();
// Cancela para não ficar nada na tela pendente
setResult(RESULT_CANCELED);
// Fecha a tela
finish();
}
public void salvar() {
int idade = 0;
try {
idade = Integer.parseInt(campoIdade.getText().toString());
} catch (NumberFormatException e) {
}
Pessoa pessoa = new Pessoa();
if (id != null) {
// É uma atualização
pessoa.id = id;
}
pessoa.nome = campoNome.getText().toString();
pessoa.cpf = campoCpf.getText().toString();
pessoa.idade = idade;
// Salvar
salvarPessoa(pessoa);
// OK
setResult(RESULT_OK, new Intent());
// Fecha a tela
finish();
}
public void excluir() {
if (id != null) {
excluirPessoa(id);
}
// OK
setResult(RESULT_OK, new Intent());
// Fecha a tela
finish();
}
// Buscar a pessoa pelo id
protected Pessoa buscarPessoa(long id) {
return CadastroPessoa.repositorio.buscarPessoa(id);
}
// Salvar a pessoa
protected void salvarPessoa(Pessoa pessoa) {
CadastroPessoa.repositorio.salvar(pessoa);
}
// Excluir a pessoa
protected void excluirPessoa(long id) {
CadastroPessoa.repositorio.deletar(id);
}
}
Agora a classe Pessoa da seguinte maneira :
package com.br.CadPessoa;
import android.content.ContentUris;
import android.net.Uri;
import android.provider.BaseColumns;
public class Pessoa {
public static String[] colunas = new String[] { Pessoas._ID, Pessoas.NOME,
Pessoas.CPF, Pessoas.IDADE };
public static final String AUTHORITY = "com.br.CadPessoa.provider.pessoa";
public long id;
public String nome;
public String cpf;
public int idade;
public Pessoa() {
}
public Pessoa(String nome, String cpf, int idade) {
super();
this.nome = nome;
this.cpf = cpf;
this.idade = idade;
}
public Pessoa(long id, String nome, String cpf, int idade) {
super();
this.id = id;
this.nome = nome;
this.cpf = cpf;
this.idade = idade;
}
/**
* Classe interna para representar as colunas e ser utilizada por um Content
* Provider
*
* Filha de BaseColumns que já define (_id e _count), para seguir o padrão
* Android
*/
public static final class Pessoas implements BaseColumns {
// Não pode instanciar esta Classe
private Pessoas() {
}
public static final Uri CONTENT_URI = Uri.parse("content://" +
AUTHORITY + "/pessoas");
public static final String CONTENT_TYPE = "vnd.android.cursor
.dir/vnd.google.pessoas";
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor
.item/vnd.google.pessoas";
public static final String DEFAULT_SORT_ORDER = "_id ASC";
public static final String NOME = "nome";
public static final String CPF = "cpf";
public static final String IDADE = "idade";
public static Uri getUriId(long id) {
// Adiciona o id na URI default do /pessoas
Uri uriPessoas = ContentUris.withAppendedId(Pessoas.CONTENT_URI, id);
return uriPessoas;
}
}
@Override
public String toString() {
return "Nome: " + nome + ", cpf: " + cpf + ", Idade: " + idade;
}
}
Agora a classe PessoaListAdapter da seguinte maneira :
package com.br.CadPessoa;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class PessoaListAdapter extends BaseAdapter {
private Context context;
private List<Pessoa> lista;
public PessoaListAdapter(Context context, List<Pessoa> lista) {
this.context = context;
this.lista = lista;
}
public int getCount() {
return lista.size();
}
public Object getItem(int position) {
return lista.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
// Recupera a pessoa da posição atual
Pessoa p = lista.get(position);
LayoutInflater inflater = (LayoutInflater) context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.pessoa_linha_tabela, null);
// Atualiza o valor do TextView
TextView nome = (TextView) view.findViewById(R.id.nome);
nome.setText(p.nome);
TextView cpf = (TextView) view.findViewById(R.id.cpf);
cpf.setText(p.cpf);
TextView idade = (TextView) view.findViewById(R.id.idade);
idade.setText(String.valueOf(p.idade));
return view;
}
}
Agora a classe RepositorioPessoa da seguinte maneira :
ackage com.br.CadPessoa;
import java.util.ArrayList;
import java.util.List;
import com.br.CadPessoa.Pessoa.Pessoas;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.util.Log;
public class RepositorioPessoa {
private static final String CATEGORIA = "dados";
// Nome do banco
private static final String NOME_BANCO = "dados_android";
// Nome da tabela
public static final String NOME_TABELA = "pessoa";
protected SQLiteDatabase db;
public RepositorioPessoa(Context ctx) {
// Abre o banco de dados já existente
db = ctx.openOrCreateDatabase(NOME_BANCO, Context.MODE_PRIVATE, null);
}
protected RepositorioPessoa() {
// Apenas para criar uma subclasse...
}
// Salva a pessoa, insere um novo ou atualiza
public long salvar(Pessoa pessoa) {
long id = pessoa.id;
if (id != 0) {
atualizar(pessoa);
} else {
// Insere novo
id = inserir(pessoa);
}
return id;
}
// Insere uma nova pessoa
public long inserir(Pessoa pessoa) {
ContentValues values = new ContentValues();
values.put(Pessoas.NOME, pessoa.nome);
values.put(Pessoas.CPF, pessoa.cpf);
values.put(Pessoas.IDADE, pessoa.idade);
long id = inserir(values);
return id;
}
// Insere uma nova pessoa
public long inserir(ContentValues valores) {
long id = db.insert(NOME_TABELA, "", valores);
return id;
}
// Atualiza a pessoa no banco. O id da pessoa é utilizado.
public int atualizar(Pessoa pessoa) {
ContentValues values = new ContentValues();
values.put(Pessoas.NOME, pessoa.nome);
values.put(Pessoas.CPF, pessoa.cpf);
values.put(Pessoas.IDADE, pessoa.idade);
String _id = String.valueOf(pessoa.id);
String where = Pessoas._ID + "=?";
String[] whereArgs = new String[] { _id };
int count = atualizar(values, where, whereArgs);
return count;
}
// Atualiza a pessoa com os valores abaixo
// A cláusula where é utilizada para identificar a pessoa a ser atualizado
public int atualizar(ContentValues valores, String where, String[] whereArgs) {
int count = db.update(NOME_TABELA, valores, where, whereArgs);
Log.i(CATEGORIA, "Atualizou [" + count + "] registros");
return count;
}
// Deleta a pessoa com o id fornecido
public int deletar(long id) {
String where = Pessoas._ID + "=?";
String _id = String.valueOf(id);
String[] whereArgs = new String[] { _id };
int count = deletar(where, whereArgs);
return count;
}
// Deleta a pessoa com os argumentos fornecidos
public int deletar(String where, String[] whereArgs) {
int count = db.delete(NOME_TABELA, where, whereArgs);
Log.i(CATEGORIA, "Deletou [" + count + "] registros");
return count;
}
// Busca a pessoa pelo id
public Pessoa buscarPessoa(long id) {
// select * from pessoa where _id=?
Cursor c = db.query(true, NOME_TABELA, Pessoa.colunas, Pessoas._ID + "=" + id,
null, null, null, null, null);
if (c.getCount() > 0) {
// Posicinoa no primeiro elemento do cursor
c.moveToFirst();
Pessoa pessoa = new Pessoa();
// Lê os dados
pessoa.id = c.getLong(0);
pessoa.nome = c.getString(1);
pessoa.cpf = c.getString(2);
pessoa.idade = c.getInt(3);
return pessoa;
}
return null;
}
// Retorna um cursor com todas as pessoas
public Cursor getCursor() {
try {
// select * from pessoas
return db.query(NOME_TABELA, Pessoa.colunas,
null, null, null, null, null, null);
} catch (SQLException e) {
Log.e(CATEGORIA, "Erro ao buscar as pessoas: " + e.toString());
return null;
}
}
// Retorna uma lista com todas as pessoas
public List<Pessoa> listarPessoas() {
Cursor c = getCursor();
List<Pessoa> pessoas = new ArrayList<Pessoa>();
if (c.moveToFirst()) {
// Recupera os índices das colunas
int idxId = c.getColumnIndex(Pessoas._ID);
int idxNome = c.getColumnIndex(Pessoas.NOME);
int idxCpf = c.getColumnIndex(Pessoas.CPF);
int idxidade = c.getColumnIndex(Pessoas.IDADE);
// Loop até o final
do {
Pessoa pessoa = new Pessoa();
pessoas.add(pessoa);
// recupera os atributos da pessoa
pessoa.id = c.getLong(idxId);
pessoa.nome = c.getString(idxNome);
pessoa.cpf = c.getString(idxCpf);
pessoa.idade = c.getInt(idxidade);
} while (c.moveToNext());
}
return pessoas;
}
// Busca a pessoa pelo nome "select * from pessoa where nome=?"
public Pessoa buscarPessoaPorNome(String nome) {
Pessoa pessoa = null;
try {
// Idem a: SELECT _id,nome,cpf,idade from pessoa where nome = ?
Cursor c = db.query(NOME_TABELA, Pessoa.colunas, Pessoas.NOME + "='"
+ nome + "'", null, null, null, null);
// Se encontrou...
if (c.moveToNext()) {
pessoa = new Pessoa();
// utiliza os métodos getLong(), getString(), getInt(),
etc para recuperar os valores
pessoa.id = c.getLong(0);
pessoa.nome = c.getString(1);
pessoa.cpf = c.getString(2);
pessoa.idade = c.getInt(3);
}
} catch (SQLException e) {
Log.e(CATEGORIA, "Erro ao buscar a pessoa pelo nome: "
+ e.toString());
return null;
}
return pessoa;
}
// Busca uma pessoa utilizando as configurações definidas no
// SQLiteQueryBuilder
// Utilizado pelo Content Provider de pessoa
public Cursor query(SQLiteQueryBuilder queryBuilder, String[] projection,
String selection, String[] selectionArgs,
String groupBy, String having, String orderBy) {
Cursor c = queryBuilder.query(this.db, projection, selection,
selectionArgs, groupBy, having, orderBy);
return c;
}
// Fecha o banco
public void fechar() {
// fecha o banco de dados
if (db != null) {
db.close();
}
}
}
Agora a classe RepositorioPessoaScript da seguinte maneira :
package com.br.CadPessoa;
import android.content.Context;
public class RepositorioPessoaScript extends RepositorioPessoa {
// Script para fazer drop na tabela
private static final String SCRIPT_DATABASE_DELETE = "DROP TABLE IF EXISTS pessoa";
// Cria a tabela com o "_id" sequencial
private static final String[] SCRIPT_DATABASE_CREATE = new String[] {
"create table pessoa ( _id integer primary key autoincrement, nome text not null,
cpf text not null,idade text not null);",
"insert into pessoa(nome,cpf,idade) values('Jeferson Zonta','123412332332',21);",
"insert into pessoa(nome,cpf,idade) values('Ambrozio silva','56784564564',60);",
"insert into pessoa(nome,cpf,idade) values('Edinando A.','5465631565',19);" };
// Nome do banco
private static final String NOME_BANCO = "baco_dados";
// Controle de versão
private static final int VERSAO_BANCO = 1;
// Nome da tabela
public static final String TABELA_PESSOA = "pessoa";
// Classe utilitária para abrir, criar, e atualizar o banco de dados
private SQLiteHelper dbHelper;
// Cria o banco de dados com um script SQL
public RepositorioPessoaScript(Context ctx) {
// Criar utilizando um script SQL
dbHelper = new SQLiteHelper(ctx, RepositorioPessoaScript.NOME_BANCO,
RepositorioPessoaScript.VERSAO_BANCO,
RepositorioPessoaScript.SCRIPT_DATABASE_CREATE,
RepositorioPessoaScript.SCRIPT_DATABASE_DELETE);
// abre o banco no modo escrita para poder alterar também
db = dbHelper.getWritableDatabase();
}
// Fecha o banco
@Override
public void fechar() {
super.fechar();
if (dbHelper != null) {
dbHelper.close();
}
}
}
E enfim a classe SQLiteHelper :
package com.br.CadPessoa;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
class SQLiteHelper extends SQLiteOpenHelper {
private static final String CATEGORIA = "livro";
private String[] scriptSQLCreate;
private String scriptSQLDelete;
/**
* Cria uma instância de SQLiteHelper
*
* @param context
* @param nomeBanco nome do banco de dados
* @param versaoBanco versão do banco de dados (se for diferente é para atualizar)
* @param scriptSQLCreate SQL com o create table..
* @param scriptSQLDelete SQL com o drop table...
*/
SQLiteHelper(Context context, String nomeBanco, int versaoBanco, String[]
scriptSQLCreate, String scriptSQLDelete) {
super(context, nomeBanco, null, versaoBanco);
this.scriptSQLCreate = scriptSQLCreate;
this.scriptSQLDelete = scriptSQLDelete;
}
@Override
// Criar novo banco...
public void onCreate(SQLiteDatabase db) {
Log.i(CATEGORIA, "Criando banco com sql");
int qtdeScripts = scriptSQLCreate.length;
// Executa cada sql passado como parâmetro
for (int i = 0; i < qtdeScripts; i++) {
String sql = scriptSQLCreate[i];
Log.i(CATEGORIA, sql);
// Cria o banco de dados executando o script de criação
db.execSQL(sql);
}
}
@Override
// Mudou a versão...
public void onUpgrade(SQLiteDatabase db, int versaoAntiga, int novaVersao) {
Log.w(CATEGORIA, "Atualizando da versão " + versaoAntiga + " para "
+ novaVersao + ". Todos os registros serão deletados.");
Log.i(CATEGORIA, scriptSQLDelete);
// Deleta as tabelas...
db.execSQL(scriptSQLDelete);
// Cria novamente...
onCreate(db);
}
}
O sistema ficará da seguinte maneira:
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Vídeo