Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Relacionamento de tabelas no SQLite

Boa tarde, estou criando um app com banco local (apenas para testes) para fazer uma coleta de dados, entretanto estou com dificuldade na hora de fazer as heranças e inserts no banco, este é a criação do meu HelperDAO com todas as tabelas e foreign key:

public class HelperDAO extends SQLiteOpenHelper {
    public HelperDAO(Context context) {
        super(context, "db_app", null, 11);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String empresaSQL = "CREATE TABLE Empresas(empresa_id INTEGER PRIMARY KEY AUTOINCREMENT, empresa_nome TEXT NOT NULL, empresa_segmento TEXT NOT NULL);";
        String unidadeSQL = "CREATE TABLE Unidades(unidade_id INTEGER PRIMARY KEY AUTOINCREMENT, unidade_nome TEXT NOT NULL, unidade_cidade TEXT NOT NULL," +
                "empresa_nome TEXT NOT NULL, FOREIGN KEY (empresa_nome) REFERENCES Empresas(empresa_nome));";
        String setorSQL = "CREATE TABLE Setores (setor_id INTEGER PRIMARY KEY AUTOINCREMENT, setor_nome TEXT NOT NULL, setor_atividade TEXT NOT NULL," +
                "unidade_nome TEXT NOT NULL, FOREIGN KEY (unidade_nome) REFERENCES Unidades(unidade_nome));";
        db.execSQL(empresaSQL);
        db.execSQL(unidadeSQL);
        db.execSQL(setorSQL);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String empresaSQL = "DROP TABLE IF EXISTS Empresas;";
        String unidadeSQL = "DROP TABLE IF EXISTS Unidades;";
        String setorSQL = "DROP TABLE IF EXISTS Setores;";
        db.execSQL(empresaSQL);
        db.execSQL(unidadeSQL);
        db.execSQL(setorSQL);
        onCreate(db);
    }
}

Entretanto, na hora de trabalhar no insert de uma Unidade, por exemplo, eu não consigo trazer a empresa também. Segue código:

package br.com.hlnengenharia.tcc.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.NonNull;

import java.util.ArrayList;
import java.util.List;

import br.com.hlnengenharia.tcc.helper.HelperDAO;
import br.com.hlnengenharia.tcc.model.Empresa;
import br.com.hlnengenharia.tcc.model.Unidade;

/**
 * Created by rn-15 on 05/03/2018.
 */

public class UnidadeDAO {
    private HelperDAO dao;
    private Context context;

    public UnidadeDAO(Context context) {
        dao = new HelperDAO(context);
    }

    public void closeDAO(){
        dao.close();
    }


    public void insere(Unidade unidade) {
        SQLiteDatabase db = dao.getReadableDatabase();

        ContentValues dados = pegaDadosUnidades(unidade);

        db.insert("Unidades", null, dados);
    }

    public void altera(Unidade unidade) {
        SQLiteDatabase db = dao.getWritableDatabase();

        ContentValues dados = pegaDadosUnidades(unidade);
        String[]params = {unidade.getUnidade_id().toString()};

        db.update("Unidades", dados, "unidade_id=?", params);
    }

    public void deleta(Unidade unidade) {
        SQLiteDatabase db = dao.getWritableDatabase();
        String[]params = {unidade.getUnidade_id().toString()};
        db.delete("Unidades", "unidade_id=?", params);
    }

    @NonNull
    private ContentValues pegaDadosUnidades(Unidade unidade) {
        ContentValues dados = new ContentValues();
        dados.put("unidade_nome", unidade.getUnidade_nome());
        dados.put("unidade_cidade", unidade.getUnidade_cidade());
        dados.put("empresa_nome", unidade.getFk_empresa().equals(unidade.getEmpresa_nome()));
        return dados;
    }

    public List<Unidade> buscaUnidade() {
        String sql = "SELECT * FROM Unidades;";
        SQLiteDatabase db =  dao.getReadableDatabase();

        Cursor c = db.rawQuery(sql, null);
        List<Unidade> unidades = new ArrayList<>();
        while (c.moveToNext()){
            Unidade u = new Unidade();
            u.setUnidade_id(c.getLong(c.getColumnIndex("unidade_id")));
            u.setUnidade_nome(c.getString(c.getColumnIndex("unidade_nome")));
            u.setUnidade_cidade(c.getString(c.getColumnIndex("unidade_cidade")));
            u.setFk_empresa(c.getString(c.getColumnIndex("empresa_nome")));

            unidades.add(u);
        }
        c.close();
        return unidades;
    }


}

Será que alguém poderia me ajudar?

2 respostas
solução!

Oi Rafaela, tudo bem ?

Fiz algo bem similar ao que quer fazer tcc num projetinho de estudos, dá uma olhada nele aqui

O que precisar dá um toque

Opa, Matheus, muito agradecida. Vou tentar aqui e ver no que dá, qualquer coisa volto a perguntar!

Vlw mesmo!!