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

Dúvida sobre o BD com SQLITE

Pessoal pode parecer tosco, mas onde criamos o banco de dados? onde android joga um "create dataBase"?Sabemos que toda classe que herda de SQLiteOpenHelperm tem que implementar em seu construtor 4 parÂmetros:

public DBHelper(Context context) {
        super(context, DATABASE, null, VERSAO);
    }
é nesse momento que o banco é criado?
8 respostas
solução!

Criando a Classe, que normalmente chamada DAO, você extende ela com o SQLiteOpenHelper e ele ja implementa os métodos. No caso um dos métodos é o onCreate onde você cria as tabelas. Não é necessário criar o banco, quando a classe DAO é chamada, já se cria o BD, porem as tabelas dependem de seu SQL. Exemplo abaixo que uso em um projeto.

public class SuaClasseDAO extends SQLiteOpenHelper {

    private static final String DATABASE = "seubanco";

    private static final int VERSION = 1;

    public SuaClasseDAO(Context context) {
        super(context, DATABASE, null, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) { /*aqui ele cria o banco */

        String ddl = "CREATE TABLE ..."; /*aqui ele monta a query para criar as tabelas */

        db.execSQL(ddl); /*aqui ele executa a query criada acima. */

    }
    ...outros metodos

Espero que ajude.

Opa Leomar, blz? show de bola a resposta cara. matou a duvida! então, o BD é criado na primeira vez que o onCreate é chamado, juntamente com a(s) tables. por isso também o script só rola uma vez...

Exatamente thiago. Caso queira atualizar a tabela ou algo assim use o onUpgrade. ele também é implementado junto com o onCreate. Abraço.

Leonardo, caso eu tenha mais de uma tabela no meu app e elas forem implementadas em DAO's diferentes (por exemplo AlunoDAO e TurmaDAO), ambas as classes irão chamar o método onCreate?

Olá, estou com a mesma dúvida do Guilherme, no meu projeto renho duas classes, criei dois DAO's cada um representando a classe referente, porém o onCreate é implementado nos dois, o que acaba em erro na criação da segunda tabela. Como faço pra criar as Tabelas distintas dentro do mesmo Banco de dados? Eu posso criar um único DAO que herda SQLiteOpenHelper e nele implementar o onCreate e os demais DAO's da aplicação herdo desse DAO "genérico"? qual é a melhor prática?

Anderson, pelo jeito tem-se que criar somente um DAO para criação do banco mesmo, que pode ser chamado de BaseDAO. Os demais DAOs seriam somente para inserir, consultar, alterar e excluir. Segue o link que achei:

http://escoladeandroid.blogspot.com.br/2012/02/android-criando-uma-agenda-de-contatos.html

Fico grato caso tenham algo a acrescentar. Abraços

Pessoal, toda instância é chamada e executada quando ela é instanciada. Isso é básico. Porem o dao eu recomendo que crie apenas um. Assim você cria um banco com duas tabelas. Você pode fazer como foi recomendado acima. Criar o dao apenas para operações. Independente disso recomendo que crie tudo junto e bem organizado. Vale mais a pena ao meu ver.

Entendi, Obrigado Guilherme e Leonardo.