Vamos lá, Crie um projeto android com o nome que desejar, no meu caso vou dar o nome de cadPessoa.

figura

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:

figura

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:

figura

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:

figura
figura
figura