Android Banco de Dados (SQLITE)

Android Banco de Dados (SQLITE)

Nessa lição vamos aprender como armazenar informações em um banco de dados utilizando o SQLite. No exemplo abaixo iremos criar uma listagem (listview) de produtos que virá de um banco de dados. Terá também a opção de cadastrar produtos novos, excluir, alterar e visualizar os produtos selecionados na listagem.

1- Crie um projeto no chamado AppBancoDeDados

2- Crie uma activity chamada ActivityPrincipal com um listview e quatros botões: novo, excluir, alterar e detalhe. A imagem mostra como deve estar a disposição dos botões juntamente com o listview.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_principal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.totemarcal.appbancodedados.ActivityPrincipal">

    <ListView
        android:choiceMode="singleChoice"
        android:id="@+id/listProdutos"
        android:layout_above="@+id/layoutBts"
        android:layout_alignParentTop="true"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"/>


    <LinearLayout
        android:id="@+id/layoutBts"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <LinearLayout
            android:layout_alignParentBottom="true"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

                <Button
                    android:text="Novo"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/btCadastrar"
                    android:onClick="onCLick"/>
                <Button
                    android:text="Excluir"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/btExcluir"
                    android:onClick="btExcluir"/>
        </LinearLayout>
        <LinearLayout
            android:layout_alignParentBottom="true"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
                <Button
                    android:text="Alterar"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/btalterar" />
                <Button
                    android:text="Detalhe"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/btDetalhe" />

        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

3- Crie outra activity chamada ActivityProduto com os campos conforme imagem abaixo.

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_table_form_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:shrinkColumns="2"
android:stretchColumns="2"
tools:context="com.example.totemarcal.exemploandroid.TableFormLayout">


<TableRow
    android:layout_height="wrap_content"
    android:layout_width="match_parent">


    <TextView android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Nome:"/>


    <EditText
        android:id="@+id/edtNome"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:hint="Informe Nome Do Produto">

        <requestFocus />
    </EditText>

</TableRow>



<TableRow
    android:layout_height="wrap_content"
    android:layout_width="match_parent">

    <TextView android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Preço:" />


    <EditText android:id="@+id/edtPreco"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:hint="Informe Preço do Produto"
        android:inputType="numberDecimal" />

</TableRow>


<TableRow
    android:layout_height="wrap_content"
    android:layout_width="match_parent">


    <TextView android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Quantidade:"
        />


    <EditText android:id="@+id/edtQuantidade"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="number"
        android:hint="Informe Quantidade" />

</TableRow>

<TableRow

    android:layout_height="wrap_content"
    android:layout_width="match_parent">


    <Button android:id="@+id/btnSalvar"
        android:layout_span="2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Salvar"
        android:layout_weight="1"
        android:onClick="onClick"/>
</TableRow>

<TableRow
    android:layout_height="wrap_content"
    android:layout_width="match_parent">
</TableRow>
</TableLayout>

4- A imagem da esquerda mostra a tela sem preferências cadastradas e a imagem da direta mostra com as preferências recuperadas.

sqlite2 sqlite1

5- Crie uma classe Produto.java que ir’representar a entidade de Produto.

public class Produto {
    private int id;
    private String nome;
    private float preco;
    private int quantidade;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public float getPreco() {
        return preco;
    }

    public void setPreco(float preco) {
        this.preco = preco;
    }

    public int getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    @Override
    public String toString() {
        return this.nome;
    }
}

6- Crie a classe ProdutoDAO.java onde terá os métodos de acesso ao banco de dados. Para isso a classe tem que herdar de SQLiteOpenHelper. O método onCreate() cria-se as tabelas com o comando db.execSQL(ddl). O método getWritableDatabase() obtém a referência do banco de dados e pode-se usar o insert, update e delete. O método getReadableDatabase() é utilizado para consultar informações do banco.

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;


public class ProdutoDAO extends SQLiteOpenHelper {

    private static final int VERSAO = 1;
    private static final String TABELA = "produto";
    private static final String DATABASE = "AppBanco";

    public ProdutoDAO(Context context) {
        super(context, DATABASE, null, VERSAO);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        String ddl = "CREATE TABLE IF NOT EXISTS "+ TABELA +
                "(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
                "nome TEXT, " +
                "preco REAL , " +
                "quantidade INTEGER);";
        db.execSQL(ddl);
    }

    public void inserirProduto(Produto produto){
        ContentValues values = new ContentValues();
        values.put("nome", produto.getNome());
        values.put("preco", produto.getPreco());
        values.put("quantidade", produto.getQuantidade());
        getWritableDatabase().insert(TABELA, null, values);
    }
    public void apagarProduto(Produto produto){
        String args[] = {Integer.toString(produto.getId())};
        getWritableDatabase().delete(TABELA, "id=?", args);
    }

    public void alterarProduto(Produto produto){
        ContentValues values = new ContentValues();
        values.put("nome", produto.getNome());
        values.put("preco", produto.getPreco());
        values.put("quantidade", produto.getQuantidade());
        String args[] = {Integer.toString(produto.getId())};
        getWritableDatabase().update(TABELA, values, "id=?", args);
    }

    public Cursor getCursorListaProduto(){
        List<Produto> lista = new ArrayList<Produto>();
        Cursor cursor = getReadableDatabase().rawQuery("SELECT * FROM " + TABELA + ";", null);
        return cursor;
    }

    public List<Produto> getListaProduto(){
        List<Produto> lista = new ArrayList<Produto>();
        Cursor cursor = getReadableDatabase().rawQuery("SELECT * FROM " + TABELA + ";", null);
        cursor.moveToFirst();
        while (cursor.moveToNext()){
            Produto produto = new Produto();
            produto.setId(cursor.getInt(cursor.getColumnIndex("id")));
            produto.setNome(cursor.getString(cursor.getColumnIndex("nome")));
            produto.setPreco(cursor.getFloat(cursor.getColumnIndex("preco")));
            produto.setQuantidade(cursor.getInt(cursor.getColumnIndex("quantidade")));
            lista.add(produto);
        }
        cursor.close();
        return lista;
    }

    public Produto getProdutoByID(int id){
        Cursor cursor = getReadableDatabase().query(TABELA, new String[]{"id","nome","preco","quantidade"}, "id=" + id, null,null, null, null);
        cursor.moveToFirst();
        Produto produto = new Produto();
        produto.setId(cursor.getInt(cursor.getColumnIndex("id")));
        produto.setNome(cursor.getString(cursor.getColumnIndex("nome")));
        produto.setPreco(cursor.getFloat(cursor.getColumnIndex("preco")));
        produto.setQuantidade(cursor.getInt(cursor.getColumnIndex("quantidade")));
        cursor.close();
        return produto;
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

7- Implemente a classe ActivityPrincipal.java para carregar a listview.

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.List;

public class ActivityPrincipal extends AppCompatActivity {

    private ProdutoDAO produtoHelper;
    private ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_principal);
        carregarListView();
    }

    @Override
    protected void onResume(){
        super.onResume();
        carregarListView();
    }

    public void carregarListView(){
        produtoHelper = new ProdutoDAO(this);
        listView = (ListView) findViewById(R.id.listProdutos);
        List<Produto> produtos = produtoHelper.getListaProduto();

        if (produtos.size() > 0){
            ArrayAdapter<Produto> adaptador = new ArrayAdapter<Produto>(this, android.R.layout.simple_list_item_checked, produtos);
            listView.setAdapter(adaptador);
        }else{
            Toast.makeText(this, "Nenhum registro encontrado", Toast.LENGTH_SHORT).show();
        }
    }

    public void onCLick (View view){
        if(view.getId() == R.id.btCadastrar){
            startActivity(new Intent(this, ActivityProduto.class));
        }
    }

    public void btExcluir(View view){

        String selecionados = "";

        //Cria um array com os itens selecionados no listview
        SparseBooleanArray checked = listView.getCheckedItemPositions();

        for (int i = 0; i < checked.size(); i++){
            Produto produto = (Produto) listView.getItemAtPosition(checked.keyAt(i));
            //pega os itens marcados
            produtoHelper.apagarProduto(produto);
        }
        Toast.makeText(this, "Produto Apagado com Sucesso!", Toast.LENGTH_LONG).show();
        carregarListView();
    }

}

8- Implemente a classe ProdutoActivity.java para salvar produto.

import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class ActivityProduto extends AppCompatActivity {

    private ProdutoDAO produtoHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_produto);
        produtoHelper = new ProdutoDAO(this);
    }

    public void onClick(View view){
        try{
            EditText edtNome = (EditText) findViewById(R.id.edtNome);
            EditText edtPreco = (EditText ) findViewById(R.id.edtPreco);
            EditText edtQuantidade = (EditText) findViewById(R.id.edtQuantidade);
            Produto produto = new Produto();
            produto.setNome(edtNome.getText().toString());
            produto.setPreco(Float.parseFloat(edtPreco.getText().toString()));
            produto.setQuantidade(Integer.parseInt(edtQuantidade.getText().toString()));
            produtoHelper.inserirProduto(produto);

            Toast.makeText(this, "Cadastrado com sucesso!", Toast.LENGTH_SHORT).show();
            this.finish();
        }catch (Exception e){
            e.getStackTrace();
        }


    }
}

 

Deixe uma resposta

Specify Google Client ID and Secret in Super Socializer > Social Login section in admin panel for Google Login to work

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *