Para ver mais detalhes sobre a persistência em banco de dados:
GOOGLE DEVELOPERS. Salvar dados usando o SQLite. Disponível em: https://developer.android.com/training/data-storage/sqlite?hl=pt-br. Acesso em: 17 ago. 2025.
Exemplos práticos:
Versão 1:
-
Pessoa.java
import android.os.Parcel; import android.os.Parcelable; import androidx.annotation.NonNull; public class Pessoa implements Parcelable { private int id; private String nome, telefone; public Pessoa(int id, String nome, String telefone) { this.id = id; this.nome = nome; this.telefone = telefone; } public Pessoa() { } protected Pessoa(Parcel in) { id = in.readInt(); nome = in.readString(); telefone = in.readString(); } public static final Creator<Pessoa> CREATOR = new Creator<Pessoa>() { @Override public Pessoa createFromParcel(Parcel in) { return new Pessoa(in); } @Override public Pessoa[] newArray(int size) { return new Pessoa[size]; } }; 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 String getTelefone() { return telefone; } public void setTelefone(String telefone) { this.telefone = telefone; } @Override public String toString() { return nome + " - " + telefone; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeInt(id); dest.writeString(nome); dest.writeString(telefone); } }//class
-
DBHelper.java
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import androidx.annotation.Nullable; public class DBHelper extends SQLiteOpenHelper { public static final int BANCO_VERSAO = 1; public static final String BANCO_NOME = "banco.db"; public static final String BANCO_TABELA = "Contato"; public static final String ID = "_id"; public static final String NOME = "nome"; public static final String TELEFONE = "telefone"; private static final String CRIA_TABELA = "CREATE TABLE " + BANCO_TABELA + "(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NOME + " TEXT, " + TELEFONE + " TEXT" + ")"; private static final String DELETA_TABELA = "DROP TABLE IF EXISTS " + BANCO_TABELA; public DBHelper(@Nullable Context context) { super(context, BANCO_NOME, null, BANCO_VERSAO); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL(CRIA_TABELA); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { sqLiteDatabase.execSQL(DELETA_TABELA); onCreate(sqLiteDatabase); } }//class
-
DatabaseManager.java
import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import java.util.ArrayList; public class DatabaseManager { private DBHelper dbHelper; private SQLiteDatabase database; public DatabaseManager(Context context) { dbHelper = new DBHelper(context); } public void open() { database = dbHelper.getWritableDatabase(); } public void close() { dbHelper.close(); } public long adicionar(Pessoa p){ ContentValues values = new ContentValues(); values.put(DBHelper.NOME, p.getNome()); values.put(DBHelper.TELEFONE, p.getTelefone()); return database.insert(DBHelper.BANCO_TABELA, null, values); } public ArrayList<Pessoa> listar(){ ArrayList<Pessoa> dados = new ArrayList<>(); String consulta = "SELECT * FROM " + DBHelper.BANCO_TABELA; Cursor cursor = database.rawQuery(consulta, null); while(cursor.moveToNext()){ Pessoa p = new Pessoa(); p.setId(cursor.getInt(0)); p.setNome(cursor.getString(1)); p.setTelefone(cursor.getString(2)); dados.add(p); } cursor.close(); return dados; } public int atualizar(Pessoa p){ ContentValues values = new ContentValues(); values.put(DBHelper.NOME, p.getNome()); values.put(DBHelper.TELEFONE, p.getTelefone()); String where = DBHelper.ID + "=?"; String[] args = {String.valueOf(p.getId())}; return database.update(DBHelper.BANCO_TABELA, values, where, args); } public int excluir(Pessoa p){ String where = DBHelper.ID + "=?"; String[] args = {String.valueOf(p.getId())}; return database.delete(DBHelper.BANCO_TABELA, where, args); } }//class
-
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp" tools:context=".MainActivity"> <EditText android:id="@+id/editTextNome" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Digite seu nome" /> <EditText android:id="@+id/editTextTelefone" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Digite seu telefone" android:inputType="phone" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="16dp"> <Button android:id="@+id/buttonS" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="SAVE" android:onClick="clicar" /> <Button android:id="@+id/buttonL" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="LIST" android:onClick="clicar" /> <Button android:id="@+id/buttonD" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="DELETE" android:onClick="clicar" /> </LinearLayout> </LinearLayout>
-
MainActivity.java
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private EditText editTextNome, editTextTelefone; private Button buttonS, buttonD, buttonL; private Pessoa p; private DatabaseManager databaseManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editTextNome = findViewById(R.id.editTextNome); editTextTelefone = findViewById(R.id.editTextTelefone); buttonS = findViewById(R.id.buttonS); buttonL = findViewById(R.id.buttonL); buttonD = findViewById(R.id.buttonD); databaseManager = new DatabaseManager(this); databaseManager.open(); p = getIntent().getParcelableExtra("dado"); if(p != null){ editTextNome.setText(p.getNome()); editTextTelefone.setText(p.getTelefone()); } } public void clicar(View view) { if (view.getId() == R.id.buttonS ) { if (p == null) { p = new Pessoa(); p.setNome(editTextNome.getText().toString()); p.setTelefone(editTextTelefone.getText().toString()); long retorno = databaseManager.adicionar(p); if (retorno != -1) { Toast.makeText(MainActivity.this, "Salvo", Toast.LENGTH_SHORT).show(); p = null; editTextNome.setText(""); editTextTelefone.setText(""); } else { Toast.makeText(MainActivity.this, "Erro ao salvar", Toast.LENGTH_SHORT).show(); } } else { p.setNome(editTextNome.getText().toString()); p.setTelefone(editTextTelefone.getText().toString()); int retorno = databaseManager.atualizar(p); if (retorno != 0) { Toast.makeText(MainActivity.this, "Atualizado", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "Erro ao atualizar", Toast.LENGTH_SHORT).show(); } } } if (view.getId() == R.id.buttonL ) { ArrayList<Pessoa> dados = databaseManager.listar(); Log.i("dados", dados.toString()); if (dados != null && !dados.isEmpty()) { Intent it = new Intent(MainActivity.this, SegundaActivity.class); it.putParcelableArrayListExtra("dados", dados); startActivity(it); } else { Toast.makeText(MainActivity.this, "Sem dados", Toast.LENGTH_SHORT).show(); } } if (view.getId() == R.id.buttonD) { if (p != null) { int retorno = databaseManager.excluir(p); if (retorno > 0) { Toast.makeText(MainActivity.this, "Dados deletados", Toast.LENGTH_SHORT).show(); editTextNome.setText(""); editTextTelefone.setText(""); p = null; } else { Toast.makeText(MainActivity.this, "Erro ao deletar", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(MainActivity.this, "Nenhum registro selecionado", Toast.LENGTH_SHORT).show(); } } } @Override protected void onDestroy() { super.onDestroy(); databaseManager.close(); } }//class
-
activity_segunda.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".SegundaActivity"> <ListView android:id="@+id/lista" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
-
SegundaActivity.java
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.ArrayList; public class SegundaActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { private ListView lista; private ArrayAdapter<Pessoa> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_segunda); lista = findViewById(R.id.lista); ArrayList<Pessoa> dados = getIntent().getParcelableArrayListExtra("dados"); Log.i("dados2", String.valueOf(dados)); if(dados != null && !dados.isEmpty()){ adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dados); lista.setAdapter(adapter); lista.setOnItemClickListener(this); } } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Pessoa p = (Pessoa) parent.getItemAtPosition(position); Intent it = new Intent(SegundaActivity.this, MainActivity.class); it.putExtra("dado", p); startActivity(it); finish(); } }//class
Versão 2:
-
User.java
public class User { private long id; private String name; private int age; public User(long id, String name, int age) { this.id = id; this.name = name; this.age = age; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
-
UserContract.java
import android.provider.BaseColumns; public class UserContract implements BaseColumns { public static final String TABLE_NAME = "user"; public static final String COLUMN_NAME = "name"; public static final String COLUMN_AGE = "age"; }
-
UserDAO.java
import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import java.util.ArrayList; import java.util.List; public class UserDAO { private SQLiteDatabase db; public UserDAO(SQLiteDatabase db) { this.db = db; } public long insertUser(String name, int age) { if (db != null) { ContentValues values = new ContentValues(); values.put(UserContract.COLUMN_NAME, name); values.put(UserContract.COLUMN_AGE, age); return db.insert(UserContract.TABLE_NAME, null, values); } return -1; } public List<User> getAll() { List<User> users = new ArrayList<>(); if (db != null) { String[] columns = { UserContract._ID, UserContract.COLUMN_NAME, UserContract.COLUMN_AGE }; Cursor cursor = db.query( UserContract.TABLE_NAME, columns, null, null, null, null, null ); while (cursor.moveToNext()) { long id_user = cursor.getLong(cursor.getColumnIndexOrThrow(UserContract._ID)); String name_user = cursor.getString(cursor.getColumnIndexOrThrow(UserContract.COLUMN_NAME)); int age_user = cursor.getInt(cursor.getColumnIndexOrThrow(UserContract.COLUMN_AGE)); users.add(new User(id_user, name_user, age_user)); } cursor.close(); } return users; } }
-
DBHelper.java
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "banco.db"; private static final int DATABASE_VERSION = 1; private static final String SQL_CREATE_TABLE = "CREATE TABLE " + UserContract.TABLE_NAME + " (" + UserContract._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + UserContract.COLUMN_NAME + " TEXT, " + UserContract.COLUMN_AGE + " INTEGER)"; public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(SQL_CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + UserContract.TABLE_NAME); onCreate(db); } }
-
DBManager.java
import android.content.Context; import android.database.sqlite.SQLiteDatabase; public class DBManager { private DBHelper dbHelper; private SQLiteDatabase database; public DBManager(Context context) { dbHelper = new DBHelper(context); } public void open() { database = dbHelper.getWritableDatabase(); } public void close() { dbHelper.close(); } public SQLiteDatabase getDatabase() { return database; } }
-
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/buttonInsert" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="clicar" android:text="Inserir" /> <Button android:id="@+id/buttonList" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="clicar" android:text="Listar" /> </LinearLayout> <TextView android:id="@+id/textViewResult" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:text="resultado" /> </LinearLayout>
-
MainActivity.java
import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.util.List; public class MainActivity extends AppCompatActivity { private UserDAO userDAO; private DBManager databaseManager; private Button buttonInsert, buttonList; private TextView textViewResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); databaseManager = new DBManager(this); databaseManager.open(); userDAO = new UserDAO(databaseManager.getDatabase()); buttonInsert = findViewById(R.id.buttonInsert); buttonList = findViewById(R.id.buttonList); textViewResult = findViewById(R.id.textViewResult); } public void clicar(View view) { if (view.getId() == R.id.buttonInsert) { long userId1 = userDAO.insertUser("Ana", 30); long userId2 = userDAO.insertUser("Rodrigo", 20); String result = "Inserted IDs: " + userId1 + " - " + userId2; textViewResult.setText(result); } if (view.getId() == R.id.buttonList) { List<User> dados = userDAO.getAll(); textViewResult.setText(dados.toString()); } } @Override protected void onDestroy() { super.onDestroy(); databaseManager.close(); } }
Versão 3 (2 entidades e multiplicidade 1:1):
-
DBHelper.java
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "escola.db"; private static final int DATABASE_VERSION = 1; public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL( "CREATE TABLE disciplina (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "nome TEXT UNIQUE)" ); db.execSQL( "CREATE TABLE aluno (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "nome TEXT UNIQUE, " + "disciplina_id INTEGER UNIQUE, " + "FOREIGN KEY(disciplina_id) REFERENCES disciplina(id) ON DELETE CASCADE)" ); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS aluno"); db.execSQL("DROP TABLE IF EXISTS disciplina"); onCreate(db); } }
-
DBManager.java
import android.content.Context; import android.database.sqlite.SQLiteDatabase; public class DBManager { private DBHelper dbHelper; private SQLiteDatabase database; public DBManager(Context context) { dbHelper = new DBHelper(context); } public void open() { database = dbHelper.getWritableDatabase(); database.setForeignKeyConstraintsEnabled(true); } public void close() { dbHelper.close(); } public SQLiteDatabase getDatabase() { return database; } }
-
Aluno.java
public class Aluno { private long id; private String nome; private long disciplinaId; public Aluno(long id, String nome, long disciplinaId) { this.id = id; this.nome = nome; this.disciplinaId = disciplinaId; } public long getId() { return id; } public String getNome() { return nome; } public long getDisciplinaId() { return disciplinaId; } @Override public String toString() { return "Aluno{" + "id=" + id + ", nome='" + nome + '\'' + ", disciplinaId=" + disciplinaId + '}'; } }
-
AlunoDAO.java
import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import java.util.ArrayList; import java.util.List; public class AlunoDAO { private SQLiteDatabase db; public AlunoDAO(SQLiteDatabase db) { this.db = db; } public long insert(String nome, long disciplinaId) { ContentValues values = new ContentValues(); values.put("nome", nome); values.put("disciplina_id", disciplinaId); return db.insert("aluno", null, values); } public List<Aluno> getAll() { List<Aluno> list = new ArrayList<>(); Cursor cursor = db.query("aluno", null, null, null, null, null, null); while (cursor.moveToNext()) { long id = cursor.getLong(cursor.getColumnIndexOrThrow("id")); String nome = cursor.getString(cursor.getColumnIndexOrThrow("nome")); long disciplinaId = cursor.getLong(cursor.getColumnIndexOrThrow("disciplina_id")); list.add(new Aluno(id, nome, disciplinaId)); } cursor.close(); return list; } }
-
Disciplina.java
public class Disciplina { private long id; private String nome; public Disciplina(long id, String nome) { this.id = id; this.nome = nome; } public long getId() { return id; } public String getNome() { return nome; } @Override public String toString() { return "Disciplina{" + "id=" + id + ", nome='" + nome + '\'' + '}'; } }
-
DisciplinaDAO.java
import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import java.util.ArrayList; import java.util.List; public class DisciplinaDAO { private SQLiteDatabase db; public DisciplinaDAO(SQLiteDatabase db) { this.db = db; } public long insert(String nome) { ContentValues values = new ContentValues(); values.put("nome", nome); return db.insert("disciplina", null, values); } public List<Disciplina> getAll() { List<Disciplina> list = new ArrayList<>(); Cursor cursor = db.query("disciplina", null, null, null, null, null, null); while (cursor.moveToNext()) { long id = cursor.getLong(cursor.getColumnIndexOrThrow("id")); String nome = cursor.getString(cursor.getColumnIndexOrThrow("nome")); list.add(new Disciplina(id, nome)); } cursor.close(); return list; } }
-
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/buttonInserir" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="clicar" android:text="Inserir" /> <Button android:id="@+id/buttonListar" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="clicar" android:text="Listar" /> </LinearLayout> <TextView android:id="@+id/textViewResult" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="resultado" /> </LinearLayout>
-
MainActivity.java
import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.util.List; public class MainActivity extends AppCompatActivity { private DBManager dbManager; private AlunoDAO alunoDAO; private DisciplinaDAO disciplinaDAO; private Button btnInsert, btnList; private TextView textViewResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbManager = new DBManager(this); dbManager.open(); alunoDAO = new AlunoDAO(dbManager.getDatabase()); disciplinaDAO = new DisciplinaDAO(dbManager.getDatabase()); btnInsert = findViewById(R.id.buttonInserir); btnList = findViewById(R.id.buttonListar); textViewResult = findViewById(R.id.textViewResult); } public void clicar(View view) { if (view.getId() == R.id.buttonInserir) { long mat1 = disciplinaDAO.insert("Matemática"); long hist1 = disciplinaDAO.insert("História"); long aluno1 = alunoDAO.insert("Ana", mat1); long aluno2 = alunoDAO.insert("João", hist1); long aluno3 = alunoDAO.insert("João", mat1); textViewResult.setText("Mat=" + mat1 + " Hist=" + hist1 + "\nAluno1=" + aluno1 + "\nAluno2=" + aluno2 + "\nAluno3=" + aluno3); } if (view.getId() == R.id.buttonListar) { List<Aluno> alunos = alunoDAO.getAll(); List<Disciplina> disciplinas = disciplinaDAO.getAll(); textViewResult.setText("Alunos: " + alunos + "\nDisciplinas: " + disciplinas); } } @Override protected void onDestroy() { super.onDestroy(); dbManager.close(); } }
Versão 4 (2 entidades e multiplicidade N:N):
-
DatabaseContract.java
import android.provider.BaseColumns; public final class DatabaseContract { private DatabaseContract() {} public static class AlunoEntry implements BaseColumns { public static final String TABLE_NAME = "aluno"; public static final String COLUMN_NOME = "nome"; public static final String COLUMN_IDADE = "idade"; } public static class DisciplinaEntry implements BaseColumns { public static final String TABLE_NAME = "disciplina"; public static final String COLUMN_NOME = "nome"; } public static class AlunoDisciplinaEntry implements BaseColumns { public static final String TABLE_NAME = "aluno_disciplina"; public static final String COLUMN_ALUNO_ID = "aluno_id"; public static final String COLUMN_DISCIPLINA_ID = "disciplina_id"; } }
-
DBHelper.java
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "escola.db"; private static final int DATABASE_VERSION = 1; public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL( "CREATE TABLE " + DatabaseContract.AlunoEntry.TABLE_NAME + " (" + DatabaseContract.AlunoEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + DatabaseContract.AlunoEntry.COLUMN_NOME + " TEXT UNIQUE," + DatabaseContract.AlunoEntry.COLUMN_IDADE + " INTEGER)" ); db.execSQL( "CREATE TABLE " + DatabaseContract.DisciplinaEntry.TABLE_NAME + " (" + DatabaseContract.DisciplinaEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + DatabaseContract.DisciplinaEntry.COLUMN_NOME + " TEXT UNIQUE)" ); db.execSQL( "CREATE TABLE " + DatabaseContract.AlunoDisciplinaEntry.TABLE_NAME + " (" + DatabaseContract.AlunoDisciplinaEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + DatabaseContract.AlunoDisciplinaEntry.COLUMN_ALUNO_ID + " INTEGER," + DatabaseContract.AlunoDisciplinaEntry.COLUMN_DISCIPLINA_ID + " INTEGER," + "UNIQUE(" + DatabaseContract.AlunoDisciplinaEntry.COLUMN_ALUNO_ID + "," + DatabaseContract.AlunoDisciplinaEntry.COLUMN_DISCIPLINA_ID + ")," + "FOREIGN KEY(" + DatabaseContract.AlunoDisciplinaEntry.COLUMN_ALUNO_ID + ") REFERENCES " + DatabaseContract.AlunoEntry.TABLE_NAME + "(" + DatabaseContract.AlunoEntry._ID + ") ON DELETE CASCADE," + "FOREIGN KEY(" + DatabaseContract.AlunoDisciplinaEntry.COLUMN_DISCIPLINA_ID + ") REFERENCES " + DatabaseContract.DisciplinaEntry.TABLE_NAME + "(" + DatabaseContract.DisciplinaEntry._ID + ") ON DELETE CASCADE)" ); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + DatabaseContract.AlunoDisciplinaEntry.TABLE_NAME); db.execSQL("DROP TABLE IF EXISTS " + DatabaseContract.AlunoEntry.TABLE_NAME); db.execSQL("DROP TABLE IF EXISTS " + DatabaseContract.DisciplinaEntry.TABLE_NAME); onCreate(db); } }
-
DBManager.java
import android.content.Context; import android.database.sqlite.SQLiteDatabase; public class DBManager { private DBHelper dbHelper; private SQLiteDatabase database; public DBManager(Context context) { dbHelper = new DBHelper(context); } public void open() { database = dbHelper.getWritableDatabase(); database.setForeignKeyConstraintsEnabled(true); } public void close() { dbHelper.close(); } public SQLiteDatabase getDatabase() { return database; } }
-
Aluno.java
public class Aluno { private long id; private String nome; private int idade; public Aluno(long id, String nome, int idade) { this.id = id; this.nome = nome; this.idade = idade; } public long getId() { return id; } public String getNome() { return nome; } public int getIdade() { return idade; } @Override public String toString() { return "Aluno{" + "id=" + id + ", nome='" + nome + '\'' + ", idade=" + idade + '}'; } }
-
AlunoDAO.java
import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import java.util.ArrayList; import java.util.List; public class AlunoDAO { private SQLiteDatabase db; public AlunoDAO(SQLiteDatabase db) { this.db = db; } public long insert(String nome, int idade) { ContentValues values = new ContentValues(); values.put("nome", nome); values.put("idade", idade); return db.insert("aluno", null, values); } public List<Aluno> getAll() { List<Aluno> list = new ArrayList<>(); Cursor cursor = db.query("aluno", null, null, null, null, null, null); while (cursor.moveToNext()) { long id = cursor.getLong(cursor.getColumnIndexOrThrow("id")); String nome = cursor.getString(cursor.getColumnIndexOrThrow("nome")); int idade = cursor.getInt(cursor.getColumnIndexOrThrow("idade")); list.add(new Aluno(id, nome, idade)); } cursor.close(); return list; } }
-
Disciplina.java
public class Disciplina { private long id; private String nome; public Disciplina(long id, String nome) { this.id = id; this.nome = nome; } public long getId() { return id; } public String getNome() { return nome; } @Override public String toString() { return "Disciplina{" + "id=" + id + ", nome='" + nome + '\'' + '}'; } }
-
DisciplinaDAO.java
import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import java.util.ArrayList; import java.util.List; public class DisciplinaDAO { private SQLiteDatabase db; public DisciplinaDAO(SQLiteDatabase db) { this.db = db; } public long insert(String nome) { ContentValues values = new ContentValues(); values.put("nome", nome); return db.insert("disciplina", null, values); } public List<Disciplina> getAll() { List<Disciplina> list = new ArrayList<>(); Cursor cursor = db.query("disciplina", null, null, null, null, null, null); while (cursor.moveToNext()) { long id = cursor.getLong(cursor.getColumnIndexOrThrow("id")); String nome = cursor.getString(cursor.getColumnIndexOrThrow("nome")); list.add(new Disciplina(id, nome)); } cursor.close(); return list; } }
-
AlunoDisciplinaDAO.java
import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import java.util.ArrayList; import java.util.List; public class AlunoDisciplinaDAO { private SQLiteDatabase db; public AlunoDisciplinaDAO(SQLiteDatabase db) { this.db = db; } public long linkAlunoDisciplina(long alunoId, long disciplinaId) { ContentValues values = new ContentValues(); values.put("aluno_id", alunoId); values.put("disciplina_id", disciplinaId); return db.insert("aluno_disciplina", null, values); } public List<String> getAlunosDisciplinas() { List<String> list = new ArrayList<>(); Cursor cursor = db.rawQuery( "SELECT a.nome, d.nome FROM aluno_disciplina ad " + "JOIN aluno a ON a.id = ad.aluno_id " + "JOIN disciplina d ON d.id = ad.disciplina_id", null ); while (cursor.moveToNext()) { String aluno = cursor.getString(0); String disciplina = cursor.getString(1); list.add(aluno + " -> " + disciplina); } cursor.close(); return list; } }
-
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/buttonInserir" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="clicar" android:text="Inserir" /> <Button android:id="@+id/buttonListar" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="clicar" android:text="Listar" /> </LinearLayout> <TextView android:id="@+id/textViewResult" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="resultado" /> </LinearLayout>
-
MainActivity.java
import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import java.util.List; public class MainActivity extends AppCompatActivity { private DBManager dbManager; private AlunoDAO alunoDAO; private DisciplinaDAO disciplinaDAO; private AlunoDisciplinaDAO alunoDisciplinaDAO; private Button btnInserir, btnListar; private TextView textViewResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbManager = new DBManager(this); dbManager.open(); alunoDAO = new AlunoDAO(dbManager.getDatabase()); disciplinaDAO = new DisciplinaDAO(dbManager.getDatabase()); alunoDisciplinaDAO = new AlunoDisciplinaDAO(dbManager.getDatabase()); btnInserir = findViewById(R.id.buttonInserir); btnListar = findViewById(R.id.buttonListar); textViewResult = findViewById(R.id.textViewResult); } public void clicar(View view) { if (view.getId() == R.id.buttonInserir) { long aluno1 = alunoDAO.insert("Ana", 20); long aluno2 = alunoDAO.insert("João", 22); long disc1 = disciplinaDAO.insert("Matemática"); long disc2 = disciplinaDAO.insert("História"); alunoDisciplinaDAO.linkAlunoDisciplina(aluno1, disc1); alunoDisciplinaDAO.linkAlunoDisciplina(aluno1, disc2); alunoDisciplinaDAO.linkAlunoDisciplina(aluno2, disc1); textViewResult.setText("Inserido com sucesso!"); } if (view.getId() == R.id.buttonListar) { List<String> list = alunoDisciplinaDAO.getAlunosDisciplinas(); StringBuilder sb = new StringBuilder(); for (String s : list) sb.append(s).append("\n"); textViewResult.setText(sb.toString()); } } @Override protected void onDestroy() { super.onDestroy(); dbManager.close(); } }
Para visualizar as tabelas criadas no aplicativo é necessário exportar o arquivo .db e usar um aplicativo específico, por exemplo o SQLiteStudio, disponível em: https://sqlitestudio.pl/.