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