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

Problemas com Banco de Dados em Android

Qual a forma certa de fazer o banco de dados? Por que eu estou criando uma outra tabela no mesmo banco de dados, como eu faço para fazer isso no banco de dados, por que acho que está dando conflito, e toda vez que eu clico para "listar os produtos" ele da erro no aplicativo.

O do Usuário é o original http://imgur.com/a/haj1x a segunda imagem é da segunda tabela que estou tentando criar http://imgur.com/a/AWC5o

14 respostas

Oi Dhan, tudo bem ?

Cara o correto é você ter uma unica classe que herde de SQLiteOpenHelper e você ter vários daos que tenham um atributo desse tipo :

public class HelperDao extends SQLiteOpenHelper{
// criacao das tabelas
}

public class AlunoDAO{
    private HelperDao dao;
}

public class ProfessorDAO{
    private HelperDao dao;
}

E através desse dao você tem acesso ao banco de dados e faz suas acões.

Assim ? por que eu fiz e encheu de erro ...

http://imgur.com/a/4LQsu

Renner,

O HelperDao só cria as tabelas.

São seus daos especificos que devem fazer a comunicão com o banco.

Entao o que eu fiz está errado ? Eu não entendi , o HelperDao , só vai armazenar a creação de tabela ,as como vou informar para os meus "usuario e produto dao" que as tabelas que eles querem estao na helperdao e quando eu dou extends SQLiteOpenHelper ele pede para implementar o create e o update ?

isso foi o que eu fiz .... ele n mostra erro ,porem n funciona ... http://imgur.com/a/vY2Ar

Renner, dá uma olhadinha no exemplo que dei lá em cima !

Ele não estende, senão o problema continua sendo o mesmo.

O que precisa fazer é isso :

public class HelperDao extends SQLiteOpenHelper{
// criacao das tabelas
}

public class AlunoDAO{
    private HelperDao dao;

// vai usar esse atributo dao para fazer a comunicação
}

public class ProfessorDAO{
    private HelperDao dao;

// vai usar esse atributo dao para fazer a comunicação

}

Então eu tendo que deletar minhas outras tabelas DAO ? depois criar uma sozinha, e colocar tudo dentro dela , por que eu ja fiz isso e me falaram que está errado ...

eu realmente não entendi o que voce quis dizer.

Renner,

Você faz a criação de TODAS as tabelas na classe que herda de SQLiteOpenHelper.

public class HelperDao extends SQLiteOpenHelper{
    // criacao das tabelas
}

Agora você vai usar o pattern DAO, para cada Entidade que tenha :


public class AlunoDAO{
    private HelperDao dao;

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

    public void salva(Aluno a){
        ContentValues values = new ContentValues();


        dao.getWritableDatabase().insert("Alunos", null, values);
    }

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

Certo , acho que agora entendi mais ou menos , mas agora o que eu tenho que fazer pra importar o getWritableDatabase(); ?

http://imgur.com/a/dCKmj

O seu objeto que representa a sua conexão com o banco de dados.

    public void salva(Aluno a){
        ContentValues values = new ContentValues();


        dao.getWritableDatabase().insert("Alunos", null, values);
    }

E para o resto ?

http://imgur.com/a/onzFs

A ideia é a mesma, continuar a usar o objeto que gerencia o banco de dados.

O foda é que eu n conheco android , eu estou parado no mesmo lugar , nao sei como usar os comands , seria pedir muito se voce fizesse e me mandasse para eu usar como exemplo? eu estou seguindo o curso basico de andorid 1 do alura pra fazer um trabalho que precisa ser entregue ate sexta feira, e estou enrolado com isso faz uns 4 dias....

solução!

Renner,

Cara, senti que seu problema não é nem tanto com Android e sim com a questão de Orientação a Objetos, talvez valha a pena você dar uma olhadinha nos cursos de OO aqui da plataforma e em seguida partir para android novamente.

A idéia disso é que o HelperDao forneça tudo que você faria dentro da classe SQLiteOpenHelper, por exemplo as instâncias do banco tanto a de leitura quanto a de escrita, já que as demais classes não possuem estes métodos.

Achei muito infeliz seu comentário, Obrigado.

Peço para que outro tire minhas duvidas num futuro caso seja possível.