Você está na página 1de 25

Construindo CRUD

com Android
Instituto Federal de Mato Grosso
Prof. Alberto Sales
Criando um CRUD com Android usando SQLite
Descrição
 SQLiteOpenHelper é projetado para resolver
dois problemas muito comuns.


Quando o aplicativo é executado pela primeira
vez - Neste ponto, ainda não temos um banco
de dados. Portanto, teremos que criar as
tabelas, índices, dados de inicialização e assim
por diante.

Quando o aplicativo é atualizado para um
esquema mais novo - O banco de dados ainda
estará no esquema antigo da edição mais
antiga do aplicativo.

Teremos a opção de alterar o esquema do
banco de dados para corresponder às
Criando um CRUD com Android usando SQLite
Descrição
 O SQLiteOpenHelper encerra essa lógica para
criar e atualizar um banco de dados de acordo
com nossas especificações. Para isso,
precisamos criar uma subclasse personalizada
do SQLiteOpenHelper implementando pelo
menos os três métodos a seguir:

Construtor

onCreate(SQLiteDatabase db)

onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
Criando um CRUD com Android usando SQLite
Descrição
 Construtor: Esse leva o contexto (por exemplo,
uma atividade), o nome do banco de dados,
uma fábrica, opcional, de cursor e um valor
inteiro representando a versão do esquema de
banco de dados que você está usando
(normalmente a partir de 1, sendo
incrementado).
 onCreate(SQLiteDatabase db): É chamado
quando não há banco de dados e o aplicativo
precisa de um. Ele passa-nos um objeto
SQLiteDatabase, apontando para um banco
de dados recém-criado, que podemos preencher
com tabelas e dados iniciais.
Criando um CRUD com Android usando SQLite
Descrição
 onUpgrade(SQLiteDatabase db, int
oldVersion, int newVersion): Ele é chamado
quando a versão de esquema que precisamos
não coincide com a versão de esquema do
banco de dados, passa-nos um objeto
SQLiteDatabase e os números de versão antiga
e nova. Daí podemos descobrir a melhor
maneira de converter o banco de dados do
esquema antigo para o novo.
Criando um CRUD com Android usando SQLite
Descrição
 Abertura e encerramento da conexão de banco
de dados SQLite do Android
Antes de executar qualquer operação de banco
de dados como inserir, atualizar, excluir
registros em uma tabela, abra primeiro a
conexão do banco de dados chamando o
método getWritableDatabase () como mostrado
abaixo:
public DBManager open() throws SQLException {

dbHelper = new DatabaseHelper(context);


database = dbHelper.getWritableDatabase();
return this;
}

O dbHelper é uma instância da subclasse de


Criando um CRUD com Android usando SQLite
Descrição
 Inserir novo registro na tabela de banco de
dados SQLite do Android

O fragmento de código a seguir mostra como


inserir um novo registro no banco de dados
android do SQLite.

public void insert(String nome, String desc) {


ContentValues contentValue = new ContentValues();
contentValue.put(DatabaseHelper.NOME, nome);
contentValue.put(DatabaseHelper.DESC, desc);
database.insert(DatabaseHelper.TABLE_NAME, null, contentValue);
}

Content Values cria um conjunto vazio de


valores usando o tamanho inicial fornecido.
Criando um CRUD com Android usando SQLite
Descrição
 Atualizando registro na tabela de banco de
dados SQLite do Android

O fragmento a seguir mostra como atualizar


um único registro.
public int update(long _id, String nome, String desc) {
ContentValues contentValues = new ContentValues();
contentValues.put(DatabaseHelper.NOME, nome);
contentValues.put(DatabaseHelper.DESC, desc);
int i = database.update(DatabaseHelper.TABLE_NAME, contentValues, DatabaseHelper._ID
+ " = " + _id, null);
return i;
}
Criando um CRUD com Android usando SQLite
Descrição
Cursor SQLite do Android

Um Cursor representa todo o conjunto de


resultados da consulta. Uma vez que a
consulta é obtida uma chamada para
cursor.moveToFirst () é feita. Chamar
moveToFirst () faz duas coisas:

Isso nos permite testar se a consulta


retornou um conjunto vazio (testando o
valor de retorno)
Ele move o cursor para o primeiro
resultado (quando o conjunto não está
vazio)
Criando um CRUD com Android usando SQLite
Descrição
O código a seguir é usado para buscar todos os
registros da tabela especificada
public Cursor buscarDados() {
String[] columns = new String[] { DatabaseHelper._ID,
DatabaseHelper.NOME, DatabaseHelper.DESC };
Cursor cursor = database.query(DatabaseHelper.TABLE_NAME, columns,
Null, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
}

Outra maneira de usar um Cursor é envolvê-lo


em um CursorAdapter. Assim como
ArrayAdapter adapta arrays, CursorAdapter
adapta objetos Cursor, tornando seus dados
disponíveis para um AdapterView como um
ListView.
DatabaseHelper.java
public class DatabaseHelper extends SQLiteOpenHelper {
// Nome da Tabela
public static final String TABLE_NAME = "PRODUTO";
// Colunas da tabela
public static final String _ID = "_id";
public static final String NOME = "nome";
public static final String DESC = "descricao";
// Base de Dados (Arquivo)
static final String DB_NAME = "PRODUTOS.DB";
// Versão
static final int DB_VERSION = 1;
// Criando pesquisa
private static final String CREATE_TABLE = "create table " + TABLE_NAME + "(" + _ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + NOME + " TEXT NOT NULL, " + DESC +
" TEXT);";
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("APAGA TABELA SE EXISTIR " + TABLE_NAME);
onCreate(db);
}
}
DBManager.java
public class DBManager {
private DatabaseHelper dbHelper;
private Context context;
private SQLiteDatabase database;
public DBManager(Context c) {context = c;}
public DBManager abrir() throws SQLException {
dbHelper = new DatabaseHelper(context);
database = dbHelper.getWritableDatabase();
return this;
}
public void fechar() { dbHelper.close(); }
public void inserir(String nome, String desc) {
ContentValues contentValue = new ContentValues();
contentValue.put(DatabaseHelper.NOME, nome);
contentValue.put(DatabaseHelper.DESC, desc);
database.insert(DatabaseHelper.TABLE_NAME, null, contentValue);
}
public Cursor buscarDados() {
String[] columns = new String[] { DatabaseHelper._ID, DatabaseHelper.NOME, DatabaseHelper.DESC };
Cursor cursor = database.query(DatabaseHelper.TABLE_NAME, columns, null, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
}
public int atualizar(long _id, String nome, String desc) {
ContentValues contentValues = new ContentValues();
contentValues.put(DatabaseHelper.NOME, nome);
contentValues.put(DatabaseHelper.DESC, desc);
int i = database.update(DatabaseHelper.TABLE_NAME, contentValues, DatabaseHelper._ID + " = " + _id, null);
return i;
}
public void deletar(long _id) {
database.delete(DatabaseHelper.TABLE_NAME, DatabaseHelper._ID + "=" + _id, null); }}
Criando um CRUD com Android usando SQLite
Descrição
A classe ProdutoListaActivity.java é a atividade
que é iniciada quando o aplicativo é iniciado.
Abaixo está o layout definido para ele:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:dividerHeight="1dp"
android:padding="10dp" >
</ListView>
<TextView
android:id="@+id/vazio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/texto_lista_vazia" />
</RelativeLayout>
Criando um CRUD com Android usando SQLite
Descrição
ProdutoListaActivity.java
public class ProdutoListaActivity extends ActionBarActivity {
private DBManager dbManager;
private ListView listView;
private SimpleCursorAdapter adapter;
final String[] dbOrigem = new String[] { DatabaseHelper._ID,
DatabaseHelper.NOME, DatabaseHelper.DESC };
final int[] dbDestino = new int[] { R.id.id, R.id.nome, R.id.desc };

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.fragment_lista_vazia);

dbManager = new DBManager(this);


dbManager.abrir();
Cursor cursor = dbManager.buscarDados();

listView = (ListView) findViewById(R.id.list_view);


listView.setEmptyView(findViewById(R.id.vazio));
Criando um CRUD com Android usando SQLite
Descrição
ProdutoListaActivity.java (continuação)
adapter = new SimpleCursorAdapter(this, R.layout.activity_visualizar_registro, cursor,
dbOrigem, dbDestino, 0);
adapter.notifyDataSetChanged();
listView.setAdapter(adapter);
// OnCLickListiner para listar Itens
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long
viewId) {
TextView idTextView = (TextView) view.findViewById(R.id.id);
TextView nomeTextView = (TextView) view.findViewById(R.id.nome);
TextView descTextView = (TextView) view.findViewById(R.id.desc);
String id = idTextView.getText().toString();
String nome = nomeTextView.getText().toString();
String desc = descTextView.getText().toString();
Intent modify_intent = new Intent(getApplicationContext(),
AlterarProdutoActivity.class);
modify_intent.putExtra("nome", nome);
modify_intent.putExtra("desc", desc);
modify_intent.putExtra("id", id);
startActivity(modify_intent);}
});
}
Criando um CRUD com Android usando SQLite
Descrição
ProdutoListaActivity.java (continuação)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();
if (id == R.id.adicionar_registro) {

Intent add_mem = new Intent(this, AdicionarProdutoActivity.class);


startActivity(add_mem);

}
return super.onOptionsItemSelected(item);
}

}
Nesta atividade o objeto DBManager é invocado para executar operações
Criando um CRUD com Android usando SQLite
Descrição
Um SimpleCursorAdapter é definido para adicionar
elementos à lista a partir dos resultados da consulta que
são retornados em um objeto de cursor.
Clicar no item da lista uma Intent é executada para
abrir a classe AlterarProdutoActivity.

O menu contém um item para adicionar um novo


registro a partir da ActionBar. Aqui novamente uma
intenção é executada para abrir a classe
AdicionarProdutoActivity. Abaixo está o código
menu.xml.
Main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"

tools:context="com.journaldev.sqlite.com.albertosales.sqlite.ProdutoListaAc
tivity" >

<item
android:id="@+id/adicionar_registro"
android:icon="@android:drawable/ic_menu_add"
android:orderInCategory="100"
android:title="@string/adicionar_registro"
app:showAsAction="always"/>

</menu>
O layout xml e o código de
AdicionarProdutoActivity
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp" >

<EditText
android:id="@+id/nome_edittext" Dois
Dois componentes
componentes EditText
EditText que
que levam
levam as
as
android:layout_width="match_parent" entradas para NOME DO PRODUTO
entradas para NOME DO PRODUTO e e
android:layout_height="wrap_content" DESCRIÇÃO
DESCRIÇÃO juntamente
juntamente comcom um
um botão
botão
android:ems="10" para
para adicionar
adicionar os
os valores
valores para
para oo banco
banco de
de
android:hint="@string/titulo_nome" > dados
dados ee exibi-lo
exibi-lo no
no ListView
ListView são
são definidos.
definidos.

<requestFocus />
</EditText>

<EditText
android:id="@+id/descricao_edittext" <Button
android:layout_width="match_parent" android:id="@+id/adicionar_registro"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:ems="10" android:layout_height="wrap_content"
android:hint="@string/titulo_descricao" android:layout_gravity="center"
android:inputType="textMultiLine" android:text="@string/adicionar_registro" />
android:minLines="5" >
</EditText> </LinearLayout>
Criando um CRUD com Android usando SQLite
Descrição
AdicionarProdutoActivity.java
public class AdicionarProdutoActivity extends Activity implements OnClickListener {

private Button adicionarBtt;


private EditText nomeEditText;
private EditText descEditText;

private DBManager dbManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setTitle("Adicionar Registro");

setContentView(R.layout.activity_adicionar_registro);

nomeEditText = (EditText) findViewById(R.id.nome_edittext);


descEditText = (EditText) findViewById(R.id.descricao_edittext);

adicionarBtt = (Button) findViewById(R.id.adicionar_registro);

dbManager = new DBManager(this);


dbManager.abrir();
adicionarBtt.setOnClickListener(this);
}
Criando um CRUD com Android usando SQLite
Descrição
AdicionarProdutoActivity.java (cont...)
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.adicionar_registro:

final String name = nomeEditText.getText().toString();


final String desc = descEditText.getText().toString();

dbManager.inserir(name, desc);

Intent main = new Intent(AdicionarProdutoActivity.this,


ProdutoListaActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(main);
break;
}
}

}
O layout xml e o código de
AlterarProdutoActivity.java
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" <LinearLayout
android:padding="10dp" > android:layout_width="fill_parent"
android:layout_height="wrap_content"
<EditText android:weightSum="2"
android:id="@+id/nome_edittext" android:gravity="center_horizontal"
android:layout_width="match_parent" android:orientation="horizontal" >
android:layout_height="wrap_content"
android:layout_marginBottom="10dp" <Button
android:ems="10" android:id="@+id/btn_atualizar"
android:hint="@string/titulo_nome" /> android:layout_width="wrap_content"
android:layout_height="wrap_content"
<EditText android:layout_weight="1"
android:id="@+id/descricao_edittext" android:text="@string/btn_atualizar" />
android:layout_width="match_parent"
android:layout_height="wrap_content" <Button
android:ems="10" android:id="@+id/btn_deletar"
android:hint="@string/titulo_descricao" android:layout_width="wrap_content"
android:inputType="textMultiLine" android:layout_height="wrap_content"
android:minLines="5" > android:layout_weight="1"
</EditText> android:text="@string/btn_deletar" />
</LinearLayout>
</LinearLayout>
Criando um CRUD com Android usando SQLite
Descrição
AlterarProdutoActivity.java
public class AlterarProdutoActivity extends Activity implements OnClickListener {
private EditText nomeText,descText;
private Button atualizarBtn, deletarBtn;
private long _id;
private DBManager dbManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("Alterar Registro");
setContentView(R.layout.activity_alterar_registro);
dbManager = new DBManager(this);
dbManager.abrir();
nomeText = (EditText) findViewById(R.id.nome_edittext);
descText = (EditText) findViewById(R.id.descricao_edittext);

atualizarBtn = (Button) findViewById(R.id.btn_atualizar);


deletarBtn = (Button) findViewById(R.id.btn_deletar);

Intent intent = getIntent();


String id = intent.getStringExtra("id");
String nome = intent.getStringExtra("nome");
String desc = intent.getStringExtra("desc");
Criando um CRUD com Android usando SQLite
Descrição
AlterarProdutoActivity.java
_id = Long.parseLong(id);

nomeText.setText(nome);
descText.setText(desc);

atualizarBtn.setOnClickListener(this);
deletarBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_atualizar:
String nome = nomeText.getText().toString();
String desc = descText.getText().toString();

dbManager.atualizar(_id, nome, desc);


this.retornarInicio();
break;

case R.id.btn_deletar:
dbManager.deletar(_id);
this.retornarInicio();
break;
}
}
Criando um CRUD com Android usando SQLite
Descrição
AlterarProdutoActivity.java
public void retornarInicio() {
Intent inicio_intent = new Intent(getApplicationContext(), ProdutoListaActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(inicio_intent);
}
}

Você também pode gostar