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

Relacionamento de tabelas - SQLITE

Boa noite, estou com uma dúvida sobre a criação de tabelas usando o SQLiteOpenHelper. Tenho 3 tabelas e necessito relacionar as 3 usando JOIN. No começo, estava usando 3 arquivos DAO , exemplo: usuarioDAO , tipoDAO e despesaDAO. Todas elas herdando a classe SQLiteOpenHelper e sobrescrevendo os métodos onCreate e onUpgrade, além de sobrescrever o construtor com nome do banco, versão, etc... Percebi que mesmo colocando o mesmo nome, 2 bancos eram criados, porque não conseguia relacionar a tabela. Como resolver isso, criar um arquivo DAO apenas, como abaixo? Como posso ver o que está no banco de dados? Tem como eu ver dentro do android studio? não achei meu banco de dados na plataforma após criado.

private static final String TABELA_USUARIO = "CREATE TABLE T_USUARIO (id INTEGER PRIMARY KEY, nome TEXT NOT NULL);";

private static final String TABELA_TIPO_DESPESA = "CREATE TABLE T_TIPO_DESPESA (id INTEGER PRIMARY KEY, descricao TEXT NOT NULL);";

private static final String TABELA_DESPESA = "CREATE TABLE T_DESPESA (id INTEGER PRIMARY KEY, usuarioId INTEGER NOT NULL, despesaId INTEGER NOT NULL, descricao TEXT, valor REAL NOT NULL, data TEXT);";

public Dao(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); }

@Override public void onCreate(SQLiteDatabase db) { db.execSQL(TABELA_USUARIO); db.execSQL(TABELA_TIPO_DESPESA); db.execSQL(TABELA_DESPESA); }'

Obrigado,

3 respostas

Oi Fernando, tudo bem ?

Uma coisa que você pode fazer é :

  • Criar uma classe que extenda SQLiteOpenHelper e nela você criar todas tabelas que vai precisar no método onCreate
  • Para manipular cada objeto você cria classes Dao que farão esse manipulamento e em cada classe você teria um atributo que seria a classe que filha de SQLiteOpenHelper

Em questão de joins você consegue dar uma olhadinha melhor aqui na documentação do SQLite

https://www.sqlite.org/

Espero ter ajudado !

Abraços

Boa Noite, Obrigado pela ajuda. Entretanto, quando eu tento criar a outra classe, por exemplo, UsuarioDao ele me mostra um erro para usar o método getReadableDatabase(). Acredito que ele depende de algo do SQLiteOpenHelper.

SQLiteDatabase db = getReadableDatabase()

Segue meu código:

public class testeDao {

    public List<Usuario> listarUsuarios() {
        List<Usuario> lista = new ArrayList<Usuario>();

        String sql = "SELECT * FROM T_USUARIO;";
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery(sql, null);
        while(cursor.moveToNext()){
            Usuario usuario = new Usuario();
            usuario.setId(cursor.getLong(cursor.getColumnIndex("id")));
            usuario.setNome(cursor.getString(cursor.getColumnIndex("nome")));
            lista.add(usuario);
        }
        cursor.close();
        db.close();
        return lista;
    }

Obrigado,

solução!

Fernando, tudo bem ?

Você vai precisar fazer algo parecido com isso :

class HelperDao extends SQLiteOpenHelper {

    // criação de todas as  tabelas
}

E agora nas suas classes auxiliares :

public class AlunoDao {

    private HelperDao dao;

    public AlunoDao(Context ctx) {
        dao = new HelperDao(ctx);
    }

    public void insere (Aluno aluno) {

        dao.getWritableDatabase().insert(...);

    }

    // demais métodos
}

Espero ter ajudado !

Abraços

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software