Buscar

DM-AV2##SEM NOME

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UNIVERSIDADE VEIGA DE ALMEIDA 
AVA2 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Rio De Janeiro, RJ 2021 
AVA2 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
Rio de Janeiro 
1 SUMÁRIO 
2 ENUNCIADO 
3 CONTEÚDO 
4 BIBLIOGRAFIA 
2021 
ÍNDICE 
03 
04 
06 
28 
2. ENUNCIADO
Desenvolvimento de um aplicativo com a persistência de dados com o uso do SQLite 
no Android 
A persistência é um recurso muito importante no desenvolvimento de aplicativos. Saber 
trabalhar com os diversos tipos de armazenamento permite que você desenvolva 
projetos mais robustos. O desenvolvimento de projetos com uso de banco de dados, 
seja local ou remoto, é um pré-requisito para o desenvolvimento de aplicativos 
modernos. 
Para a concretização dos conhecimentos obtidos nesta unidade, você deve definir um 
objeto para a criação de sua classe e desenvolver um projeto com uso de persistência 
de dados com uso do SQLite no Android para realizar a manutenção dos diferentes 
registros de armazenamento, com a listagem, inclusão, alteração e exclusão desses 
registros. 
Crie um aplicativo Android para trabalhar com uma base de dados com uma tabela para 
persistência de dados de um objeto escolhido por você. 
O objeto deve ser definido por meio de uma classe própria, com: 
• O mínimo de cinco atributos (com uso de três diferentes tipos de dados) mais o
atributo id (long).
• Pelo menos um método construtor.
• Métodos de acesso (setters & getters) para todos os atributos.
• Outros métodos que sejam necessários.
A aplicação deverá tratar a inclusão, alteração e exclusão dos registros, além de tratar
o acesso, abertura e fechamento do recurso do banco de dados do SQLite, com o uso
da arquitetura em três camadas.
O aplicativo deverá apresentar os dados dos objetos armazenados por meio de uma
lista (ListView) e apresentar as funcionalidades de inclusão, exclusão e alteração, que
podem ser realizadas de acordo com a sua escolha.
Você pode montar as telas a seu critério, desde que atenda aos requisitos de listagem,
inclusão, exclusão e alteração dos registros.
Procedimentos para elaboração do TD
Crie um projeto no Android Studio e desenvolva a aplicação. Prepare um documento do 
Word com uma capa (apresentado a instituição, o curso, a disciplina, o aluno e o 
professor); a introdução do trabalho; o conteúdo com a documentação do sistema, 
contendo a captura das telas e os códigos de desenvolvimento das telas (código XML 
da view); os códigos de programação de todas as classes com comentários e 
apresentação dos testes realizados com o aplicativo com as capturas das telas dos 
testes; a conclusão e a bibliografia do trabalho. 
Realize o envio da tarefa incluindo o arquivo do Word. 
3. CONTEÚDO
Esta apicação visa realizar o CRUD de disciplinas usando SQLite com java para 
android. 
Código da activity_main.xml
<?xml version="l.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.Constraintlayout
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" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context=".MainActivity">
<ListView android:id="@+id/lista"
android:layout_width="312dp"
android:layout_height="388dp" android:layout_margin5tart="8dp"
android:layout_marginleft="8dp"
android:layout_marginTop="36dp" android:layout_marginEnd="8dp"
android:layout_marginRight="Bdp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"></ListView>
<Button android:id="@+id/btSair"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_margin5tart="8dp" android:layout_marginleft="8dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:onClick="sair"
android:text="Sair do Aplicativo"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/
btlncluir"
app:layout_constraintTop_toBottomOf="@+id/lista" />
<TextView android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_margin5tart="8dp"
android:layout_marginleft="8dp" android:layout_marginTop="Bdp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp" android:layout_marginBottom="8dp"
android:text="Gerenciamento de
Disciplinas." app:layout_constraintBottom_toTopOf="@+id/lista"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.457" />
<Button android:id="@+id/btlncluir"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_margin5tart="8dp" android:layout_marginleft="8dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="8dp" android:layout_marginRight="8dp"
android:onClick="incluirDisciplina"
android:text="lnserir Disiplina" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.078" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lista" />
</androidx.constraintlayout.widget.Constraintlayout>
Código da actvity_tratar_disciplina.xml
<?xml version="l.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.Constraintlayout
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" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context=".TratarDisciplina">
<Button android:id="@+id/button"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_margin5tart="49dp" android:layout_marginleft="49dp"
android:layout_marginTop="552dp"
android:layout_marginEnd="274dp" android:layout_marginRight="274dp"
android:layout_marginBottom="l31dp" android:onClick="alterarlnserir" android:text="Alterar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
<EditText android:id="@+id/editText4"
android:layout_width="91dp" android:layout_height="41dp" android:layout_margin5tart="8dp"
android:layout_marginleft="8dp"
android:layout_marginTop="Bdp" android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp" android:ems="lO" android:inputType="numberDecimal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.093" app:layout_constraintStart_toEndOf="@id/
textView7"
app:layout_constraintTop_toBottomOf="@id/editText3"
app:layout_constraintVertical_bias="0.103" />
<EditText android:id="@+id/editText3"
android:layout_width="91dp"
android:layout_height="41dp" android:layout_margin5tart="8dp"
android:layout_marginleft="8dp"
android:layout_marginTop="Bdp" android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp" android:ems="l0" android:inputType="numberDecimal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias ="0.093" app:layout_constraint5tart_toEndOf="@+id/
textView6"
app:layout_constraintTop_toBottomOf="@+id/editText2"
app:layout_constraintVertical_bias="0.069" />
<TextView
android:id="@+id/textView7" android:layout_width="52dp" android:layout_height="42dp"
android:layout_margin5tart="8dp" android:layout_marginleft="Bdp"
android:layout_marginTop="8dp"
android:text="A3:" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.088"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView6"
app:layout_constraintVertical_bias="0.096" />
<TextView android:id="@+id/textView6"
android:layout_width="52dp" android:layout_height="42dp" android:layout_margin5tart="8dp"android:layout_marginleft="8dp" android:layout_marginTop="Bdp"
android:text="A2:" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.088"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/
textView5"
app:layout_constraintVertical_bias="0.064" />
<TextView android:id="@+id/textView3"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_margin5tart="28dp" android:layout_marginleft="28dp"
android:layout_marginTop="127dp"
android:layout_marginEnd="258dp" android:layout_marginRight="258dp"
android:layout_marginBottom="585dp" android:text="Nome da Disciplina:"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<EditText android:id="@+id/editText"
android:layout_width="356dp"
android:layout_height="48dp" android:layout_margin5tart="8dp"
android:layout_marginleft="8dp"
android:layout_marginTop="l72dp" android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="Slldp" android:ems="l0" android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
<TextView android:id="@+id/textView4"
android:layout_width="89dp" android:layout_height="31dp" android:layout_marginTop="20dp"
android:text="Notas:" app:layout_constraintTop_toBottomOf="@+id/editText"
tools:layout_editor_absoluteX="30dp"
tools:ignore="MissingConstraints" />
<TextView android:id="@+id/textView5"
android:layout_width="52dp" android:layout_height="42dp" android:layout_margin5tart="8dp"
android:layout_marginleft="8dp" android:layout_marginTop="8dp" android:text="Al:"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.088" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView4"
app:layout_constraintVertical_bias="0.057" />
<EditText
android:id="@+id/editText2" android:layout_width="91dp" android:layout_height="41dp"
android:layout_margin5tart="8dp" android:layout_marginleft="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp" android:layout_marginBottom="8dp" android:ems="l0"
android:inputType="numberDecimal" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias ="0.093"
app:layout_constraintStart_toEndOf="@+id/textView5"
app:layout_constraintTop_toBottomOf="@+id/textView4"
app:layout_constraintVertical_bias="0.081" />
<Button android:id="@+id/button2"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_margin5tart="284dp" android:layout_marginleft="284dp"
android:layout_marginTop="552dp" android:layout_marginEnd="39dp"
android:layout_marginRight="39dp"
android:layout_marginBottom="l31dp" android:onClick="excluir" android:text="Excluir"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button3" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin5tart="153dp" android:layout_marginleft="153dp"
android:layout_marginTop="593dp" android:layout_marginEnd="l70dp"
android:layout_marginRight="170dp" android:layout_marginBottom="90dp"
android:onClick="voltar"
android:text="Voltar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.Constraintlayout>
Código do objeto Disciplina
package com.example.disciplina;
public class Disciplina {
// Definição dos atributos
li O atributo id não existia na versão anterior private long id;
private String nome; private double al, a2, a3;
// Métodos novos, de acesso do atributo id public long getld() {
return id;
}
public void setld(long id) {
this.id= id;
}
// Métodos de acesso (setters & getters) public String getNome() {
return nome;
}
public void setNome(String nome) { if (!nome.isEmpty()) {
this.nome= nome;
}
}
public double getAl() { return al;
}
public void setAl(double al) { if (al >= O) {
this.al= al;
}
}
public double getA2() { return a2;
}
public void setA2(double a2) { if (a2 >= O) {
this.a2= a2;
}
}
public double getA3() { return a3;
}
public void setA3(double a3) { if (a3 >= O) {
this.a3= a3;
}
}
// Método construtor com definição dos valores-padrão public Disciplina() {
nome= "Nome Disciplina"; al = O.O;
a2 = O.O; a3 = O.O;
}
// Método de formatação dos dados para exibição na lista
public String textolista() { String item;
item = getNome();
item+= ¹¹\nAl: ¹¹+ String.format{ ¹1 %3.lf¹¹, getAl()); item+= ¹¹\tA2: ¹1 + String.format{ ¹1
%3.lf¹¹, getA2()); item+= ¹¹\tA3: ¹1 + String.format("%3.lf", getA3()); return item;
}
}
Código do disciplina_dao(onde as definições de acesso ao banco de dados ficam)
package com.example.disciplina;
import java.util.Arraylist ; import java.util.List ;
import android.content.ContentValues; import android.content.Context; import 
android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite . SQLiteDatabase;
// Camada de dados (Persistência)
// Classe de definição para os acessos ao banco de dados public class Disciplina_DAO{
// Define um objeto banco de dados private SQLiteDatabase database;
// Define as colunas da tabela
private String [] columns = { DisciplinaSQLiteOpenHelper.COLUNA_/0
DisciplinaSQLiteOpenHelper.COLUNA_NOME DisciplinaSQLite0penHelper.COLUNA_A1
DisciplinaSQLiteOpenHelper.COLUNA_A2, DisciplinaSQLite0penHelper.COLUNA_A3 };
private DisciplinaSQLiteOpenHelper sqliteOpenHelper;
// Método construtor
public Disciplina_DAO(Context context) {
sqliteOpenHelper = new DisciplinaSQLiteOpenHelper(context);
}
// Método para abrir o recurso de banco de dados public void open O throws SQLException{
database = sqliteOpenHelper.getWritableDatabase();
}
// Método para fechar o recurso de banco de dados public void close() {
sqliteOpenHelper.close ();
}
// Método de inclusão de registro
public void inserir ( String nome, double al, double a2, double a3
) {
// Prepara os valores das colunas da tabela para a inserção ContentValues values = new 
ContentValues ();
values.put ( DisciplinaSQLiteOpenHelper.COLUNA_NOME, nome );
values.put ( DisciplinaSQLite0penHelper.COLUNA_A1 , String. va/ueOf(al) );
values.put ( DisciplinaSQLite0penHelper.COLUNA_A2, String.
va/ue0f(a2) );
values.put ( DisciplinaSQLiteOpenHelper.COLUNA_A3, String. va/ue0f(a3) );
// Efetua a inclusão com retorno do id do registro
long insertld = database.insert ( DisciplinaSQLiteOpenHelper.TABELA , null , values );
}
// Método para atualização de um registro da tabela
// Recebe os dados para a inserção
public void alterar(long id, String nome, double al, double a2, double a3){
li Prepara os dados para a atualização ContentValues values= new ContentValues ();
values.put ( DisciplinaSQLiteOpenHelper.COLUNA_NOME, nome ); values.put ( 
DisciplinaSQLiteOpenHelper.COLUNA_Al , String.
va/ueOf(al) );
values.put ( DisciplinaSQLiteOpenHelper.COLUNA_A2, String. va/ue0f(a2) );
values.put ( DisciplinaSQLite0penHelper.COLUNA_A3, String. va/ue0f(a3) );
// Efetua a alteração do registro, de acordo com o id do registro 
database.update(DisciplinaSQLiteOpenHelper. TABELA, values, 
DisciplinaSQLiteOpenHelper.COLUNA_/0 +
¹¹ = 11 + id, null);
}
// Método para a exclusão de um registro
li Recebe o id do registro que será excluído public void apagar ( long id ) {
li Exclui o registro a partir do id
database.delete ( DisciplinaSQLiteOpenHelper. TABELA , 
DisciplinaSQLiteOpenHelper.COLUNA_/0
+ 11 = 11 + id , null );
}
// Método de busca de registro a partirdo id
li Busca os dados de cada registro a partir do id
li Retorna um objeto Disciplina com os dados do registro public Disciplina buscar ( long id ) {
li Realiza a busca a partir do id do registro
li Usado para buscar os dados para a montagem da tela e
li para a alteração ou exclusão do registro
li O objeto cursor armazena os registros da consulta
li Como o filtro é o id, apenas um registro será selecionado
Cursor cursor= database.query( DisciplinaSQLiteOpenHelper.TABELA, columns , 
DisciplinaSQLiteOpenHelper.COLUNA_/0 + 11 = 11 + id, null , null , null , null );
cursor . moveToFirst ();
li Cria um objeto Disciplina auxiliar para retornar o objeto Disciplina disciplina= new Disciplina 
();
li Preenche os dados do registro do banco li nas propriedades do objeto auxiliar disciplina.setld 
( 
cursor.getlong (O));
disciplina.setNome ( cursor.getString (1) ); disciplina.setAl ( cursor.getDouble (2) ); 
disciplina.setA2 ( cursor.getDouble (3) ); disciplina.setA3 ( cursor.getDouble (4) );
li Fecha o recurso do cursor cursor.close();
li Retorna o objeto auxiliar do tipo Disciplina return disciplina ;
}
li Método de montagem da lista de registros das disciplinas
li Monta a lista de disciplinas para a carga da lista na tela principal
li O método retornará uma lista com todas as disciplinas armazenadas
li no banco
public List <Disciplina > getAII O {
// Prepara um Arraylist para retorno dos registros armazenados no banco
List <Disciplina > disciplinas= new Arraylist <Disciplina>() ;
li Objeto cursor para armazenar temporariamente os dados
li retornados pela consulta
Cursor cursor= database. query ( DisciplinaSQLiteOpenHelper.
TABELA , columns , null , null , null , null , null );
// Passa o ponteiro para o primeiro registro do cursor cursor. moveToFirst ();
li Para cada registro, os dados da tabela são copiados para
li o objeto Disciplina da lista while (!cursor.isAfterLast ()) {
Disciplina disciplina= new Disciplina (); disciplina.setld ( cursor. getlong (O)); 
disciplina.setNome ( cursor. getString ( 1) ); disciplina.setAl ( cursor.getDouble (2) ); 
disciplina.setA2 ( cursor.getDouble (3) ); disciplina.setA3 ( cursor.getDouble (4) ); 
disciplinas.add ( disciplina );
cursor. moveToNext ();
}
// Fecha o cursor
cursor. close ();
// Retorna à lista de disciplinas return disciplinas;
}
}
Código do SQLiteOpenHelper (para definição da tabela e atributos)
package com.example.disciplina; import android.content.Context ;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DisciplinaSQLiteOpenHelper extends SQLiteOpenHelper {
// Definição da tabela e dos atributos
li Os espaços antes e depois dos nomes são importantes,
li pois será criada uma QUERY (consulta) com esses identificadores
public static final String TABELA = "Disciplina "; public static final String COLUNA_ID = "id" ;
public static final String COLUNA_NOME = "nome";
public static final String COLUNA_Al = "al";
public static final String COLUNA_A2 = "a2"; public static final String COLUNA_A3 = "a3";
li Define o nome do banco de dados
private static final String DATABASE_NAME = "disciplinas.db";
li Define a versão do banco
li O valor deve ser incrementado somente em casos de alterações
li na estrutura do banco (tabelas e atributos) private static final int DATABASE VERS/ON = 1;
li String de criação da tabela no banco de dados
private static final String CRIAR_BANCO = "create table "
+ TABELA + "("
+ COLUNA_ID + " integer primary key autoincrement , "
+ COLUNA_NOME + " text not null , "
+ COLUNA_Al + " double not null , "
+ COLUNA_A2 + " double not null , "
+ COLUNA_A3 + " double not null ) ;";
li Método construtor da classe para criação ou atualização do banco public 
DisciplinaSQLiteOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
li Cria o banco de dados, caso não exista @Override
public void onCreate ( SQLiteDatabase database ) { database . execSQL ( CRIAR_BANCO );
}
li Atualiza o banco de dados, caso seja uma nova versão @Override
public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) { db. execSQL 
("DROP 
TABLE IF EXISTS " +TABELA );
onCreate (db);
}
}
Código do Controller da MainActivity
package com.example.disciplina;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle; import android.content.lntent; import android.view.View;
import android.widget.AdapterView; import android.widget.ArrayAdapter; import 
android.widget.ListView; import java.util.lterator;
import java.util.List;
public class MainActivity extends AppCompatActivity implements 
AdapterView.OnltemClicklistener{
// Componente lista da view ListView lista;
// Declaração da intent lntent intent;
li Determina o código da intent
public static final int ACTIVITY-REQUEST-DISCIPLINA = 1;
li Declara o objeto de persistência (acesso ao banco)
private Disciplina_DAO dao ;
li Vetor com os dados das disciplinas para apresentar na lista private String[] disciplinas;
li Vetor com o id dos registros para identificar o registro
li para os casos de seleção na lista para alteração ou
li exclusão
private long[] idDisiciplinas; @Override
protected void onCreate(Bundle savedlnstanceState) { super.onCreate(savedlnstanceState);
setContentView(R.layout.activity_main); lista = (ListView) findViewByld(R.id.lista);
li Altera o título da janela da atividade setTitle("Banco de Dados com SQLite!"); li Cria o objeto 
de acesso ao banco
dao = new Disciplina_DAO(this);
li Abre o banco dao.open();
li Determina que os itens da lista serão clicáveis e
li prepara o método de controle: onltemClick(..) lista.setOnltemClicklistener(this); li Clique no 
item
}
li Sempre que a atividade passar pelo método onResume, a lista
li será atualizada @Override
protected void onResume O {
dao.open (); super.onResume ();
li Prepara a lista que será exibida ao usuário na tela
li Busca no banco todos os registros List<Disciplina > listaDisciplinas = dao.getAII();
li Define o tamanho dos vetores de disciplinas e id
li em função do tamanho (quantidade de registros) da tabela disciplinas = new 
String[listaDisciplinas.size()];
idDisiciplinas = new long[listaDisciplinas.size()];
li Primeiro índice dos vetores int i =0;
// Cria um objeto iterator para preencher o vetor de disciplinas
li com os dados dos registros
lterator<Disciplina> iterator = listaDisciplinas.iterator();
li Para cada registro preencher os vetores while (iterator.hasNext()) {
li Objeto disciplina auxiliar Disciplina aux = new Disciplina();
li Recebe no objeto auxiliar os dados de cada registro aux = (Disciplina) iterator.next();
li Preenche o vetor de disciplinas para visualização na lista disciplinas[i] = aux.textolista();
li Preenche o vetor de id para identificação do registro
li ao se escolher um elemento da lista para
li a alteração ou exclusão idDisiciplinas[i] = aux.getld(); li Próximo item dos vetores i++;
}
// Carrega o ArrayAdapter com os dados do vetor de disciplinas ArrayAdapter <String >
adapter =
new ArrayAdapter<String >(
this ,
android.R.layout.simple_list_item_l , disciplinas ); li Preenche a lista com os dados do 
ArrayAdapter lista.setAdapter( adapter );
}
li Fecha o recurso de acesso ao banco sempre que a atividade passar
li por uma pausa @Override
protected void onPause O {
li Libera o recurso de acesso ao banco dao.close();
super.onPause ();
}
li Método para seleção de um item da lista para
li alteração ou exclusão (atende à interface: AdapterView.OnltemClicklistener)
public void onltemClick(AdapterView<?> parent, View view, int position, long ident) {
li Position é a posição do item na lista
li Armazena o índice do elemento escolhido na lista long id = idDisiciplinas[position];
li Preparação da intent com previsão de retorno de dados intent = new 
lntent(getApplicationContext(), TratarDisciplina.
class);
// Passa os dados do item escolhido para a atividade de tratamento intent.putExtra("acao", O);
intent.putExtra("id", id);
// Chama a atividade startActivity(intent);
}
// Métodode controle para chamada da atividade secundária para inclusão public void 
incluirDisciplina(View v){
// lntent para chamar a atividade secundária
intent = new lntent(getApplicationContext(), TratarDisciplina.
class);
// Passa os dados do item escolhido para a atividade de tratamento intent.putExtra("acao", -1);
intent.putExtra("id", OL);
// Chama a atividade startActivity(intent);
}
// Método para encerrar o aplicativo public void sair(View v){
finish();
}
}
Código do Controller TratarDisciplina
package com.example.disciplina;
import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle;
import android.view.View;
import android.widget.Button; import android.widget.EditText;
public class TratarDisciplina extends AppCompatActivity {
// Declaração dos componentes de tela EditText edl, ed2, ed3, ed4;
Button btl, bt2;
li Atributos de informações de acao: O : alteração ou exclusão
li -1 : inclusão private int acao;
li ld do registro para alteração ou exclusão
li será usado com o método buscar para trazer os dados do registro private long id;
@Override
protected void onCreate(Bundle savedlnstanceState) { super.onCreate(savedlnstanceState); 
setContentView(R.layout.activity_tratar_disciplina);
btl = (Button) findViewByld(R.id.button);
bt2 = (Button) findViewByld(R.id.button2);
edl = (EditText) findViewByld(R.id.editText); ed2 = (EditText) findViewByld(R.id.editText2); ed3 =
(EditText) findViewByld(R.id.editText3); ed4 = (EditText) findViewByld(R.id.editText4);
// Recebe os dados da atividade principal
li e preenche a tela (view)
acao = getlntent().getExtras().getlnt("acao"); id = getlntent().getExtras().getlong("id");
// Altera o título e prepara a tela if (acao == -1) {
li Tela de inclusão
li Usa dados-padrão setTitle("lnserir Disciplina"); btl.setText("lncluir"); bt2.setEnabled(false);
edl.setText("Nome Disciplina"); ed2.setText(String.format("%.lf", O.O));
ed3.setText(String.format("%.lf", O.O));
ed4.setText(String.format("%.lf", O.O));
} else {
li Tela de alteração ou exclusão setTitle("Alterar ou Excluir Disciplina");
li Cria um objeto Disciplina auxiliar para armazenar
li os dados do registro
Disciplina aux = new Disciplina();
// Cria o objeto de acesso ao banco Disciplina_DAO dao = new Disciplina_DAO(this);
// Abre o banco dao.open();
li Faz a consulta pelo id do registro para
// buscar os dados na tabela
aux = dao.buscar(id);
// Preenche os dados do registro na tela edl.setText(aux.getNome()); ed2.setText(String. 
format("o/o. lf", aux.getAl())); ed3.setText(String. format("o/o. lf", aux.getA2())); 
ed4.setText(String. format("o/o. lf", aux.getA3()));
// Libera o recurso de acesso ao banco de dados dao.close();
}
}
li Método para preparar os dados para retornar à atividade principal public void 
alterarlnserir(View v) {
String nome; double al, a2, a3;
li Pega os dados preenchidos na tela,
li para inclusão ou alteração nome = edl.getText().toString();
al = Double.parseDoub/e(ed2.getText().toString());
a2 = Double.parseDoub/e(ed3.getText().toString());
a3 = Double.parseDoub/e(ed4.getText().toString());
li Cria o objeto de acesso ao banco Disciplina_DAO dao = new Disciplina_DAO(this); li Abre o 
banco
dao.open();
// Determina a ação
if (acao == -1) { li Ação de inserção
li Realiza a inclusão da disciplina na tabela dao.inserir(nome, al, a2, a3);
}
else{ li Ação de alteração
li Realiza a alteração do registro correspondente na tabela dao.alterar(id, nome, al, a2, a3);
}
li Libera o recurso de acesso ao banco
dao.close();
li Encerra a atividade, retornando à atividade principal finish();
}
li Método para a exclusão de um registro de acordo com o id da disciplina public void 
excluir(View 
v) {
li Confere se é uma ação de alteração ou exclusão if (acao == O) {
li Cria o objeto de acesso ao banco Disciplina_DAO dao = new Disciplina_DAO(this);
// Abre o banco dao.open();
// Realiza a exclusão do registro por meio do id dao.apagar(id);
// Libera o recurso de acesso ao banco dao.close();
}
// Encerra a atividade, retornando à atividade principal finish();
}
public void voltar(View v) {
// Encerra a atividade, retornando à atividade principal finish();
}
}
Screenshots da aplicação
Tela principal {MainActivity)
INSERIR DISIPLINA SAIR DO APLICATIVO
Tela de inserir disciplina (Activity TratarDisciplina)
Alterar ou Excluir Disciplina
Nome da o,sc,pllna:
Sistemas da informação
Notas:
A1
10.0
A2.
AJ. 10.0
9:43 0 ., '9'
61·.
Inserir Disciplina
Nome da Disciplina:
Estatística
Notas
Al:
8
5
A3.
FHIHII
Ffüfüi
Eiiii%1
liih·ifül
E·iiifai
EMCLUIR
Tela de listagem das disciplinas
9:44 0 ,,/ <i§" 6h
Banco de Dados com SQLite!
Gerenciamento de Disciplinas.
Estatística
A 1: 8.0 A2: 5.0 A3: 7.0
Sistemas da informação A1: 10.0 A2: 10.0 A3: 10.0
INSERIR DISIPLINA SAIR DO APLICATIVO
Tela de vizualização da disciplina (e exclusão)
9:44 0 ,,/ 6h
Alterar ou Excluir Disciplina
Nome da Disciplina:
Sistemas da informação
Notas:
A¹ 10.0
A2'10.0A3: 10.0NUHih&E'HHIIEiii'fü&4. BIBLIOGRAFIA• https://developer.android.com/training/data-storage/sqlite?hl=pt-br• https://www.youtube.com/watch?v=h DSVInZ2JCs• https://www.devmedia.eom.br/criando-um-crud-com-android-studio-e-sglite/32815• https://www.luiztools.eom.br/post/7-dicas-valiosas-de-uso-do-sqlite-no-android/
Código da activity_main.xml 
<?xml version="l.0" encoding="utf-8"?> 
<androidx.constraintlayout.widget.Constraintlayout 
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" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=". MainActivity" > 
<ListView 
android:id="@+id/lista" 
android:layout_width="312dp" 
android:layout_height="388dp" 
android:layout_margin5tart="8dp" 
android:layout_marginleft="8dp" 
android:layout_marginTop="36dp" 
android:layout_marginEnd="8dp" 
android:layout_marginRight="Bdp" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_constraintStart_toStartOf="parent" 
app:layout_constraintTop_toTopOf="parent"></ListView> 
<Button 
android:id="@+id/btSair" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_margin5tart="8dp" 
android:layout_marginleft="8dp" 
android:layout_marginTop="20dp" 
android:layout_marginEnd="8dp" 
android:layout_marginRight="8dp" 
android:onClick="sair" 
android:text="Sair do Aplicativo" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_constraintStart_toEndOf="@+id/btlncluir" 
app:layout_constraintTop_toBottomOf="@+id/lista" /> 
<TextView 
android:id="@+id/textView" 
android:layout_width="wrap_content" 
a nd roid: layout_ heig ht= "wrap _ content" 
android:layout_margin5tart="8dp" 
android:layout_marginleft="8dp" 
android:layout_marginTop="Bdp" 
android:layout_marginEnd="8dp" 
android:layout_marginRight="8dp" 
android:layout_marginBottom="8dp" 
android:text="Gerenciamento de Disciplinas." 
app:layout_constraintBottom_toTopOf="@+id/lista" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_constraintStart_toStartOf="parent" 
app:layout_constraintTop_toTopOf="parent" 
app:layout_constraintVertical_bias="0.457" /> 
<Button 
android:id="@+id/btlncluir" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_margin5tart="8dp" 
android:layout_marginleft="8dp" 
android:layout_marginTop="20dp" 
android:layout_marginEnd="8dp" 
android:layout_marginRight="8dp" 
android:onClick="incluirDisciplina" 
android:text="lnserir Disiplina" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_constraintHorizontal_bias="0.078" 
app:layout_constraintStart_toStartOf="parent" 
app:layout_constraintTop_toBottomOf="@+id/lista" /> 
</a nd roidx.constra i ntlayout. widget. Constra i ntlayout> 
Código da actvity_tratar_disciplina.xml 
<?xml version="l.0"encoding="utf-8"?> 
<androidx.constraintlayout.widget.Constraintlayout 
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" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=" .TratarDisciplina" > 
<Button 
android:id="@+id/button" 
android:layout_width="wrap_content" 
a nd roid: layout_ heig ht= "wrap _ content" 
android:layout_margin5tart="49dp" 
android:layout_marginleft="49dp" 
android:layout_marginTop="552dp" 
android:layout_marginEnd="274dp" 
android:layout_marginRight="274dp" 
android:layout_marginBottom="l31dp" 
android:onClick="alterarlnserir" 
android:text="Alterar" 
app:layout_constraintBottom_toBottomOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_constraintStart_toStartOf="parent" 
app:layout_constraintTop_toTopOf="parent" /> 
<EditText 
android:id="@+id/editText4" 
android:layout_width="91dp" 
android:layout_height="41dp" 
android:layout_margin5tart="8dp" 
android:layout_marginleft="8dp" 
android:layout_marginTop="Bdp" 
android:layout_marginEnd="8dp" 
android:layout_marginRight="8dp" 
android:layout_marginBottom="8dp" 
android:ems="lO" 
android:inputType="numberDecimal" 
app:layout_constraintBottom_toBottomOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_ constraintHorizontal_bias ="0.093" 
app:layout_constraintStart_toEndOf="@id/textView7" 
app:layout_constraintTop_toBottomOf="@id/editText3" 
app:layout_constraintVertical_bias="0.103" /> 
<EditText 
android:id="@+id/editText3" 
android:layout_width="91dp" 
android:layout_height="41dp" 
android:layout_margin5tart="8dp" 
android:layout_marginleft="8dp" 
android:layout_marginTop="Bdp" 
android:layout_marginEnd="8dp" 
android:layout_marginRight="8dp" 
android:layout_marginBottom="8dp" 
android:ems="l0" 
android:inputType="numberDecimal" 
app:layout_constraintBottom_toBottomOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_ constraintHorizontal_ bias ="0.093" 
app:layout_constraint5tart_toEndOf="@+id/textView6" 
app:layout_constraintTop_toBottomOf="@+id/editText2" 
app:layout_constraintVertical_bias="0.069" /> 
<TextView 
android:id="@+id/textView7" 
android:layout_width="52dp" 
android:layout_height="42dp" 
android:layout_margin5tart="8dp" 
android:layout_marginleft="Bdp" 
android:layout_marginTop="8dp" 
android:text="A3:" 
app:layout_constraintBottom_toBottomOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_constraintHorizontal_bias="0.088" 
app:layout_constraintStart_toStartOf="parent" 
app:layout_constraintTop_toBottomOf="@+id/textView6" 
app:layout_constraintVertical_bias="0.096" /> 
<TextView 
android:id="@+id/textView6" 
android:layout_width="52dp" 
android:layout_height="42dp" 
android:layout_margin5tart="8dp" 
android:layout_marginleft="8dp" 
android:layout_marginTop="Bdp" 
android:text="A2:" 
app:layout_constraintBottom_toBottomOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_constraintHorizontal_bias="0.088" 
app:layout_constraintStart_toStartOf="parent" 
app:layout_constraintTop_toBottomOf="@id/textView5" 
app:layout_constraintVertical_bias="0.064" /> 
<TextView 
android:id="@+id/textView3" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_margin5tart="28dp" 
android:layout_marginleft="28dp" 
android:layout_marginTop="127dp" 
android:layout_marginEnd="258dp" 
android:layout_marginRight="258dp" 
android:layout_marginBottom="585dp" 
android:text="Nome da Disciplina:" 
app:layout_constraintBottom_toBottomOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_constraintStart_toStartOf="parent" /> 
<EditText 
android:id="@+id/editText" 
android:layout_width="356dp" 
android:layout_height="48dp" 
android:layout_margin5tart="8dp" 
android:layout_marginleft="8dp" 
android:layout_marginTop="l 72dp" 
android:layout_marginEnd="8dp" 
android:layout_marginRight="8dp" 
android:layout_marginBottom="Slldp" 
android:ems="l0" 
android:inputType="textPersonName" 
app:layout_constraintBottom_toBottomOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_constraintStart_toStartOf="parent" 
app:layout_constraintTop_toTopOf="parent" /> 
<TextView 
android:id="@+id/textView4" 
android:layout_width="89dp" 
android:layout_height="31dp" 
android:layout_marginTop="20dp" 
android:text="Notas:" 
app:layout_constraintTop_toBottomOf="@+id/editText" 
tools:layout_editor_absoluteX="30dp" 
tools:ignore="MissingConstraints" /> 
<TextView 
android:id="@+id/textView5" 
android:layout_width="52dp" 
android:layout_height="42dp" 
android:layout_margin5tart="8dp" 
android:layout_marginleft="8dp" 
android:layout_marginTop="8dp" 
android:text="Al:" 
app:layout_constraintBottom_toBottomOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_constraintHorizontal_bias="0.088" 
app:layout_constraintStart_toStartOf="parent" 
app:layout_constraintTop_toBottomOf="@+id/textView4" 
app:layout_constraintVertical_bias="0.057" /> 
<EditText 
android:id="@+id/editText2" 
android:layout_width="91dp" 
android:layout_height="41dp" 
android:layout_margin5tart="8dp" 
android:layout_marginleft="8dp" 
android:layout_marginEnd="8dp" 
android:layout_marginRight="8dp" 
android:layout_marginBottom="8dp" 
android:ems="l0" 
android:inputType="numberDecimal" 
app:layout_constraintBottom_toBottomOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_ constraintHorizontal_ bias ="0.093" 
app:layout_constraintStart_toEndOf="@+id/textView5" 
app:layout_constraintTop_toBottomOf="@+id/textView4" 
app:layout_constraintVertical_bias="0.081" /> 
<Button 
android:id="@+id/button2" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_margin5tart="284dp" 
android:layout_marginleft="284dp" 
android:layout_marginTop="552dp" 
android:layout_marginEnd="39dp" 
android:layout_marginRight="39dp" 
android:layout_marginBottom="l31dp" 
android:onClick="excluir" 
android:text="Excluir" 
app:layout_constraintBottom_toBottomOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_constraintStart_toStartOf="parent" 
app:layout_constraintTop_toTopOf="parent" /> 
<Button 
android:id="@+id/button3" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_margin5tart="153dp" 
android:layout_marginleft="153dp" 
android:layout_marginTop="593dp" 
android:layout_marginEnd="l 70dp" 
android: layout_ marginRight=" 170dp" 
android:layout_marginBottom="90dp" 
android:onClick="voltar" 
android:text="Voltar" 
app:layout_constraintBottom_toBottomOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 
app:layout_constraintStart_toStartOf="parent" 
app:layout_constraintTop_toTopOf="parent" /> 
</a nd roidx.constra i ntlayout. widget. Constra i ntlayout> 
Código do objeto Disciplina 
package com.example.disciplina; 
public class Disciplina { 
// Definição dos atributos 
li O atributo id não existia na versão anterior 
private long id; 
private String nome; 
private double al, a2, a3; 
// Métodos novos, de acesso do atributo id 
public long getld() { 
return id; 
} 
public void setld(long id) { 
this.id = id; 
} 
// Métodos de acesso (setters & getters) 
public String getNome() { 
return nome; 
} 
public void setNome(String nome) { 
if (!nome.isEmpty()) { 
} 
} 
this.nome = nome; 
public double getAl() { 
return al; 
} 
public void setAl(double al) { 
if (al >= O) { 
this.al = al; 
} 
} 
public double getA2() { 
return a2; 
} 
public void setA2(double a2) { 
if (a2 >= O) { 
this.a2 = a2; 
} 
} 
public double getA3() { 
return a3; 
} 
public void setA3(double a3) { 
if (a3 >= O) { 
} 
} 
this.a3 = a3; 
// Método construtor com definição dos valores-padrão 
public Disciplina() { 
nome= "Nome Disciplina"; 
al = O.O; 
a2 = O.O; 
a3 = O.O; 
} 
} 
// Método de formatação dos dados para exibição na listapublic String textolista() { 
} 
String item; 
item = getNome(); 
item += 11\nAl: 11 + String.format{ 11%3.lf11 , getAl()); 
item+= 11\tA2: 11 + String.format{ 11%3.lf 11 , getA2()); 
item+= 11\tA3: 11 + String.format("%3.lf", getA3()); 
return item; 
Código do disciplina_dao(onde as definições de acesso ao banco de dados ficam) 
package com.example.disciplina; 
import java.util.Arraylist ; 
import java.util.List ; 
import android.content.ContentValues ; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException ; 
import android.database.sqlite . SQLiteDatabase ; 
// Camada de dados (Persistência) 
// Classe de definição para os acessos ao banco de dados 
public class Disciplina_DAO { 
// Define um objeto banco de dados 
private SQLiteDatabase database; 
// Define as colunas da tabela 
private String [] columns = { DisciplinaSQLiteOpenHelper.COLUNA_/0 
DisciplinaSQLiteOpenHelper.COLUNA_NOME 
DisciplinaSQLite0penHelper.COLUNA_A1 
DisciplinaSQLiteOpenHelper.COLUNA_A2, 
DisciplinaSQLite0penHelper.COLUNA_A3 }; 
private DisciplinaSQLiteOpenHelper sqliteOpenHelper; 
// Método construtor 
public Disciplina_DAO(Context context) { 
sqliteOpenHelper = new DisciplinaSQLiteOpenHelper(context); 
} 
// Método para abrir o recurso de banco de dados 
public void open O throws SQLException { 
database = sqliteOpenHelper.getWritableDatabase(); 
} 
// Método para fechar o recurso de banco de dados 
public void close() { 
sqliteOpenHelper.close (); 
} 
// Método de inclusão de registro 
public void inserir ( String nome, double al, double a2, double a3 
) { 
// Prepara os valores das colunas da tabela para a inserção 
ContentValues values = new ContentValues (); 
values.put ( DisciplinaSQLiteOpenHelper.COLUNA_NOME, nome ); 
values.put ( DisciplinaSQLite0penHelper.COLUNA_A1 , String. 
va/ueOf(al) ); 
values.put ( DisciplinaSQLite0penHelper.COLUNA_A2, String. 
va/ue0f(a2) ); 
values.put ( DisciplinaSQLiteOpenHelper.COLUNA_A3, String. 
va/ue0f(a3) ); 
// Efetua a inclusão com retorno do id do registro 
long insertld = database.insert ( DisciplinaSQLiteOpenHelper. TABELA , 
null , values ); 
} 
// Método para atualização de um registro da tabela 
// Recebe os dados para a inserção 
public void alterar(long id, String nome, double al, double a2, 
double a3){ 
li Prepara os dados para a atualização 
ContentValues values = new ContentValues (); 
values.put ( DisciplinaSQLiteOpenHelper.COLUNA_NOME, nome ); 
values.put ( DisciplinaSQLiteOpenHelper.COLUNA_Al , String. 
va/ueOf(al) ); 
values.put ( DisciplinaSQLiteOpenHelper.COLUNA_A2, String. 
va/ue0f(a2) ); 
values.put ( DisciplinaSQLite0penHelper.COLUNA_A3, String. 
va/ue0f(a3) ); 
// Efetua a alteração do registro, de acordo com o id do registro 
database.update(DisciplinaSQLiteOpenHelper. TABELA, values, 
DisciplinaSQLiteOpenHelper.COLUNA_/0 + 11= 11 + id, null); 
} 
// Método para a exclusão de um registro 
li Recebe o id do registro que será excluído 
public void apagar ( long id ) { 
li Exclui o registro a partir do id 
database.delete ( DisciplinaSQLiteOpenHelper. TABELA , 
DisciplinaSQLiteOpenHelper.COLUNA_/0 
+ 11 = 11 + id , null );
} 
// Método de busca de registro a partir do id 
li Busca os dados de cada registro a partir do id 
li Retorna um objeto Disciplina com os dados do registro 
public Disciplina buscar ( long id ) { 
} 
li Realiza a busca a partir do id do registro 
li Usado para buscar os dados para a montagem da tela e 
li para a alteração ou exclusão do registro 
li O objeto cursor armazena os registros da consulta 
li Como o filtro é o id, apenas um registro será selecionado 
Cursor cursor= database.query( DisciplinaSQLiteOpenHelper.TABELA, 
columns , DisciplinaSQLiteOpenHelper.COLUNA_/0 + 11 = 11 + id, 
null , null , null , null ); 
cursor . moveToFirst (); 
li Cria um objeto Disciplina auxiliar para retornar o objeto 
Disciplina disciplina = new Disciplina (); 
li Preenche os dados do registro do banco 
li nas propriedades do objeto auxiliar 
disciplina.setld ( cursor.getlong (O));
disciplina.setNome ( cursor.getString (1) ); 
disciplina.setAl ( cursor.getDouble (2) ); 
disciplina.setA2 ( cursor.getDouble (3) ); 
disciplina.setA3 ( cursor.getDouble (4) ); 
li Fecha o recurso do cursor 
cursor.close(); 
li Retorna o objeto auxiliar do tipo Disciplina 
return disciplina ; 
li Método de montagem da lista de registros das disciplinas 
li Monta a lista de disciplinas para a carga da lista na tela principal 
} 
li O método retornará uma lista com todas as disciplinas armazenadas 
li no banco 
public List <Disciplina > getAII O { 
} 
// Prepara um Arraylist para retorno dos registros armazenados no banco 
List <Disciplina > disciplinas = new Arraylist <Disciplina>() ; 
li Objeto cursor para armazenar temporariamente os dados 
li retornados pela consulta 
Cursor cursor= database . query ( DisciplinaSQLiteOpenHelper. 
TABELA , columns , null , null , null , null , null ); 
// Passa o ponteiro para o primeiro registro do cursor 
cursor. moveToFirst (); 
li Para cada registro, os dados da tabela são copiados para 
li o objeto Disciplina da lista 
while (!cursor.isAfterLast ()) { 
} 
Disciplina disciplina = new Disciplina (); 
disciplina.setld ( cursor. getlong (O)); 
disciplina.setNome ( cursor . getString ( 1) ); 
disciplina.setAl ( cursor.getDouble (2) ); 
disciplina.setA2 ( cursor.getDouble (3) ); 
disciplina.setA3 ( cursor.getDouble (4) ); 
disciplinas.add ( disciplina ); 
cursor. moveToNext (); 
// Fecha o cursor 
cursor. close (); 
// Retorna à lista de disciplinas 
return disciplinas; 
Código do SQLiteOpenHelper (para definição da tabela e atributos) 
package com.example.disciplina; 
import android.content.Context ; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
public class DisciplinaSQLiteOpenHelper extends SQLiteOpenHelper { 
// Definição da tabela e dos atributos 
} 
li Os espaços antes e depois dos nomes são importantes, 
li pois será criada uma QUERY (consulta) com esses identificadores 
public static final String TABELA = "Disciplina "; 
public static final String COLUNA_ID = "id" ; 
public static final String COLUNA_NOME = "nome"; 
public static final String COLUNA_Al = "al"; 
public static final String COLUNA_A2 = "a2"; 
public static final String COLUNA_A3 = "a3"; 
li Define o nome do banco de dados 
private static final String DATABASE_NAME = "disciplinas.db"; 
li Define a versão do banco 
li O valor deve ser incrementado somente em casos de alterações 
li na estrutura do banco (tabelas e atributos) 
private static final int DATABASE VERS/ON = 1; 
li String de criação da tabela no banco de dados 
private static final String CRIAR_BANCO = "create table " 
+ TABELA + "("
+ COLUNA_ID + " integer primary key autoincrement , "
+ COLUNA_NOME + " text not null , "
+ COLUNA_Al + " double not null , "
+ COLUNA_A2 + " double not null , "
+ COLUNA_A3 + " double not null ) ;";
li Método construtor da classe para criação ou atualização do banco 
public DisciplinaSQLiteOpenHelper(Context context) { 
super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 
li Cria o banco de dados, caso não exista 
@Override 
public void onCreate ( SQLiteDatabase database ) { 
database . execSQL ( CRIAR_BANCO ); 
} 
li Atualiza o banco de dados, caso seja uma nova versão 
@Override 
public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) { 
db. execSQL ("DROP TABLE IF EXISTS " +TABELA ); 
onCreate (db); 
} 
Código do Controller da MainActivity 
package com.example.disciplina; 
import androidx.appcompat.app.AppCompatActivity; 
import android.os.Bundle; 
import android.content.lntent; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import java.util.lterator; 
import java.util.List; 
public class MainActivity extends AppCompatActivity implements 
AdapterView.OnltemClicklistener{ 
// Componentelista da view 
ListView lista; 
// Declaração da intent 
lntent intent; 
li Determina o código da intent 
public static final int ACTIVITY REQUEST DISCIPLINA = 1; 
- -
li Declara o objeto de persistência (acesso ao banco) 
private Disciplina_DAO dao ; 
li Vetor com os dados das disciplinas para apresentar na lista 
private String[] disciplinas; 
li Vetor com o id dos registros para identificar o registro 
li para os casos de seleção na lista para alteração ou 
li exclusão 
private long[] idDisiciplinas; 
@Override 
protected void onCreate(Bundle savedlnstanceState) { 
super.onCreate(savedlnstanceState); 
setContentView(R.layout.activity _main); 
} 
lista = (ListView) findViewByld(R.id.lista); 
li Altera o título da janela da atividade 
setTitle("Banco de Dados com SQLite!"); 
li Cria o objeto de acesso ao banco 
dao = new Disciplina_DAO(this); 
li Abre o banco 
dao.open(); 
li Determina que os itens da lista serão clicáveis e 
li prepara o método de controle: onltemClick( .. ) 
lista.setOnltemClicklistener(this); li Clique no item 
li Sempre que a atividade passar pelo método onResume, a lista 
li será atualizada 
@Override 
protected void onResume O { 
dao.open (); 
super.onResume (); 
li Prepara a lista que será exibida ao usuário na tela 
} 
li Busca no banco todos os registros 
List<Disciplina > listaDisciplinas = dao.getAII(); 
li Define o tamanho dos vetores de disciplinas e id 
li em função do tamanho (quantidade de registros) da tabela 
disciplinas = new String[listaDisciplinas.size()]; 
idDisiciplinas = new long[listaDisciplinas.size()]; 
li Primeiro índice dos vetores 
int i =0; 
// Cria um objeto iterator para preencher o vetor de disciplinas 
li com os dados dos registros 
lterator<Disciplina> iterator = listaDisciplinas.iterator(); 
li Para cada registro preencher os vetores 
while (iterator.hasNext()) { 
} 
li Objeto disciplina auxiliar 
Disciplina aux = new Disciplina(); 
li Recebe no objeto auxiliar os dados de cada registro 
aux = (Disciplina) iterator.next(); 
li Preenche o vetor de disciplinas para visualização na lista 
disciplinas[i] = aux.textolista(); 
li Preenche o vetor de id para identificação do registro 
li ao se escolher um elemento da lista para 
li a alteração ou exclusão 
idDisiciplinas[i] = aux.getld(); 
li Próximo item dos vetores 
i++; 
// Carrega o ArrayAdapter com os dados do vetor de disciplinas 
ArrayAdapter <String > adapter = new ArrayAdapter<String >( 
this , 
android.R.layout.simple_list_item_l , disciplinas ); 
li Preenche a lista com os dados do ArrayAdapter 
lista.setAdapter( adapter ); 
li Fecha o recurso de acesso ao banco sempre que a atividade passar 
li por uma pausa 
@Override 
protected void onPause O { 
} 
li Libera o recurso de acesso ao banco 
dao.close(); 
super.onPause (); 
li Método para seleção de um item da lista para 
li alteração ou exclusão (atende à interface: AdapterView.OnltemClicklistener) 
public void onltemClick(AdapterView<?> parent, View view, int position, long ident) { 
li Position é a posição do item na lista 
li Armazena o índice do elemento escolhido na lista 
long id = idDisiciplinas[position]; 
li Preparação da intent com previsão de retorno de dados 
intent = new lntent(getApplicationContext(), TratarDisciplina. 
class); 
} 
} 
// Passa os dados do item escolhido para a atividade de tratamento 
intent.putExtra("acao", O); 
intent.putExtra("id", id); 
// Chama a atividade 
startActivity(intent); 
// Método de controle para chamada da atividade secundária para inclusão 
public void incluirDisciplina(View v){ 
} 
// lntent para chamar a atividade secundária 
intent = new lntent(getApplicationContext(), TratarDisciplina. 
class); 
// Passa os dados do item escolhido para a atividade de tratamento 
intent.putExtra("acao", -1); 
intent.putExtra("id", OL); 
// Chama a atividade 
startActivity(intent); 
// Método para encerrar o aplicativo 
public void sair(View v){ 
finish(); 
} 
Código do Controller TratarDisciplina 
package com.example.disciplina; 
import androidx.appcompat.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
public class TratarDisciplina extends AppCompatActivity { 
// Declaração dos componentes de tela 
EditText edl, ed2, ed3, ed4; 
Button btl, bt2; 
li Atributos de informações de acao: O : alteração ou exclusão 
li -1 : inclusão 
private int acao; 
li ld do registro para alteração ou exclusão 
li será usado com o método buscar para trazer os dados do registro 
private long id; 
@Override 
protected void onCreate(Bundle savedlnstanceState) { 
super.onCreate(savedlnstanceState); 
setContentView(R.layout.activity_tratar_disciplina); 
btl = (Button) findViewByld(R.id.button); 
bt2 = (Button) findViewByld(R.id.button2); 
edl = (EditText) findViewByld(R.id.editText); 
ed2 = (EditText) findViewByld(R.id.editText2); 
ed3 = (EditText) findViewByld(R.id.editText3); 
ed4 = (EditText) findViewByld(R.id.editText4); 
// Recebe os dados da atividade principal 
li e preenche a tela (view) 
acao = getlntent().getExtras().getlnt("acao"); 
id = getlntent().getExtras().getlong("id"); 
// Altera o título e prepara a tela 
if (acao == -1) { 
li Tela de inclusão 
li Usa dados-padrão 
setTitle("lnserir Disciplina"); 
btl.setText("lncluir"); 
bt2 .setEnabled(false); 
edl.setText("Nome Disciplina"); 
ed2.setText(String.format("%.lf", O.O)); 
ed3.setText(String.format("%.lf", O.O)); 
ed4.setText(String.format("%.lf", O.O)); 
} else { 
li Tela de alteração ou exclusão 
setTitle("Alterar ou Excluir Disciplina"); 
li Cria um objeto Disciplina auxiliar para armazenar 
li os dados do registro 
Disciplina aux = new Disciplina(); 
// Cria o objeto de acesso ao banco 
Disciplina_DAO dao = new Disciplina_DAO(this); 
// Abre o banco 
dao.open(); 
li Faz a consulta pelo id do registro para 
// buscar os dados na tabela 
aux = dao.buscar(id); 
// Preenche os dados do registro na tela 
edl.setText(aux.getNome()); 
ed2 .setText(String. format("o/o. lf", aux.getAl())); 
ed3.setText(String. format("o/o. lf", aux.getA2())); 
ed4.setText(String. format("o/o. lf", aux.getA3())); 
// Libera o recurso de acesso ao banco de dados 
dao.close(); 
} 
} 
li Método para preparar os dados para retornar à atividade principal 
public void alterarlnserir(View v) { 
} 
String nome; 
double al, a2, a3; 
li Pega os dados preenchidos na tela, 
li para inclusão ou alteração 
nome = edl.getText().toString(); 
al = Double.parseDoub/e(ed2.getText().toString()); 
a2 = Double.parseDoub/e(ed3.getText().toString()); 
a3 = Double.parseDoub/e(ed4.getText().toString()); 
li Cria o objeto de acesso ao banco 
Disciplina_DAO dao = new Disciplina_DAO(this); 
li Abre o banco 
dao.open(); 
// Determina a ação 
if (acao == -1) { li Ação de inserção 
} 
li Realiza a inclusão da disciplina na tabela 
dao.inserir(nome, al, a2, a3); 
else{ li Ação de alteração 
} 
li Realiza a alteração do registro correspondente na tabela 
dao.alterar(id, nome, al, a2, a3); 
li Libera o recurso de acesso ao banco 
dao.close(); 
li Encerra a atividade, retornando à atividade principal 
finish(); 
li Método para a exclusão de um registro de acordo com o id da disciplina 
public void excluir(View v) { 
li Confere se é uma ação de alteração ou exclusão 
if (acao == O) { 
li Cria o objeto de acesso ao banco 
Disciplina_DAO dao = new Disciplina_DAO(this); 
} 
} 
} 
// Abre o banco 
dao.open(); 
// Realiza a exclusão do registro por meio do id 
dao.apagar(id); 
// Libera o recurso de acesso ao banco 
dao.close(); 
// Encerra a atividade, retornando à atividade principal 
finish(); 
public void voltar(View v) { 
} 
// Encerra a atividade, retornando à atividade principal 
finish(); 
Screenshots da aplicação 
Tela principal {MainActivity) 
INSERIR DISIPLINA SAIR DO APLICATIVO 
Tela de inserir disciplina (Activity TratarDisciplina) 
9440 �/��61-. 
Alterar ou Excluir Disciplina 
Nome da o,sc,pllna: 
Sistemas da informaçãoNotas: 
A1 
10.0 
A2. 
AJ. 
10.0 
FHIHII Eiiii%1 
Ffüfüi 
9:43 0 ., '9' �61·. 
Inserir Disciplina 
Nome da Disciplina: 
Estatística 
Notas 
Al: 
8 
5 
A3. 
liih·ifül EMCLUIR 
E·iiifai 
Tela de listagem das disciplinas 
9:44 0 ,,/ <i§" �6h 
Banco de Dados com SQLite! 
Gerenciamento de Disciplinas. 
Estatística 
A 1: 8.0 A2: 5.0 A3: 7.0 
Sistemas da informação 
A1: 10.0 A2: 10.0 A3: 10.0 
INSERIR DISIPLINA SAIR DO APLICATIVO 
Tela de vizualização da disciplina (e exclusão) 
9:44 0 ,,/ � �6h 
Alterar ou Excluir Disciplina 
Nome da Disciplina: 
Sistemas da informação 
Notas: 
A1 
10.0 
A2' 
10.0 
A3: 
10.0 
NUHih& Eiii'fü& 
E'HHII 
4. BIBLIOGRAFIA
	DM1-10
	DM11-20
	DM21-28

Continue navegando